From 5de4c51927845b8a33e1fb85e3f5340067898ad7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 17 Mar 2016 10:07:34 +0100 Subject: [PATCH 001/344] made progress counter volatile --- .../eclipse/hawkbit/controller/ArtifactDownloadTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java index b49f34b5f..6149472a7 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/ArtifactDownloadTest.java @@ -64,13 +64,11 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Artifact Download Resource") public class ArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { - private static final String AUTH_ANOYM = "ROLE_CONTROLLER_ANONYMOUS"; - public ArtifactDownloadTest() { LOG = LoggerFactory.getLogger(ArtifactDownloadTest.class); } - private int downLoadProgress = 0; + private volatile int downLoadProgress = 0; @Autowired private EventBus eventBus; @@ -364,7 +362,7 @@ public class ArtifactDownloadTest extends AbstractIntegrationTestWithMongoDB { // create target Target target = new Target("4712"); target = targetManagement.createTarget(target); - final List targets = new ArrayList(); + final List targets = new ArrayList<>(); targets.add(target); // create ds From 5279276146185a16516b1678c9c0d3f3ac9e8353 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 17 Mar 2016 10:09:42 +0100 Subject: [PATCH 002/344] Removed unnecessary type reference --- .../hawkbit/repository/DeploymentManagementTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 ecf079c29..dd674d3a3 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 @@ -1021,8 +1021,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { } private static class EventHandlerMock { - private final List events = Collections - .synchronizedList(new LinkedList()); + private final List events = Collections.synchronizedList(new LinkedList<>()); private final CountDownLatch latch; private final int expectedNumberOfEvents; @@ -1050,8 +1049,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { } private static class CancelEventHandlerMock { - private final List events = Collections - .synchronizedList(new LinkedList()); + private final List events = Collections.synchronizedList(new LinkedList<>()); private final CountDownLatch latch; private final int expectedNumberOfEvents; From e236984d94ecbf9d8d7b89bcd2cde6fdb51f15bf Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Mon, 21 Mar 2016 13:02:23 +0100 Subject: [PATCH 003/344] Deployment view - tags :Fixed N+1 query issue Bug fix: Deleted tag displayed in tag layout Signed-off-by: asharani-murugesh --- .../ui/artifacts/smtype/SMTypeFilterButtons.java | 4 ++-- .../detailslayout/SoftwareModuleDetailsTable.java | 1 - .../common/filterlayout/AbstractFilterButtons.java | 9 +++++---- .../distributions/disttype/DSTypeFilterButtons.java | 5 ++--- .../smtype/DistSMTypeFilterButtons.java | 5 ++--- .../ui/management/dstag/DistributionTagButtons.java | 10 +++------- .../management/targettag/TargetTagFilterButtons.java | 12 ++++-------- .../hawkbit/ui/push/DelayedEventBusPushStrategy.java | 4 +++- 8 files changed, 21 insertions(+), 29 deletions(-) diff --git a/hawkbit-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 index 9f2aa9602..857b27a7e 100644 --- a/hawkbit-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 @@ -97,9 +97,9 @@ public class SMTypeFilterButtons extends AbstractFilterButtons { } @Override - protected boolean isClickedByDefault(final Long buttonId) { + protected boolean isClickedByDefault(final String typeName) { return artifactUploadState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() && artifactUploadState - .getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId); + .getSoftwareModuleFilters().getSoftwareModuleType().get().getName().equals(typeName); } @Override 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 8def18034..40acb6581 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 @@ -161,7 +161,6 @@ public class SoftwareModuleDetailsTable extends Table { if (null != distributionSet) { if (isUnassignSoftModAllowed && permissionChecker.hasUpdateDistributionPermission()) { try { - distributionSetManagement.checkDistributionSetAlreadyUse(distributionSet); isTargetAssigned = false; } catch (final EntityLockedException exception) { isTargetAssigned = true; 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 6ed10166f..e95797fb4 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 @@ -114,7 +114,7 @@ public abstract class AbstractFilterButtons extends Table { typeButton.addClickListener(event -> filterButtonClickBehaviour.processFilterButtonClick(event)); if (typeButton.getData().equals(SPUIDefinitions.NO_TAG_BUTTON_ID) && isNoTagSateSelected()) { filterButtonClickBehaviour.setDefaultClickedButton(typeButton); - } else if (id != null && isClickedByDefault(id)) { + } else if (id != null && isClickedByDefault(name)) { filterButtonClickBehaviour.setDefaultClickedButton(typeButton); } final DragAndDropWrapper wrapper = createDragAndDropWrapper(typeButton, name, id); @@ -205,10 +205,11 @@ public abstract class AbstractFilterButtons extends Table { /** * Check if button should be displayed as clicked by default. * - * @param id - * @return + * @param buttonCaption + * button caption + * @return true if button is clicked */ - protected abstract boolean isClickedByDefault(final Long buttonId); + protected abstract boolean isClickedByDefault(final String buttonCaption); /** * Get filter button Id. 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 cd36918e8..aa35c0622 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 @@ -79,10 +79,9 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { } @Override - protected boolean isClickedByDefault(final Long buttonId) { - + protected boolean isClickedByDefault(final String typeName) { return manageDistUIState.getManageDistFilters().getClickedDistSetType() != null - && manageDistUIState.getManageDistFilters().getClickedDistSetType().getId().equals(buttonId); + && manageDistUIState.getManageDistFilters().getClickedDistSetType().getName().equals(typeName); } @Override diff --git a/hawkbit-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 index d3251cf9b..f086fed2c 100644 --- a/hawkbit-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 @@ -82,10 +82,9 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { } @Override - protected boolean isClickedByDefault(final Long buttonId) { - + protected boolean isClickedByDefault(final String typeName) { return manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().isPresent() - && manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().get().getId().equals(buttonId); + && manageDistUIState.getSoftwareModuleFilters().getSoftwareModuleType().get().getName().equals(typeName); } @Override 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 98c48d235..5e613c682 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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.annotation.PreDestroy; @@ -16,7 +17,6 @@ import javax.annotation.PreDestroy; 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; @@ -58,9 +58,6 @@ public class DistributionTagButtons extends AbstractFilterButtons { @Autowired private DistributionTagDropEvent spDistTagDropEvent; - @Autowired - private transient TagManagement tagMgmtService; - @Autowired private ManagementUIState managementUIState; @@ -121,10 +118,9 @@ public class DistributionTagButtons extends AbstractFilterButtons { } @Override - protected boolean isClickedByDefault(final Long buttonId) { - final DistributionSetTag dsTagObject = tagMgmtService.findDistributionSetTagById(buttonId); + protected boolean isClickedByDefault(final String tagName) { return null != managementUIState.getDistributionTableFilters().getDistSetTags() - && managementUIState.getDistributionTableFilters().getDistSetTags().contains(dsTagObject.getName()); + && managementUIState.getDistributionTableFilters().getDistSetTags().contains(tagName); } @Override 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 9d93962da..9571233e4 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 @@ -15,11 +15,11 @@ import java.util.stream.Collectors; import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; 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; @@ -70,9 +70,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { @Autowired private ManagementUIState managementUIState; - @Autowired - private transient TagManagement tagMgmtService; - @Autowired private ManagementViewAcceptCriteria managementViewAcceptCriteria; @@ -139,10 +136,9 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } @Override - protected boolean isClickedByDefault(final Long buttonId) { - final TargetTag newTagClickedObj = tagMgmtService.findTargetTagById(buttonId); - return managementUIState.getTargetTableFilters().getClickedTargetTags() != null && managementUIState - .getTargetTableFilters().getClickedTargetTags().contains(newTagClickedObj.getName()); + protected boolean isClickedByDefault(final String tagName) { + return managementUIState.getTargetTableFilters().getClickedTargetTags() != null + && managementUIState.getTargetTableFilters().getClickedTargetTags().contains(tagName); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java index 87fcbe922..56ffdd95b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java @@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; +import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.EntityEvent; import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; @@ -27,6 +28,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.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,7 +78,7 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { */ private static final Set> UI_EVENTS = Sets.newHashSet(TargetInfoUpdateEvent.class, TargetCreatedEvent.class, TargetDeletedEvent.class, RolloutChangeEvent.class, RolloutGroupChangeEvent.class, - TargetTagCreatedBulkEvent.class, DistributionSetTagCreatedBulkEvent.class); + TargetTagCreatedBulkEvent.class, DistributionSetTagCreatedBulkEvent.class,TargetTagDeletedEvent.class,DistributionSetTagDeletedEvent.class); /** * Constructor. From 2739fee158ad6526457c7272b6d171696174bc5e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 22 Mar 2016 14:56:41 +0100 Subject: [PATCH 004/344] Upgraded Vaadin to 7.6.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2415b9935..f42236d07 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,7 @@ 1.0.0 0.0.6.RELEASE - 7.6.3 + 7.6.4 ${vaadin.version} 7.4.0.1 2.2.0 From a3295b518d5b60c158359c88370c9af3ae66e1c5 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 22 Mar 2016 17:01:24 +0100 Subject: [PATCH 005/344] Added tenant configuration for anyonmous download and UI element to allow to configure anonymous download Signed-off-by: Jonathan Philip Knoblauch --- .../configuration/TenantConfigurationKey.java | 7 +- .../DownloadAnonymousConfigurationView.java | 121 ++++++++++++++++++ .../TenantConfigurationDashboardView.java | 4 + .../src/main/resources/messages.properties | 2 + .../src/main/resources/messages_de.properties | 2 + .../src/main/resources/messages_en.properties | 2 + 6 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java 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 c83f24dc2..32a7a8376 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 @@ -63,7 +63,12 @@ public enum TenantConfigurationKey { /** * string value which holds the polling time interval in the format HH:mm:ss */ - POLLING_OVERDUE_TIME_INTERVAL("pollingTime", "hawkbit.controller.pollingTime", String.class, null, TenantConfigurationPollingDurationValidator.class); + POLLING_OVERDUE_TIME_INTERVAL("pollingTime", "hawkbit.controller.pollingTime", 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); private final String keyName; private final String defaultKeyName; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java new file mode 100644 index 000000000..7366a251f --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java @@ -0,0 +1,121 @@ +/** + * 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.tenantconfiguration; + +import javax.annotation.PostConstruct; + +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; +import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.springframework.beans.factory.annotation.Autowired; + +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.GridLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Panel; +import com.vaadin.ui.VerticalLayout; + +/** + * @author Jonathan Knoblauch + * + */ + +@SpringComponent +@ViewScope +public class DownloadAnonymousConfigurationView extends BaseConfigurationView + implements ConfigurationItem.ConfigurationItemChangeListener { + + private static final String DIST_CHECKBOX_STYLE = "dist-checkbox-style"; + + private static final long serialVersionUID = 1L; + + @Autowired + private I18N i18n; // TODO + + @Autowired + private transient TenantConfigurationManagement tenantConfigurationManagement; + + boolean anonymousDownloadEnabled; + + private CheckBox downloadAnonymousCheckBox; + + /** + * Initialize Default Distribution Set layout. + */ + @PostConstruct + public void init() { + + final TenantConfigurationValue value = tenantConfigurationManagement + .getConfigurationValue(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, Boolean.class); + anonymousDownloadEnabled = value.getValue(); + + final Panel rootPanel = new Panel(); + rootPanel.setSizeFull(); + rootPanel.addStyleName("config-panel"); + + final VerticalLayout vLayout = new VerticalLayout(); + vLayout.setMargin(true); + vLayout.setSizeFull(); + + final Label headerDisSetType = new Label(i18n.get("enonymous.download.title")); + headerDisSetType.addStyleName("config-panel-header"); + vLayout.addComponent(headerDisSetType); + + final GridLayout gridLayout = new GridLayout(2, 1); + gridLayout.setSpacing(true); + gridLayout.setImmediate(true); + gridLayout.setColumnExpandRatio(1, 1.0F); + gridLayout.setSizeFull(); + + downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); + downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); + downloadAnonymousCheckBox.setId("TODO"); + downloadAnonymousCheckBox.addValueChangeListener(event -> configurationHasChanged()); + gridLayout.addComponent(downloadAnonymousCheckBox); + + final Label configurationLabel = SPUIComponentProvider.getLabel(i18n.get("enonymous.download.label"), + SPUILabelDefinitions.SP_LABEL_SIMPLE); + gridLayout.addComponent(configurationLabel); + gridLayout.setComponentAlignment(configurationLabel, Alignment.MIDDLE_LEFT); + + vLayout.addComponent(gridLayout); + + rootPanel.setContent(vLayout); + setCompositionRoot(rootPanel); + + } + + @Override + public void configurationHasChanged() { + anonymousDownloadEnabled = downloadAnonymousCheckBox.getValue(); + notifyConfigurationChanged(); + } + + @Override + public void save() { + tenantConfigurationManagement.addOrUpdateConfiguration(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, + downloadAnonymousCheckBox.getValue()); + // TODO notification Download server + } + + @Override + public void undo() { + anonymousDownloadEnabled = tenantConfigurationManagement + .getGlobalConfigurationValue(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, Boolean.class); + downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); + + } + +} 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 8a22064ab..0349ba867 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 @@ -58,6 +58,9 @@ public class TenantConfigurationDashboardView extends CustomComponent implements @Autowired private PollingConfigurationView pollingConfigurationView; + @Autowired + private DownloadAnonymousConfigurationView downloadAnonymousConfigurationView; + @Autowired private I18N i18n; @@ -80,6 +83,7 @@ public class TenantConfigurationDashboardView extends CustomComponent implements configurationViews.add(defaultDistributionSetTypeLayout); configurationViews.add(authenticationConfigurationView); configurationViews.add(pollingConfigurationView); + configurationViews.add(downloadAnonymousConfigurationView); } @Override diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 27103a0b9..ebdcfa76f 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -401,6 +401,8 @@ configuration.polling.title=Polling Configuration configuration.polling.time=Polling Time configuration.polling.overduetime=Polling Overdue Time configuration.polling.custom.value=use a custom value +enonymous.download.title=Anonymous download +enonymous.download.label=Allow anonymous download. If you enable this option the download server will accept anonymous download requests. #Calendar calendar.year=year diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 9ff2e5e75..47cb36f31 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -389,6 +389,8 @@ configuration.defaultdistributionset.select.label=Wahl des default Distribution configuration.savebutton.tooltip=Konfigurationen speichern configuration.cancellbutton.tooltip=Konfigurationen zur�cksetzen configuration.authentication.title=Authentifikationseinstellungen +enonymous.download.title=Anonymes herunterladen +enonymous.download.label=Erlaube anonymes herunterladen. When diese option aktivert ist, wird der download server anonyme download anfragen erlauben. #Calendar calendar.year=Jahr calendar.years=Jahre diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 74f50f378..50c04ad46 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -383,6 +383,8 @@ configuration.authentication.title=Authentication Configuration controller.polling.title=Polling Configuration controller.polling.time=Polling Time controller.polling.overduetime=Polling Overdue Time +enonymous.download.title=Anonymous download +enonymous.download.label=Allow anonymous download. If you enable this option the download server will accept anonymous download requests. #Calendar calendar.year=year From 24b2469c8417987e701bb25f47a9b78dbe78c3a8 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Wed, 23 Mar 2016 09:43:29 +0100 Subject: [PATCH 006/344] Removed unused imports Signed-off-by: asharani-murugesh --- .../java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java | 3 --- .../hawkbit/ui/management/dstag/DistributionTagButtons.java | 1 - .../eclipse/hawkbit/ui/management/targettable/TargetTable.java | 1 - .../ui/management/targettag/TargetTagFilterButtons.java | 1 - 4 files changed, 6 deletions(-) diff --git a/hawkbit-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 index 7cd276258..6ac205cf2 100644 --- a/hawkbit-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 @@ -12,10 +12,7 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import com.vaadin.data.Container; import com.vaadin.data.Container.Indexed; -import com.vaadin.shared.ui.grid.HeightMode; import com.vaadin.ui.Grid; -import com.vaadin.ui.Label; -import com.vaadin.ui.themes.ValoTheme; /** * Abstract table class. 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 5e613c682..287071fe8 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 @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.annotation.PreDestroy; 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 960553a6a..1ed0a400e 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 @@ -15,7 +15,6 @@ 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 java.util.stream.Collectors; 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 9571233e4..d47376d0d 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 @@ -15,7 +15,6 @@ import java.util.stream.Collectors; import javax.annotation.PreDestroy; -import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; From cdac7185c47dc9c8b9288d669a89d57950cf0548 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 23 Mar 2016 10:23:35 +0100 Subject: [PATCH 007/344] fix typo of class TenantSecurityToken and handle authentication message based on FileResource not only on SHA1 hash Signed-off-by: Michael Hirsch --- .../amqp/AmqpControllerAuthentfication.java | 6 +- .../amqp/AmqpMessageHandlerService.java | 52 ++++-- .../AmqpControllerAuthenticationTest.java | 29 +-- .../amqp/AmqpMessageHandlerServiceTest.java | 9 +- .../dmf/json/model/TenantSecruityToken.java | 94 ---------- .../dmf/json/model/TenantSecurityToken.java | 176 ++++++++++++++++++ ...actHttpControllerAuthenticationFilter.java | 15 +- .../repository/ArtifactManagement.java | 3 +- ...bstractControllerAuthenticationFilter.java | 8 +- .../CoapAnonymousPreAuthenticatedFilter.java | 16 +- ...lerPreAuthenticateSecurityTokenFilter.java | 8 +- ...thenticatedGatewaySecurityTokenFilter.java | 8 +- ...rPreAuthenticatedSecurityHeaderFilter.java | 10 +- .../security/PreAuthenficationFilter.java | 8 +- 14 files changed, 279 insertions(+), 163 deletions(-) delete mode 100644 hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecruityToken.java create mode 100644 hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java index 8f19d9f02..3fa7979b9 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java @@ -13,7 +13,7 @@ import java.util.List; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; @@ -100,7 +100,7 @@ public class AmqpControllerAuthentfication { * the authentication request object * @return the authentfication object */ - public Authentication doAuthenticate(final TenantSecruityToken secruityToken) { + public Authentication doAuthenticate(final TenantSecurityToken secruityToken) { PreAuthenticatedAuthenticationToken authentication = new PreAuthenticatedAuthenticationToken(null, null); for (final PreAuthenficationFilter filter : filterChain) { final PreAuthenticatedAuthenticationToken authenticationRest = createAuthentication(filter, secruityToken); @@ -115,7 +115,7 @@ public class AmqpControllerAuthentfication { } private static PreAuthenticatedAuthenticationToken createAuthentication(final PreAuthenficationFilter filter, - final TenantSecruityToken secruityToken) { + final TenantSecurityToken secruityToken) { if (!filter.isEnable(secruityToken)) { return null; 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 cfd5485a6..71b8f8db8 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 @@ -27,8 +27,9 @@ import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.ActionUpdateStatus; import org.eclipse.hawkbit.dmf.json.model.Artifact; import org.eclipse.hawkbit.dmf.json.model.ArtifactHash; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken.FileResource; import org.eclipse.hawkbit.dmf.json.model.DownloadResponse; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; @@ -157,25 +158,29 @@ public class AmqpMessageHandlerService extends BaseAmqpService { private Message handleAuthentifiactionMessage(final Message message) { final DownloadResponse authentificationResponse = new DownloadResponse(); final MessageProperties messageProperties = message.getMessageProperties(); - final TenantSecruityToken secruityToken = convertMessage(message, TenantSecruityToken.class); - final String sha1 = secruityToken.getSha1(); + final TenantSecurityToken secruityToken = convertMessage(message, + TenantSecurityToken.class); + final FileResource fileResource = secruityToken.getFileResource(); try { SecurityContextHolder.getContext().setAuthentication(authenticationManager.doAuthenticate(secruityToken)); - final LocalArtifact localArtifact = artifactManagement - .findFirstLocalArtifactsBySHA1(secruityToken.getSha1()); + + final LocalArtifact localArtifact = findLocalArtifactByFileResource(fileResource); + if (localArtifact == null) { throw new EntityNotFoundException(); } // check action for this download purposes, the method will throw an // EntityNotFoundException in case the controller is not allowed to - // download this file - // because it's not assigned to an action and not assigned to this - // controller. - final Action action = controllerManagement.getActionForDownloadByTargetAndSoftwareModule( - secruityToken.getControllerId(), localArtifact.getSoftwareModule()); - LOG.info("Found action for download authentication request action: {}, sha1: {}", action, - secruityToken.getSha1()); + // download this file because it's not assigned to an action and not + // assigned to this controller. Otherwise no controllerId is set = + // anonymous download + if (secruityToken.getControllerId() != null) { + final Action action = controllerManagement.getActionForDownloadByTargetAndSoftwareModule( + secruityToken.getControllerId(), localArtifact.getSoftwareModule()); + LOG.info("Found action for download authentication request action: {}, resource: {}", action, + secruityToken.getFileResource()); + } final Artifact artifact = convertDbArtifact(artifactManagement.loadLocalArtifactBinary(localArtifact)); if (artifact == null) { @@ -183,7 +188,9 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } authentificationResponse.setArtifact(artifact); final String downloadId = UUID.randomUUID().toString(); - final DownloadArtifactCache downloadCache = new DownloadArtifactCache(DownloadType.BY_SHA1, sha1); + // SHA1 key is set, download by SHA1 + final DownloadArtifactCache downloadCache = new DownloadArtifactCache(DownloadType.BY_SHA1, + localArtifact.getSha1Hash()); cache.put(downloadId, downloadCache); authentificationResponse .setDownloadUrl(UriComponentsBuilder.fromUri(hostnameResolver.resolveHostname().toURI()) @@ -198,7 +205,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { authentificationResponse.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value()); authentificationResponse.setMessage("Building download URI failed"); } catch (final EntityNotFoundException e) { - final String errorMessage = "Artifact with sha1 " + sha1 + "not found "; + final String errorMessage = "Artifact for resource " + fileResource + "not found "; LOG.warn(errorMessage, e); authentificationResponse.setResponseCode(HttpStatus.NOT_FOUND.value()); authentificationResponse.setMessage(errorMessage); @@ -207,6 +214,23 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return getMessageConverter().toMessage(authentificationResponse, messageProperties); } + private LocalArtifact findLocalArtifactByFileResource(final FileResource fileResource) { + LocalArtifact localArtifact = null; + if (fileResource.getSha1() != null) { + localArtifact = artifactManagement.findFirstLocalArtifactsBySHA1(fileResource.getSha1()); + } else if (fileResource.getFilename() != null) { + localArtifact = artifactManagement.findLocalArtifactByFilename(fileResource.getFilename()).stream() + .findFirst().orElse(null); + } else if (fileResource.getArtifactId() != null) { + final org.eclipse.hawkbit.repository.model.Artifact artifact = artifactManagement + .findArtifact(fileResource.getArtifactId()); + if (artifact instanceof LocalArtifact) { + localArtifact = (LocalArtifact) artifact; + } + } + return localArtifact; + } + private static Artifact convertDbArtifact(final DbArtifact dbArtifact) { final Artifact artifact = new Artifact(); artifact.setSize(dbArtifact.getSize()); 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 66527727a..d7ab805ed 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 @@ -19,7 +19,8 @@ import static org.mockito.Mockito.when; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.DownloadResponse; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +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.TenantConfigurationManagement; @@ -105,7 +106,8 @@ public class AmqpControllerAuthenticationTest { @Test @Description("Tests authentication manager without principal") public void testAuthenticationeBadCredantialsWithoutPricipal() { - final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, + FileResource.sha1("12345")); try { authenticationManager.doAuthenticate(securityToken); fail("BadCredentialsException was excepeted since principal was missing"); @@ -118,11 +120,12 @@ public class AmqpControllerAuthenticationTest { @Test @Description("Tests authentication manager without wrong credential") public void testAuthenticationBadCredantialsWithWrongCredential() { - final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, + FileResource.sha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); - securityToken.getHeaders().put(TenantSecruityToken.AUTHORIZATION_HEADER, "TargetToken 12" + CONTROLLLER_ID); + securityToken.getHeaders().put(TenantSecurityToken.AUTHORIZATION_HEADER, "TargetToken 12" + CONTROLLLER_ID); try { authenticationManager.doAuthenticate(securityToken); fail("BadCredentialsException was excepeted due to wrong credential"); @@ -135,11 +138,12 @@ public class AmqpControllerAuthenticationTest { @Test @Description("Tests authentication successfull") public void testSuccessfullAuthentication() { - final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, + FileResource.sha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); - securityToken.getHeaders().put(TenantSecruityToken.AUTHORIZATION_HEADER, "TargetToken " + CONTROLLLER_ID); + securityToken.getHeaders().put(TenantSecurityToken.AUTHORIZATION_HEADER, "TargetToken " + CONTROLLLER_ID); final Authentication authentication = authenticationManager.doAuthenticate(securityToken); assertThat(authentication).isNotNull(); } @@ -149,7 +153,8 @@ public class AmqpControllerAuthenticationTest { public void testAuthenticationMessageBadCredantialsWithoutPricipal() { final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); - final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, + FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -167,11 +172,12 @@ public class AmqpControllerAuthenticationTest { @Description("Tests authentication message without wrong credential") public void testAuthenticationMessageBadCredantialsWithWrongCredential() { final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); - final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, + FileResource.sha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); - securityToken.getHeaders().put(TenantSecruityToken.AUTHORIZATION_HEADER, "TargetToken 12" + CONTROLLLER_ID); + securityToken.getHeaders().put(TenantSecurityToken.AUTHORIZATION_HEADER, "TargetToken 12" + CONTROLLLER_ID); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -189,11 +195,12 @@ public class AmqpControllerAuthenticationTest { @Description("Tests authentication message successfull") public void testSuccessfullMessageAuthentication() { final MessageProperties messageProperties = createMessageProperties(MessageType.AUTHENTIFICATION); - final TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, CONTROLLLER_ID, "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, CONTROLLLER_ID, + FileResource.sha1("12345")); when(tenantConfigurationManagement.getConfigurationValue( eq(TenantConfigurationKey.AUTHENTICATION_MODE_TARGET_SECURITY_TOKEN_ENABLED), eq(Boolean.class))) .thenReturn(CONFIG_VALUE_TRUE); - securityToken.getHeaders().put(TenantSecruityToken.AUTHORIZATION_HEADER, "TargetToken " + CONTROLLLER_ID); + securityToken.getHeaders().put(TenantSecurityToken.AUTHORIZATION_HEADER, "TargetToken " + CONTROLLLER_ID); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); 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 9d6ae3ba7..930ca02ad 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 @@ -34,7 +34,8 @@ import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.ActionStatus; import org.eclipse.hawkbit.dmf.json.model.ActionUpdateStatus; import org.eclipse.hawkbit.dmf.json.model.DownloadResponse; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +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; @@ -263,7 +264,7 @@ public class AmqpMessageHandlerServiceTest { @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 TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, "123", "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -282,7 +283,7 @@ public class AmqpMessageHandlerServiceTest { @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 TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, "123", "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); @@ -306,7 +307,7 @@ public class AmqpMessageHandlerServiceTest { @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 TenantSecruityToken securityToken = new TenantSecruityToken(TENANT, "123", "12345"); + final TenantSecurityToken securityToken = new TenantSecurityToken(TENANT, "123", FileResource.sha1("12345")); final Message message = amqpMessageHandlerService.getMessageConverter().toMessage(securityToken, messageProperties); diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecruityToken.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecruityToken.java deleted file mode 100644 index 351684f5e..000000000 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecruityToken.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.dmf.json.model; - -import java.util.Map; -import java.util.TreeMap; - -import com.fasterxml.jackson.annotation.JsonCreator; -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; - -/** - * JSON representation to authenticate a tenant. - * - * - * - */ - -@JsonInclude(Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class TenantSecruityToken { - - public static final String AUTHORIZATION_HEADER = "Authorization"; - public static final String COAP_AUTHORIZATION_HEADER = "Coap-Authorization"; - public static final String COAP_TOKEN_VALUE = "CoapToken"; - - @JsonProperty - private final String tenant; - @JsonProperty - private final String controllerId; - @JsonProperty(required = false) - private Map headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - @JsonProperty(required = false) - private final String sha1; - - /** - * Constructor. - * - * @param tenant - * the tenant for the security token - * @param controllerId - * the ID of the controller for the security token - * @param sha1 - * the sha1 of authentication - */ - @JsonCreator - public TenantSecruityToken(@JsonProperty("tenant") final String tenant, - @JsonProperty("controllerId") final String controllerId, @JsonProperty("sha1") final String sha1) { - this.tenant = tenant; - this.controllerId = controllerId; - this.sha1 = sha1; - } - - public String getTenant() { - return tenant; - } - - public String getControllerId() { - return controllerId; - } - - public Map getHeaders() { - return headers; - } - - public String getSha1() { - return sha1; - } - - /** - * Gets a header value. - * - * @param name - * of header - * @return the value - */ - public String getHeader(final String name) { - return headers.get(name); - } - - public void setHeaders(final Map headers) { - this.headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - this.headers.putAll(headers); - } - -} diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java new file mode 100644 index 000000000..9e07d3fc4 --- /dev/null +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java @@ -0,0 +1,176 @@ +/** + * 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.dmf.json.model; + +import java.util.Map; +import java.util.TreeMap; + +import com.fasterxml.jackson.annotation.JsonCreator; +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; + +/** + * JSON representation to authenticate a tenant. + */ + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class TenantSecurityToken { + + public static final String AUTHORIZATION_HEADER = "Authorization"; + public static final String COAP_AUTHORIZATION_HEADER = "Coap-Authorization"; + public static final String COAP_TOKEN_VALUE = "CoapToken"; + + @JsonProperty + private final String tenant; + @JsonProperty + private final String controllerId; + @JsonProperty(required = false) + private Map headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + @JsonProperty(required = false) + private final FileResource fileResource; + + /** + * Constructor. + * + * @param tenant + * the tenant for the security token + * @param controllerId + * the ID of the controller for the security token + * @param fileResource + * the file to obtain + */ + @JsonCreator + public TenantSecurityToken(@JsonProperty("tenant") final String tenant, + @JsonProperty("controllerId") final String controllerId, + @JsonProperty("fileResource") final FileResource fileResource) { + this.tenant = tenant; + this.controllerId = controllerId; + this.fileResource = fileResource; + } + + public String getTenant() { + return tenant; + } + + public String getControllerId() { + return controllerId; + } + + public Map getHeaders() { + return headers; + } + + public FileResource getFileResource() { + return fileResource; + } + + /** + * Gets a header value. + * + * @param name + * of header + * @return the value + */ + public String getHeader(final String name) { + return headers.get(name); + } + + public void setHeaders(final Map headers) { + this.headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + this.headers.putAll(headers); + } + + /** + * File resource descriptor which is used to ask for the resource to + * download e.g. The lookup of the file can be different e.g. by SHA1 hash + * or by filename. + */ + @JsonInclude(Include.NON_NULL) + @JsonIgnoreProperties(ignoreUnknown = true) + public static class FileResource { + @JsonProperty(required = false) + private String sha1; + @JsonProperty(required = false) + private String filename; + @JsonProperty(required = false) + private Long artifactId; + + public String getSha1() { + return sha1; + } + + public void setSha1(final String sha1) { + this.sha1 = sha1; + } + + public String getFilename() { + return filename; + } + + public void setFilename(final String filename) { + this.filename = filename; + } + + public Long getArtifactId() { + return artifactId; + } + + public void setArtifactId(final Long artifactId) { + this.artifactId = artifactId; + } + + /** + * factory method to create a file resource for an SHA1 lookup. + * + * @param sha1 + * the SHA1 key of the file to obtain + * @return the {@link FileResource} with SHA1 key set + */ + public static FileResource sha1(final String sha1) { + final FileResource resource = new FileResource(); + resource.sha1 = sha1; + return resource; + } + + /** + * factory method to create a file resource for an filename lookup. + * + * @param filename + * the filename of the file to obtain + * @return the {@link FileResource} with filename set + */ + public static FileResource filename(final String filename) { + final FileResource resource = new FileResource(); + resource.filename = filename; + return resource; + } + + /** + * factory method to create a file resource for an artifactId lookup. + * + * @param artifactId + * the artifactId of the file to obtain + * @return the {@link FileResource} with artifactId set + */ + public static FileResource artifactId(final Long artifactId) { + final FileResource resource = new FileResource(); + resource.artifactId = artifactId; + return resource; + } + + @Override + public String toString() { + return "FileResource [sha1=" + sha1 + ", filename=" + filename + "]"; + } + } +} diff --git a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java index adb2858b9..ace5bc834 100644 --- a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java +++ b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java @@ -17,7 +17,8 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken.FileResource; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; @@ -96,7 +97,7 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac return; } - final TenantSecruityToken secruityToken = createTenantSecruityTokenVariables((HttpServletRequest) request); + final TenantSecurityToken secruityToken = createTenantSecruityTokenVariables((HttpServletRequest) request); if (secruityToken == null) { chain.doFilter(request, response); return; @@ -121,7 +122,7 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac * request does not match the pattern and no variables could be * extracted */ - protected TenantSecruityToken createTenantSecruityTokenVariables(final HttpServletRequest request) { + protected TenantSecurityToken createTenantSecruityTokenVariables(final HttpServletRequest request) { final String requestURI = request.getRequestURI(); if (pathExtractor.match(request.getContextPath() + CONTROLLER_REQUEST_ANT_PATTERN, requestURI)) { @@ -153,9 +154,9 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac } } - private TenantSecruityToken createTenantSecruityTokenVariables(final HttpServletRequest request, + private TenantSecurityToken createTenantSecruityTokenVariables(final HttpServletRequest request, final String tenant, final String controllerId) { - final TenantSecruityToken secruityToken = new TenantSecruityToken(tenant, controllerId, ""); + final TenantSecurityToken secruityToken = new TenantSecurityToken(tenant, controllerId, FileResource.sha1("")); final UnmodifiableIterator forEnumeration = Iterators.forEnumeration(request.getHeaderNames()); forEnumeration.forEachRemaining(header -> secruityToken.getHeaders().put(header, request.getHeader(header))); return secruityToken; @@ -163,7 +164,7 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac @Override protected Object getPreAuthenticatedPrincipal(final HttpServletRequest request) { - final TenantSecruityToken secruityToken = createTenantSecruityTokenVariables(request); + final TenantSecurityToken secruityToken = createTenantSecruityTokenVariables(request); if (secruityToken == null) { return null; } @@ -172,7 +173,7 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac @Override protected Object getPreAuthenticatedCredentials(final HttpServletRequest request) { - final TenantSecruityToken secruityToken = createTenantSecruityTokenVariables(request); + final TenantSecurityToken secruityToken = createTenantSecruityTokenVariables(request); if (secruityToken == null) { return null; } 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 a5ee019dc..122d7b881 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 @@ -321,7 +321,8 @@ public class ArtifactManagement { } boolean artifactIsOnlyUsedByOneSoftwareModule = true; - for (LocalArtifact lArtifact : localArtifactRepository.findByGridFsFileName(existing.getGridFsFileName())) { + for (final LocalArtifact lArtifact : localArtifactRepository + .findByGridFsFileName(existing.getGridFsFileName())) { if (!lArtifact.getSoftwareModule().isDeleted() && lArtifact.getSoftwareModule().getId() != existing.getSoftwareModule().getId()) { artifactIsOnlyUsedByOneSoftwareModule = false; diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/AbstractControllerAuthenticationFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/AbstractControllerAuthenticationFilter.java index d22c432cf..9a1cd2aea 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/AbstractControllerAuthenticationFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/AbstractControllerAuthenticationFilter.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.security; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; @@ -42,15 +42,15 @@ public abstract class AbstractControllerAuthenticationFilter implements PreAuthe protected abstract TenantConfigurationKey getTenantConfigurationKey(); @Override - public boolean isEnable(final TenantSecruityToken secruityToken) { + public boolean isEnable(final TenantSecurityToken secruityToken) { return tenantAware.runAsTenant(secruityToken.getTenant(), configurationKeyTenantRunner); } @Override - public abstract HeaderAuthentication getPreAuthenticatedPrincipal(TenantSecruityToken secruityToken); + public abstract HeaderAuthentication getPreAuthenticatedPrincipal(TenantSecurityToken secruityToken); @Override - public abstract HeaderAuthentication getPreAuthenticatedCredentials(TenantSecruityToken secruityToken); + public abstract HeaderAuthentication getPreAuthenticatedCredentials(TenantSecurityToken secruityToken); private final class SecurityConfigurationKeyTenantRunner implements TenantAware.TenantRunner { @Override diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java index d9d8b9fa7..36a444c43 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.security; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; /** * A Filter for device which download via coap. @@ -19,19 +19,19 @@ import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; public class CoapAnonymousPreAuthenticatedFilter implements PreAuthenficationFilter { @Override - public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecruityToken secruityToken) { - return new HeaderAuthentication(secruityToken.getControllerId(), TenantSecruityToken.COAP_TOKEN_VALUE); + public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { + return new HeaderAuthentication(secruityToken.getControllerId(), TenantSecurityToken.COAP_TOKEN_VALUE); } @Override - public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecruityToken secruityToken) { - return new HeaderAuthentication(secruityToken.getControllerId(), TenantSecruityToken.COAP_TOKEN_VALUE); + public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { + return new HeaderAuthentication(secruityToken.getControllerId(), TenantSecurityToken.COAP_TOKEN_VALUE); } @Override - public boolean isEnable(final TenantSecruityToken secruityToken) { - final String authHeader = secruityToken.getHeader(TenantSecruityToken.COAP_AUTHORIZATION_HEADER); - return TenantSecruityToken.COAP_TOKEN_VALUE.equals(authHeader); + public boolean isEnable(final TenantSecurityToken secruityToken) { + final String authHeader = secruityToken.getHeader(TenantSecurityToken.COAP_AUTHORIZATION_HEADER); + return TenantSecurityToken.COAP_TOKEN_VALUE.equals(authHeader); } } diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticateSecurityTokenFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticateSecurityTokenFilter.java index c30f60711..8ff1e9ebc 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticateSecurityTokenFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticateSecurityTokenFilter.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.security; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ControllerManagement; @@ -67,8 +67,8 @@ public class ControllerPreAuthenticateSecurityTokenFilter extends AbstractContro } @Override - public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecruityToken secruityToken) { - final String authHeader = secruityToken.getHeader(TenantSecruityToken.AUTHORIZATION_HEADER); + public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { + final String authHeader = secruityToken.getHeader(TenantSecurityToken.AUTHORIZATION_HEADER); if ((authHeader != null) && authHeader.startsWith(TARGET_SECURITY_TOKEN_AUTH_SCHEME)) { LOGGER.debug("found authorization header with scheme {} using target security token for authentication", TARGET_SECURITY_TOKEN_AUTH_SCHEME); @@ -81,7 +81,7 @@ public class ControllerPreAuthenticateSecurityTokenFilter extends AbstractContro } @Override - public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecruityToken secruityToken) { + public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { final String securityToken = tenantAware.runAsTenant(secruityToken.getTenant(), new GetSecurityTokenTenantRunner(secruityToken.getTenant(), secruityToken.getControllerId())); return new HeaderAuthentication(secruityToken.getControllerId(), securityToken); diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedGatewaySecurityTokenFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedGatewaySecurityTokenFilter.java index 765589df4..7d1bd7b0f 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedGatewaySecurityTokenFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedGatewaySecurityTokenFilter.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.security; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; @@ -56,8 +56,8 @@ public class ControllerPreAuthenticatedGatewaySecurityTokenFilter extends Abstra } @Override - public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecruityToken secruityToken) { - final String authHeader = secruityToken.getHeader(TenantSecruityToken.AUTHORIZATION_HEADER); + public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { + final String authHeader = secruityToken.getHeader(TenantSecurityToken.AUTHORIZATION_HEADER); if ((authHeader != null) && authHeader.startsWith(GATEWAY_SECURITY_TOKEN_AUTH_SCHEME)) { LOGGER.debug("found authorization header with scheme {} using target security token for authentication", GATEWAY_SECURITY_TOKEN_AUTH_SCHEME); @@ -71,7 +71,7 @@ public class ControllerPreAuthenticatedGatewaySecurityTokenFilter extends Abstra } @Override - public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecruityToken secruityToken) { + public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { final String gatewayToken = tenantAware.runAsTenant(secruityToken.getTenant(), gatewaySecurityTokenKeyConfigRunner); return new HeaderAuthentication(secruityToken.getControllerId(), gatewayToken); diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedSecurityHeaderFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedSecurityHeaderFilter.java index ef8b5fbf7..6836b8a31 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedSecurityHeaderFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedSecurityHeaderFilter.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.security; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; @@ -18,7 +18,7 @@ import org.slf4j.LoggerFactory; /** * An pre-authenticated processing filter which extracts the principal from a * request URI and the credential from a request header in a the - * {@link TenantSecruityToken}. + * {@link TenantSecurityToken}. * * * @@ -75,7 +75,7 @@ public class ControllerPreAuthenticatedSecurityHeaderFilter extends AbstractCont } @Override - public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecruityToken secruityToken) { + public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { // retrieve the common name header and the authority name header from // the http request and // combine them together @@ -97,7 +97,7 @@ public class ControllerPreAuthenticatedSecurityHeaderFilter extends AbstractCont } @Override - public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecruityToken secruityToken) { + public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { final String authorityNameConfigurationValue = tenantAware.runAsTenant(secruityToken.getTenant(), sslIssuerNameConfigTenantRunner); String controllerId = secruityToken.getControllerId(); @@ -117,7 +117,7 @@ public class ControllerPreAuthenticatedSecurityHeaderFilter extends AbstractCont * It's ok if we find the the hash in any the trusted CA chain to accept * this request for this tenant. */ - private String getIssuerHashHeader(final TenantSecruityToken secruityToken, final String knownIssuerHash) { + private String getIssuerHashHeader(final TenantSecurityToken secruityToken, final String knownIssuerHash) { // iterate over the headers until we get a null header. int iHeader = 1; String foundHash; diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java index 8aa957005..8981fa9af 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.security; -import org.eclipse.hawkbit.dmf.json.model.TenantSecruityToken; +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; /** * Interface for Pre Authenfication. @@ -25,7 +25,7 @@ public interface PreAuthenficationFilter { * the secruity info * @return is enabled diabled */ - boolean isEnable(TenantSecruityToken secruityToken); + boolean isEnable(TenantSecurityToken secruityToken); /** * Extract the principal information from the current secruityToken. @@ -34,7 +34,7 @@ public interface PreAuthenficationFilter { * the secruityToken * @return the extracted tenant and controller id */ - HeaderAuthentication getPreAuthenticatedPrincipal(TenantSecruityToken secruityToken); + HeaderAuthentication getPreAuthenticatedPrincipal(TenantSecurityToken secruityToken); /** * Extract the principal credentials from the current secruityToken. @@ -43,6 +43,6 @@ public interface PreAuthenficationFilter { * the secruityToken * @return the extracted tenant and controller id */ - HeaderAuthentication getPreAuthenticatedCredentials(TenantSecruityToken secruityToken); + HeaderAuthentication getPreAuthenticatedCredentials(TenantSecurityToken secruityToken); } From 74782527fedf14c727eaceda743dc1cf353100de Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 23 Mar 2016 12:14:44 +0100 Subject: [PATCH 008/344] Added javadoc and refactored existing one. Signed-off-by: Jonathan Philip Knoblauch --- .../AuthenticationConfigurationView.java | 3 -- .../BaseConfigurationView.java | 4 +-- .../ConfigurationGroup.java | 5 ++- .../ConfigurationItem.java | 2 +- .../DefaultDistributionSetTypeLayout.java | 3 -- .../DownloadAnonymousConfigurationView.java | 11 ++----- .../PollingConfigurationView.java | 2 -- .../TenantConfigurationDashboardView.java | 12 +------ ...antConfigurationDashboardViewMenuItem.java | 3 -- ...ficateAuthenticationConfigurationItem.java | 31 ++----------------- ...yTokenAuthenticationConfigurationItem.java | 15 ++------- ...yTokenAuthenticationConfigurationItem.java | 22 ++----------- 12 files changed, 18 insertions(+), 95 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java index 94e852813..d00223f5a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java @@ -30,9 +30,6 @@ import com.vaadin.ui.VerticalLayout; /** * View to configure the authentication mode. - * - * - * */ @SpringComponent @ViewScope diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java index 559eeae02..a68b095b4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/BaseConfigurationView.java @@ -14,8 +14,8 @@ import java.util.List; import com.vaadin.ui.CustomComponent; /** - * base class for all configuration views. This class implements the logic for - * the handling of the + * Base class for all configuration views. This class implements the logic for + * the handling of the configurations in a consistent way. * */ public abstract class BaseConfigurationView extends CustomComponent implements ConfigurationGroup { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java index 90a38dd56..3ac3610f9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationGroup.java @@ -11,9 +11,8 @@ package org.eclipse.hawkbit.ui.tenantconfiguration; import com.vaadin.ui.Component; /** - * - * - * + * Interface that all system configurations have to implement to save and undo + * their customized changes. */ public interface ConfigurationGroup extends Component, ConfigurationItem { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java index 142de0abb..856b2090d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/ConfigurationItem.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.tenantconfiguration; import java.io.Serializable; /** - * represents an configurationItem, which can be modified by the user + * Represents an configurationItem, which can be modified by the user */ public interface ConfigurationItem { 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 ec0e643de..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 @@ -33,9 +33,6 @@ import com.vaadin.ui.VerticalLayout; /** * Default DistributionSet Panel. - * - * - * */ @SpringComponent @ViewScope diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java index 7366a251f..505c0963d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java @@ -28,10 +28,8 @@ import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; /** - * @author Jonathan Knoblauch - * + * View to enable anonymous download. */ - @SpringComponent @ViewScope public class DownloadAnonymousConfigurationView extends BaseConfigurationView @@ -42,7 +40,7 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView private static final long serialVersionUID = 1L; @Autowired - private I18N i18n; // TODO + private I18N i18n; @Autowired private transient TenantConfigurationManagement tenantConfigurationManagement; @@ -52,7 +50,7 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView private CheckBox downloadAnonymousCheckBox; /** - * Initialize Default Distribution Set layout. + * Initialize Default Download Anonymous layout. */ @PostConstruct public void init() { @@ -81,7 +79,6 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); - downloadAnonymousCheckBox.setId("TODO"); downloadAnonymousCheckBox.addValueChangeListener(event -> configurationHasChanged()); gridLayout.addComponent(downloadAnonymousCheckBox); @@ -94,7 +91,6 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView rootPanel.setContent(vLayout); setCompositionRoot(rootPanel); - } @Override @@ -107,7 +103,6 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView public void save() { tenantConfigurationManagement.addOrUpdateConfiguration(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, downloadAnonymousCheckBox.getValue()); - // TODO notification Download server } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java index f751481be..2389a2efa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/PollingConfigurationView.java @@ -29,8 +29,6 @@ import com.vaadin.ui.VerticalLayout; /** * View to configure the polling interval and the overdue time. - * - * */ @SpringComponent @ViewScope 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 0349ba867..cada6d167 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 @@ -38,9 +38,6 @@ import com.vaadin.ui.VerticalLayout; /** * Main UI for the system configuration view. - * - * - * */ @SpringView(name = TenantConfigurationDashboardView.VIEW_NAME, ui = HawkbitUI.class) @ViewScope @@ -76,7 +73,7 @@ public class TenantConfigurationDashboardView extends CustomComponent implements private final List configurationViews = new ArrayList<>(); /** - * init method adds all Configuration Views to the list of Views. + * Init method adds all Configuration Views to the list of Views. */ @PostConstruct public void init() { @@ -158,13 +155,6 @@ public class TenantConfigurationDashboardView extends CustomComponent implements undoConfigurationBtn.setEnabled(false); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.tenantconfiguration.ConfigurationGroup. - * ConfigurationGroupChangeListener #configurationChanged() - */ @Override public void configurationHasChanged() { saveConfigurationBtn.setEnabled(true); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java index 1eea3014d..42f96f2c6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/TenantConfigurationDashboardViewMenuItem.java @@ -21,9 +21,6 @@ import com.vaadin.server.Resource; /** * Menu item for system configuration view. - * - * - * */ @Component @Order(700) 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 cf2744718..b17d9596f 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 @@ -26,16 +26,13 @@ import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; /** - * - * + * This class represents the UI item for the certificate authenticated by an + * reverse proxy in the authentication configuration view. */ @SpringComponent @ViewScope public class CertificateAuthenticationConfigurationItem extends AbstractAuthenticationTenantConfigurationItem { - /** - * - */ private static final long serialVersionUID = 1L; @Autowired @@ -59,7 +56,7 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti } /** - * init mehotd called by spring. + * Init mehotd called by spring. */ @PostConstruct public void init() { @@ -94,12 +91,6 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti } } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.tenantconfiguration. - * TenantConfigurationItem# configEnable() - */ @Override public void configEnable() { if (!configurationEnabled) { @@ -110,12 +101,6 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti setDetailVisible(true); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.tenantconfiguration. - * TenantConfigurationItem# configDisable() - */ @Override public void configDisable() { if (configurationEnabled) { @@ -125,11 +110,6 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti setDetailVisible(false); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.tenantconfiguration.TenantConfigurationItem#save() - */ @Override public void save() { if (configurationEnabledChange) { @@ -142,11 +122,6 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti } } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.tenantconfiguration.TenantConfigurationItem#undo() - */ @Override public void undo() { configurationEnabledChange = false; 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 fa1ca9271..757460809 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 @@ -30,16 +30,13 @@ import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; /** - * - * + * This class represents the UI item for the gateway security token section in + * the authentication configuration view. */ @SpringComponent @ViewScope public class GatewaySecurityTokenAuthenticationConfigurationItem extends AbstractAuthenticationTenantConfigurationItem { - /** - * - */ private static final long serialVersionUID = 1L; @Autowired @@ -70,7 +67,7 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac } /** - * init mehotd called by spring. + * Init mehotd called by spring. */ @PostConstruct public void init() { @@ -135,12 +132,6 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac notifyConfigurationChanged(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.tenantconfiguration. - * TenantConfigurationItem# configEnable() - */ @Override public void configEnable() { if (!configurationEnabled) { diff --git a/hawkbit-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 index 42e50da2c..641982d73 100644 --- a/hawkbit-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 @@ -19,17 +19,13 @@ import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; /** - * - * - * + * This class represents the UI item for the target security token section in + * the authentication configuration view. */ @SpringComponent @ViewScope public class TargetSecurityTokenAuthenticationConfigurationItem extends AbstractAuthenticationTenantConfigurationItem { - /** - * - */ private static final long serialVersionUID = 1L; @Autowired @@ -49,7 +45,7 @@ public class TargetSecurityTokenAuthenticationConfigurationItem extends Abstract } /** - * init mehotd called by spring. + * Init mehotd called by spring. */ @PostConstruct public void init() { @@ -57,12 +53,6 @@ public class TargetSecurityTokenAuthenticationConfigurationItem extends Abstract configurationEnabled = isConfigEnabled(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.tenantconfiguration. - * TenantConfigurationItem# configEnable() - */ @Override public void configEnable() { if (!configurationEnabled) { @@ -71,12 +61,6 @@ public class TargetSecurityTokenAuthenticationConfigurationItem extends Abstract configurationEnabled = true; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.tenantconfiguration. - * TenantConfigurationItem# configDisable() - */ @Override public void configDisable() { if (configurationEnabled) { From 6ee66dc4e17dcb27a41c4be359a26aa3b26a204c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 23 Mar 2016 14:09:40 +0100 Subject: [PATCH 009/344] Put BaseEntity below tenant aware and unaware entities --- .../hawkbit/simulator/ui/SimulatorView.java | 2 + .../artifact/repository/ArtifactStore.java | 17 +- .../artifact/repository/model/DbArtifact.java | 3 - .../repository/model/DbArtifactHash.java | 3 - .../java/org/eclipse/hawkbit/Constants.java | 5 +- .../eventbus/EntityChangeEventListener.java | 4 +- .../EntityPropertyChangeListener.java | 4 +- .../event/AbstractBaseEntityEvent.java | 10 +- .../event/AbstractEntityBulkEvent.java | 4 +- .../event/AbstractPropertyChangeEvent.java | 4 +- .../eventbus/event/EntityBulkEvent.java | 4 +- .../repository/BaseEntityRepository.java | 8 +- .../repository/DistributionSetManagement.java | 7 +- .../hawkbit/repository/SystemManagement.java | 4 +- .../hawkbit/repository/model/Action.java | 2 +- .../repository/model/ActionStatus.java | 36 +--- .../hawkbit/repository/model/Artifact.java | 2 +- .../hawkbit/repository/model/BaseEntity.java | 107 +--------- .../hawkbit/repository/model/NamedEntity.java | 4 +- .../repository/model/TargetFilterQuery.java | 2 +- .../model/TenantAwareBaseEntity.java | 108 ++++++++++ .../repository/model/TenantConfiguration.java | 6 +- .../model/TenantConfigurationValue.java | 2 +- .../repository/model/TenantMetaData.java | 202 ++---------------- .../TargetManagementSearchTest.java | 4 +- .../resources/application-test.properties | 3 +- .../rest/resource/RestModelMapper.java | 4 +- 27 files changed, 178 insertions(+), 383 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java 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 e1d6bd15b..28ad0eaa9 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 @@ -154,6 +154,7 @@ public class SimulatorView extends VerticalLayout implements View { public void pollCounterUpdate(final NextPollCounterUpdate update) { final List devices = update.getDevices(); this.getUI().access(new Runnable() { + @Override public void run() { devices.forEach(device -> { @@ -176,6 +177,7 @@ public class SimulatorView extends VerticalLayout implements View { public void initUpdate(final InitUpdate update) { final AbstractSimulatedDevice device = update.getDevice(); this.getUI().access(new Runnable() { + @Override public void run() { final BeanItem item = beanContainer.getItem(device.getId()); 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 78658da91..6981834b4 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 @@ -38,10 +38,7 @@ import com.mongodb.gridfs.GridFSDBFile; import com.mongodb.gridfs.GridFSFile; /** - * The file management which looks up all the file in the filestore. - * - * - * + * The file management which looks up all the file in the file tore. * */ public class ArtifactStore implements ArtifactRepository { @@ -60,7 +57,7 @@ public class ArtifactStore implements ArtifactRepository { private static final String MD5 = "md5"; /** - * The mongoDB field which holds the SHA1 hash, stored in the metadata + * The mongoDB field which holds the SHA1 hash, stored in the meta data * object. */ private static final String SHA1 = "sha1"; @@ -75,11 +72,10 @@ public class ArtifactStore implements ArtifactRepository { /** * Retrieves a {@link GridFSDBFile} from the store by it's SHA1 hash. * - * @param tenant - * the tenant to retrieve the artifacts from, ignore case. * @param sha1Hash * the sha1-hash of the file to lookup. - * @return The gridfs file object or {@code null} if no file exists. + * + * @return The DbArtifact object or {@code null} if no file exists. */ @Override public DbArtifact getArtifactBySha1(final String sha1Hash) { @@ -226,8 +222,7 @@ public class ArtifactStore implements ArtifactRepository { * @return a paged list of artifacts mapped from the given dbFiles */ private List map(final List dbFiles) { - final List collect = dbFiles.stream().map(dbFile -> map(dbFile)).collect(Collectors.toList()); - return collect; + return dbFiles.stream().map(dbFile -> map(dbFile)).collect(Collectors.toList()); } /** @@ -238,7 +233,7 @@ public class ArtifactStore implements ArtifactRepository { * the tenant to retrieve the artifacts from, ignore case. * @param sha1Hashes * the sha1-hashes of the files to lookup. - * @return list of artfiacts + * @return list of artifacts */ @Override public List getArtifactsBySha1(final List sha1Hashes) { diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifact.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifact.java index b4c2dcdba..2385e0dfa 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifact.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifact.java @@ -14,9 +14,6 @@ import java.io.OutputStream; /** * Database representation of artifact. * - * - * - * */ public class DbArtifact { diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifactHash.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifactHash.java index c16d3a620..5619a2292 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifactHash.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/artifact/repository/model/DbArtifactHash.java @@ -11,9 +11,6 @@ package org.eclipse.hawkbit.artifact.repository.model; /** * Database representation of artifact hash. * - * - * - * */ public class DbArtifactHash { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/Constants.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/Constants.java index 5f3f772b0..ef0b70438 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/Constants.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/Constants.java @@ -11,9 +11,6 @@ package org.eclipse.hawkbit; /** * A constant class which holds only static constants used within the SP server. * - * - * - * */ public final class Constants { @@ -27,7 +24,7 @@ public final class Constants { public static final int MAX_ENTRIES_IN_STATEMENT = 999; /** - * constant class only private constructor. + * Constant class only private constructor. */ private Constants() { 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 b25a72fbc..0a19d2edb 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,7 +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.TargetRepository; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -31,7 +31,7 @@ import com.google.common.eventbus.EventBus; /** * An aspect implementation which wraps the necessary repository services for - * saving {@link BaseEntity}s to publish create or update events. + * saving {@link TenantAwareBaseEntity}s to publish create or update events. * * * diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java index 8b632ee6a..5fd4ba27d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java @@ -18,7 +18,7 @@ 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.model.Action; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; @@ -83,7 +83,7 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { } } - private Map.Values> getChangeSet( + private Map.Values> getChangeSet( final Class clazz, final DescriptorEvent event) { final T rolloutGroup = clazz.cast(event.getObject()); final ObjectChangeSet changeSet = ((UpdateObjectQuery) event.getQuery()).getObjectChangeSet(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java index 7d0973f74..15864eb8f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java @@ -8,18 +8,18 @@ */ package org.eclipse.hawkbit.eventbus.event; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** - * An abstract definition class for {@link EntityEvent} for {@link BaseEntity}s, - * which holds the {@link BaseEntity}. + * An abstract definition class for {@link EntityEvent} for {@link TenantAwareBaseEntity}s, + * which holds the {@link TenantAwareBaseEntity}. * * * * @param - * the type of the {@link BaseEntity} + * the type of the {@link TenantAwareBaseEntity} */ -public abstract class AbstractBaseEntityEvent extends AbstractDistributedEvent +public abstract class AbstractBaseEntityEvent extends AbstractDistributedEvent implements EntityEvent { /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java index 0a0ce88ce..56f3e585a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractEntityBulkEvent.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.eventbus.event; import java.util.Arrays; import java.util.List; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** * @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.repository.model.BaseEntity; * * @param */ -public abstract class AbstractEntityBulkEvent implements EntityBulkEvent { +public abstract class AbstractEntityBulkEvent implements EntityBulkEvent { private static final long serialVersionUID = 1L; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java index 8a596eeb5..795f6ff88 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractPropertyChangeEvent.java @@ -10,14 +10,14 @@ package org.eclipse.hawkbit.eventbus.event; import java.util.Map; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** * Property change event. * * @param */ -public class AbstractPropertyChangeEvent extends AbstractBaseEntityEvent { +public class AbstractPropertyChangeEvent extends AbstractBaseEntityEvent { private static final long serialVersionUID = -3671601415138242311L; private final transient Map changeSet; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java index 2004d3017..eac1b6bb9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/EntityBulkEvent.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.eventbus.event; import java.io.Serializable; import java.util.List; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** * An event interface which declares event types that an entities has been @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.repository.model.BaseEntity; * @param * the entity type */ -public interface EntityBulkEvent extends Serializable, Event { +public interface EntityBulkEvent extends Serializable, Event { /** * A typesafe way to retrieve the the entities from the event, which might diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java index 539d20f71..2b4de2b81 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java @@ -10,14 +10,14 @@ package org.eclipse.hawkbit.repository; import java.io.Serializable; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.transaction.annotation.Transactional; /** - * Command repository operations for all {@link BaseEntity}s. + * Command repository operations for all {@link TenantAwareBaseEntity}s. * * * @@ -29,11 +29,11 @@ import org.springframework.transaction.annotation.Transactional; */ @NoRepositoryBean @Transactional(readOnly = true) -public interface BaseEntityRepository +public interface BaseEntityRepository extends PagingAndSortingRepository { /** - * Deletes all {@link BaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. * * @param tenant * to delete data from 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 8b07c9bf8..8df29956b 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 @@ -176,7 +176,7 @@ public class DistributionSetManagement { final Iterable sets = findDistributionSetListWithDetails(dsIds); final DistributionSetTag myTag = tagManagement.findDistributionSetTag(tagName); - DistributionSetTagAssigmentResult result = null; + DistributionSetTagAssigmentResult result; final List allDSs = new ArrayList<>(); for (final DistributionSet set : sets) { if (set.getTags().add(myTag)) { @@ -199,8 +199,7 @@ public class DistributionSetManagement { } final DistributionSetTagAssigmentResult resultAssignment = result; - afterCommit - .afterCommit(() -> eventBus.post(new DistributionSetTagAssigmentResultEvent(resultAssignment))); + afterCommit.afterCommit(() -> eventBus.post(new DistributionSetTagAssigmentResultEvent(resultAssignment))); // no reason to persist the tag entityManager.detach(myTag); @@ -870,7 +869,7 @@ public class DistributionSetManagement { cb) -> cb.and( cb.equal(root.get(DistributionSetMetadata_.distributionSet) .get(DistributionSet_.id), distributionSetId), - spec.toPredicate(root, query, cb)), + spec.toPredicate(root, query, cb)), pageable); } 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 77b48a3cd..559b71498 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 @@ -327,13 +327,11 @@ public class SystemManagement { "Standard Edge Controller Linux distribution set type. OS only.").addMandatoryModuleType(eclOs) .addOptionalModuleType(eclApp)); - final DistributionSetType defaultType = distributionSetTypeRepository + return distributionSetTypeRepository .save(new DistributionSetType("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)); - - return defaultType; } /** 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 c19b947de..17a7965dd 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 @@ -52,7 +52,7 @@ 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 Action extends BaseEntity implements Comparable { +public class Action extends TenantAwareBaseEntity implements Comparable { private static final long serialVersionUID = 1L; /** 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 2b0effae9..0fdec839b 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 @@ -41,7 +41,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 ActionStatus extends BaseEntity { +public class ActionStatus extends TenantAwareBaseEntity { /** * @@ -52,7 +52,7 @@ public class ActionStatus extends BaseEntity { private Long occurredAt; @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumn(name = "action", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_act_stat_action") ) + @JoinColumn(name = "action", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_act_stat_action")) private Action action; @Column(name = "status") @@ -60,7 +60,7 @@ public class ActionStatus extends BaseEntity { @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 = { + @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<>(); @@ -103,66 +103,46 @@ public class ActionStatus extends BaseEntity { } /** - * - */ + * JPA default constructor. + */ public ActionStatus() { + // JPA default constructor. } - /** - * @return the occurredAt - */ public Long getOccurredAt() { return occurredAt; } - /** - * @param occurredAt - * the occurredAt to set - */ public void setOccurredAt(final Long occurredAt) { this.occurredAt = occurredAt; } /** - * Adds message. + * Adds message including splitting in case it exceeds 512 length. * * @param message * to add */ public final void addMessage(final String message) { - Splitter.fixedLength(512).split(message).forEach(chunk -> messages.add(chunk)); + Splitter.fixedLength(512).split(message).forEach(messages::add); } public List getMessages() { return messages; } - /** - * @return the action - */ public Action getAction() { return action; } - /** - * @param action - * the action to set - */ public void setAction(final Action action) { this.action = action; } - /** - * @return the status - */ public Status getStatus() { return status; } - /** - * @param status - * the status to set - */ public void setStatus(final Status status) { this.status = status; } 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 4b868f9a2..5d829e4d6 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 @@ -20,7 +20,7 @@ import javax.persistence.MappedSuperclass; * */ @MappedSuperclass -public abstract class Artifact extends BaseEntity { +public abstract class Artifact extends TenantAwareBaseEntity { 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/model/BaseEntity.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/BaseEntity.java index 72d25be6c..964cbb728 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 @@ -18,17 +18,10 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; -import javax.persistence.PrePersist; import javax.persistence.Version; import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; -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; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; @@ -37,18 +30,12 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.hateoas.Identifiable; /** - * Holder of all base attributes common to all entities. - * - * - * - * + * Holder of the base attributes common to all entities. * */ @MappedSuperclass @Access(AccessType.FIELD) @EntityListeners({ AuditingEntityListener.class, CacheFieldEntityListener.class, EntityPropertyChangeListener.class }) -@TenantDiscriminatorColumn(name = "tenant", length = 40) -@Multitenant(MultitenantType.SINGLE_TABLE) public abstract class BaseEntity implements Serializable, Identifiable { private static final long serialVersionUID = 1L; @@ -66,44 +53,11 @@ public abstract class BaseEntity implements Serializable, Identifiable { @Column(name = "optlock_revision") private long optLockRevision; - @Column(name = "tenant", nullable = false, insertable = false, updatable = false, length = 40) - private String tenant; - /** - * - */ + * Default constructor needed for JPA entities. + */ public BaseEntity() { - - } - - /** - * @param entity - * the entity to copy - */ - public BaseEntity(final BaseEntity entity) { - id = entity.id; - createdAt = entity.createdAt; - createdBy = entity.createdBy; - lastModifiedAt = entity.lastModifiedAt; - lastModifiedBy = entity.lastModifiedBy; - optLockRevision = entity.optLockRevision; - } - - /** - * PrePersist listener method for all {@link BaseEntity} 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 " + id); - } - setTenant(currentTenant.toUpperCase()); + // Default constructor needed for JPA entities. } @Access(AccessType.PROPERTY) @@ -130,37 +84,21 @@ public abstract class BaseEntity implements Serializable, Identifiable { return lastModifiedBy; } - /** - * @param createdBy - * the createdBy to set - */ @CreatedBy public void setCreatedBy(final String createdBy) { this.createdBy = createdBy; } - /** - * @param lastModifiedBy - * the lastModifiedBy to set - */ @LastModifiedBy public void setLastModifiedBy(final String lastModifiedBy) { this.lastModifiedBy = lastModifiedBy; } - /** - * @param createdAt - * the createdAt to set - */ @CreatedDate public void setCreatedAt(final Long createdAt) { this.createdAt = createdAt; } - /** - * @param lastModifiedAt - * the lastModifiedAt to set - */ @LastModifiedDate public void setLastModifiedAt(final Long lastModifiedAt) { this.lastModifiedAt = lastModifiedAt; @@ -170,52 +108,20 @@ public abstract class BaseEntity implements Serializable, Identifiable { return optLockRevision; } - /** - * @return the tenant - */ - public String getTenant() { - return tenant; - } - - /** - * @param tenant - * the tenant to set - */ - public void setTenant(final String tenant) { - this.tenant = tenant; - } - - /** - * @return the id - */ @Override public Long getId() { return id; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "BaseEntity [id=" + id + "]"; } - /** - * @param id - * the id to set - */ public void setId(final Long id) { this.id = id; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { // NOSONAR - as this is generated code final int prime = 31; @@ -225,11 +131,6 @@ public abstract class BaseEntity implements Serializable, Identifiable { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated // code 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 0cebd0362..30446a0bf 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 @@ -12,7 +12,7 @@ import javax.persistence.Column; import javax.persistence.MappedSuperclass; /** - * {@link BaseEntity} extension for all entities that are named in addition to + * {@link TenantAwareBaseEntity} extension for all entities that are named in addition to * their technical ID. * * @@ -22,7 +22,7 @@ import javax.persistence.MappedSuperclass; * */ @MappedSuperclass -public abstract class NamedEntity extends BaseEntity { +public abstract class NamedEntity extends TenantAwareBaseEntity { private static final long serialVersionUID = 1L; @Column(name = "name", nullable = false, length = 64) 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 8d76b7ae5..f14fc26e2 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 @@ -22,7 +22,7 @@ import javax.persistence.UniqueConstraint; @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 BaseEntity { +public class TargetFilterQuery extends TenantAwareBaseEntity { /** * * 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 new file mode 100644 index 000000000..755ab793e --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TenantAwareBaseEntity.java @@ -0,0 +1,108 @@ +/** + * 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 javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import javax.persistence.PrePersist; + +import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; +import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; +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; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +/** + * Holder of the base attributes common to all tenant aware entities. + * + */ +@MappedSuperclass +@EntityListeners({ AuditingEntityListener.class, CacheFieldEntityListener.class, EntityPropertyChangeListener.class }) +@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() + "]"; + } + + @Override + public int hashCode() { // NOSONAR - as this is generated + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((tenant == null) ? 0 : tenant.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { // NOSONAR - as this is generated + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + 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; + } + +} 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 d571a2ea7..972ea1ffe 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 @@ -25,8 +25,8 @@ import javax.persistence.UniqueConstraint; */ @Entity @Table(name = "sp_tenant_configuration", uniqueConstraints = @UniqueConstraint(columnNames = { "conf_key", - "tenant" }, name = "uk_tenant_key") ) -public class TenantConfiguration extends BaseEntity implements Serializable { + "tenant" }, name = "uk_tenant_key")) +public class TenantConfiguration extends TenantAwareBaseEntity implements Serializable { /** * @@ -44,7 +44,7 @@ public class TenantConfiguration extends BaseEntity implements Serializable { * JPA default constructor. */ public TenantConfiguration() { - + // JPA default constructor. } /** 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 d8483e12f..37e00e247 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 @@ -89,7 +89,7 @@ public class TenantConfigurationValue { */ public static TenantConfigurationValueBuilder builder() { - return new TenantConfigurationValueBuilder(); + return new TenantConfigurationValueBuilder<>(); } /** 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 e86bfe8a4..5b75bd0bd 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,76 +8,45 @@ */ 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.ConstraintMode; import javax.persistence.Entity; +import javax.persistence.EntityManager; import javax.persistence.FetchType; import javax.persistence.ForeignKey; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; import javax.persistence.Index; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; -import javax.persistence.Version; - -import org.springframework.data.annotation.CreatedBy; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedBy; -import org.springframework.data.annotation.LastModifiedDate; /** - * Tenant metadata that is configured globally for the entire tenant. This - * entity is - * - * - * + * 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}. * */ -@Access(AccessType.FIELD) @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 implements Serializable { - - /** - * - */ +public class TenantMetaData extends BaseEntity { private static final long serialVersionUID = 1L; - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") - private Long id; - @Column(name = "tenant", nullable = false, length = 40) private String tenant; - private String createdBy; - private String lastModifiedBy; - private Long createdAt; - private Long lastModifiedAt; - - @Version - @Column(name = "optlock_revision") - private long optLockRevision; - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "default_ds_type", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_tenant_md_default_ds_type") ) - // use deprecated annotation until HHH-8862 is fixed - @SuppressWarnings("deprecation") - // @org.hibernate.annotations.ForeignKey( name = - // "fk_tenant_md_default_ds_type" ) + @JoinColumn(name = "default_ds_type", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_tenant_md_default_ds_type")) private DistributionSetType defaultDsType; + /** + * Default constructor needed for JPA entities. + */ public TenantMetaData() { + // Default constructor needed for JPA entities. } /** @@ -93,167 +62,20 @@ public class TenantMetaData implements Serializable { this.tenant = tenant; } - /** - * @return the defaultDsType - */ public DistributionSetType getDefaultDsType() { return defaultDsType; } - /** - * Set the DistributionSet for a tenant. - * - * @param defaultDsType - * the new default DistributionSet - */ public void setDefaultDsType(final DistributionSetType defaultDsType) { this.defaultDsType = defaultDsType; } - /** - * @return the id - */ - public Long getId() { - return id; - } - - /** - * @param id - * the id to set - */ - public void setId(final Long id) { - this.id = id; - } - - @Access(AccessType.PROPERTY) - @Column(name = "created_at", insertable = true, updatable = false) - public Long getCreatedAt() { - return createdAt; - } - - @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; - } - - /** - * @param createdBy - * the createdBy to set - */ - @CreatedBy - public void setCreatedBy(final String createdBy) { - this.createdBy = createdBy; - } - - /** - * @param lastModifiedBy - * the lastModifiedBy to set - */ - @LastModifiedBy - public void setLastModifiedBy(final String lastModifiedBy) { - this.lastModifiedBy = lastModifiedBy; - } - - /** - * @param createdAt - * the createdAt to set - */ - @CreatedDate - public void setCreatedAt(final Long createdAt) { - this.createdAt = createdAt; - } - - /** - * @param lastModifiedAt - * the lastModifiedAt to set - */ - @LastModifiedDate - public void setLastModifiedAt(final Long lastModifiedAt) { - this.lastModifiedAt = lastModifiedAt; - } - - /** - * @return the optLockRevision - */ - public long getOptLockRevision() { - return optLockRevision; - } - - /** - * @param optLockRevision - * the optLockRevision to set - */ - public void setOptLockRevision(final long optLockRevision) { - this.optLockRevision = optLockRevision; - } - - /** - * @return the tenant - */ public String getTenant() { return tenant; } - /** - * @param tenant - * the tenant to set - */ public void setTenant(final String tenant) { this.tenant = tenant; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; - } - - /* - * (non-Javadoc) - * - * @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 (getClass() != obj.getClass()) { - return false; - } - final TenantMetaData other = (TenantMetaData) obj; - if (id == null) { - if (other.id != null) { - return false; - } - } else if (!id.equals(other.id)) { - return false; - } - return true; - } - } 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 34aa223c3..93806e626 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 @@ -20,7 +20,7 @@ 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.ActionStatus; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -207,7 +207,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final Slice result = targetManagement.findTargetsAllOrderByLinkedDistributionSet(pageReq, ds.getId(), null, null, null, Boolean.FALSE, null); - final Comparator byId = (e1, e2) -> Long.compare(e2.getId(), e1.getId()); + final Comparator byId = (e1, e2) -> Long.compare(e2.getId(), e1.getId()); assertThat(result.getNumberOfElements()).isEqualTo(9); final List expected = new ArrayList(); diff --git a/hawkbit-repository/src/test/resources/application-test.properties b/hawkbit-repository/src/test/resources/application-test.properties index b1904f911..0882d901c 100644 --- a/hawkbit-repository/src/test/resources/application-test.properties +++ b/hawkbit-repository/src/test/resources/application-test.properties @@ -13,7 +13,7 @@ spring.data.mongodb.port=28017 hawkbit.server.ddi.security.authentication.header.enabled=true hawkbit.server.ddi.security.authentication.gatewaytoken.name=TestToken -hawkbit.server.artifact.repo.upload.maxFileSize=5MB +multipart.max-file-size=5MB hawkbit.server.security.dos.maxStatusEntriesPerAction=100 @@ -26,7 +26,6 @@ spring.datasource.username=sa spring.datasource.password=sa flyway.enabled=true -flyway.initOnMigrate=true flyway.sqlMigrationSuffix=${spring.jpa.database}.sql #spring.jpa.show-sql=true 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 index 52668f1f1..24f717004 100644 --- 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 @@ -8,7 +8,7 @@ */ package org.eclipse.hawkbit.rest.resource; -import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.rest.resource.model.BaseEntityRest; import org.eclipse.hawkbit.rest.resource.model.NamedEntityRest; @@ -28,7 +28,7 @@ final class RestModelMapper { } - static void mapBaseToBase(final BaseEntityRest response, final BaseEntity base) { + static void mapBaseToBase(final BaseEntityRest response, final TenantAwareBaseEntity base) { response.setCreatedBy(base.getCreatedBy()); response.setLastModifiedBy(base.getLastModifiedBy()); if (base.getCreatedAt() != null) { From 3ff352584e104d1e28123b8a17f957b0af6ca557 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 23 Mar 2016 14:28:24 +0100 Subject: [PATCH 010/344] Small fix since wrong config value was being accessed. Signed-off-by: Jonathan Philip Knoblauch --- .../DownloadAnonymousConfigurationView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java index 505c0963d..fa441476d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java @@ -107,10 +107,10 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView @Override public void undo() { - anonymousDownloadEnabled = tenantConfigurationManagement - .getGlobalConfigurationValue(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, Boolean.class); + final TenantConfigurationValue value = tenantConfigurationManagement + .getConfigurationValue(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, Boolean.class); + anonymousDownloadEnabled = value.getValue(); downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); - } } From 84519b77ab5b593a88be79c959cf2f058935e500 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 23 Mar 2016 15:12:12 +0100 Subject: [PATCH 011/344] Disable to set the current page first item id Signed-off-by: SirWayne --- .../java/org/eclipse/hawkbit/app/MyUI.java | 3 +- .../org/eclipse/hawkbit/ui/EventProvider.java | 16 +++ .../hawkbit/ui/HawkbitEventProvider.java | 43 ++++++++ .../management/targettable/TargetTable.java | 6 +- .../ui/push/DelayedEventBusPushStrategy.java | 102 ++++++++++++------ 5 files changed, 130 insertions(+), 40 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java index e55cb02d2..bbb348961 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.app; +import org.eclipse.hawkbit.ui.HawkbitEventProvider; import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.push.DelayedEventBusPushStrategy; import org.springframework.beans.factory.annotation.Autowired; @@ -34,6 +35,6 @@ public class MyUI extends HawkbitUI { @Autowired public MyUI(final EventBus systemEventBus, final org.vaadin.spring.events.EventBus.SessionEventBus eventBus) { - super(new DelayedEventBusPushStrategy(eventBus, systemEventBus)); + super(new DelayedEventBusPushStrategy(eventBus, systemEventBus, new HawkbitEventProvider())); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java new file mode 100644 index 000000000..0ae83af01 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ui; + +import java.util.Set; + +/** + * + */ +public interface EventProvider { + + Set> getSingleEvents(); + + Set> getBulkEvents(); +} 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 new file mode 100644 index 000000000..8600b8e20 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ui; + +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.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 com.google.common.collect.Sets; + +/** + * @author Dennis Melzer + * + */ +public class HawkbitEventProvider implements EventProvider { + + private static final Set> SINGLE_EVENTS = Sets.newHashSet(TargetTagCreatedBulkEvent.class, + DistributionSetTagCreatedBulkEvent.class, DistributionSetTagDeletedEvent.class, + DistributionSetTagUpdateEvent.class, RolloutGroupChangeEvent.class, RolloutChangeEvent.class); + + private static final Set> BULD_EVENTS = Sets.newHashSet(TargetCreatedEvent.class, + TargetInfoUpdateEvent.class, TargetDeletedEvent.class); + + @Override + public Set> getSingleEvents() { + return SINGLE_EVENTS; + } + + @Override + public Set> getBulkEvents() { + return BULD_EVENTS; + } + +} 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 960553a6a..b8b59cb91 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 @@ -15,7 +15,6 @@ 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 java.util.stream.Collectors; @@ -141,8 +140,6 @@ public class TargetTable extends AbstractTable implements Handler { private Boolean isTargetPinned = Boolean.FALSE; private ShortcutAction actionSelectAll; private ShortcutAction actionUnSelectAll; - - @Override @PostConstruct @@ -349,7 +346,8 @@ public class TargetTable extends AbstractTable implements Handler { @Override protected Object getItemIdToSelect() { if (managementUIState.getSelectedTargetIdName().isPresent()) { - setCurrentPageFirstItemId(managementUIState.getLastSelectedTargetIdName()); + LOG.info("****** getItemIdToSelect *********"); + // setCurrentPageFirstItemId(managementUIState.getLastSelectedTargetIdName()); return managementUIState.getSelectedTargetIdName().get(); } return null; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java index 87fcbe922..5ac9362fe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.ui.push; +import java.time.Instant; import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -19,15 +20,10 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.EntityEvent; -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.Event; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; +import org.eclipse.hawkbit.ui.EventProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.context.SecurityContext; @@ -36,7 +32,6 @@ import org.springframework.security.web.context.HttpSessionSecurityContextReposi import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventBus.SessionEventBus; -import com.google.common.collect.Sets; import com.google.common.eventbus.AllowConcurrentEvents; import com.google.common.eventbus.Subscribe; import com.vaadin.server.VaadinSession; @@ -71,12 +66,7 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { private ScheduledFuture jobHandle; - /** - * only events defined in the set are dispatched to the session event bus. - */ - private static final Set> UI_EVENTS = Sets.newHashSet(TargetInfoUpdateEvent.class, - TargetCreatedEvent.class, TargetDeletedEvent.class, RolloutChangeEvent.class, RolloutGroupChangeEvent.class, - TargetTagCreatedBulkEvent.class, DistributionSetTagCreatedBulkEvent.class); + private final EventProvider eventProvider; /** * Constructor. @@ -88,9 +78,10 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { * back-end */ public DelayedEventBusPushStrategy(final SessionEventBus eventBus, - final com.google.common.eventbus.EventBus systemEventBus) { + final com.google.common.eventbus.EventBus systemEventBus, final EventProvider eventProvider) { this.eventBus = eventBus; this.systemEventBus = systemEventBus; + this.eventProvider = eventProvider; } /** @@ -105,12 +96,22 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { @AllowConcurrentEvents public void dispatch(final org.eclipse.hawkbit.eventbus.event.Event event) { // to dispatch too many events which are not interested on the UI - if (UI_EVENTS.contains(event.getClass()) && !queue.offer(event)) { + if (!isEventProvided(event)) { + LOG.trace("Event is not supported in the UI!!! Dropped event is {}", event); + return; + } + + if (!queue.offer(event)) { LOG.warn("Deque limit is reached, cannot add more events!!! Dropped event is {}", event); return; } } + private boolean isEventProvided(final org.eclipse.hawkbit.eventbus.event.Event event) { + return eventProvider.getSingleEvents().contains(event.getClass()) + || eventProvider.getBulkEvents().contains(event.getClass()); + } + @Override public void init(final UI vaadinUI) { LOG.debug("Initialize delayed event push strategy"); @@ -152,6 +153,9 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { return false; } + private static int addAccess = 0; + private static int startAccess = 0; + private final class DispatchRunnable implements Runnable { private final UI vaadinUI; @@ -206,38 +210,66 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { final SecurityContext oldContext = SecurityContextHolder.getContext(); try { SecurityContextHolder.setContext(userContext); + + // TODO viele kleine access? + addAccess++; + final int endAddAccess = addAccess; + LOG.info("Add Access to runnable{}", addAccess); vaadinUI.access(() -> { + startAccess++; + final int currentAccess = startAccess; + LOG.info("Started Access {}", currentAccess); + final Instant startAcess = Instant.now(); + if (vaadinSession.getState() != State.OPEN) { return; } - fowardEvents(events, userContext); - - // send a list of events, because ui performance issues - publishEventAsList(events, userContext, TargetInfoUpdateEvent.class); - publishEventAsList(events, userContext, TargetCreatedEvent.class); - publishEventAsList(events, userContext, TargetDeletedEvent.class); + fowardSingleEvents(events, userContext); + fowardBulkEvents(events, userContext); + berechneDauer(startAcess, "End Access " + currentAccess); }); + + LOG.info("End add Access to runnable{}", endAddAccess); } finally { SecurityContextHolder.setContext(oldContext); } } - private void publishEventAsList(final List events, - final SecurityContext userContext, final Class eventType) { - final List bulkEvents = events.stream() - .filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event) - && eventType.isInstance(event)) - .collect(Collectors.toList()); - if (bulkEvents.isEmpty()) { - return; - } - eventBus.publish(vaadinUI, bulkEvents); + private void berechneDauer(final Instant start, final String methode) { + final Instant end = Instant.now(); + final long second = end.getEpochSecond() - start.getEpochSecond(); + LOG.info("Dauer {} {} sekunden.", methode, second); } - private void fowardEvents(final List events, + private void fowardBulkEvents(final List events, final SecurityContext userContext) { - events.stream().filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event)) - .forEach(event -> eventBus.publish(vaadinUI, event)); + final Set> filterBulkEvenTypes = events.stream().map(Event::getClass) + .filter(eventClass -> eventProvider.getBulkEvents().contains(eventClass)) + .collect(Collectors.toSet()); + publishBulkEvent(events, userContext, filterBulkEvenTypes); + } + + private void publishBulkEvent(final List events, + final SecurityContext userContext, final Set> filterBulkEvenTypes) { + for (final Class bulkType : filterBulkEvenTypes) { + final List listBulkEvents = events.stream() + .filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event) + && bulkType.isInstance(event)) + .collect(Collectors.toList()); + if (!listBulkEvents.isEmpty()) { + LOG.info("Publish bulk event"); + eventBus.publish(vaadinUI, listBulkEvents); + } + } + } + + private void fowardSingleEvents(final List events, + final SecurityContext userContext) { + events.stream().filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event) + && eventProvider.getSingleEvents().contains(event.getClass())).forEach(event -> { + LOG.info("Publish single event"); + eventBus.publish(vaadinUI, event); + }); } } From 9ff0f008225cfaab9092db2cb2ab89c7a3471826 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 23 Mar 2016 16:12:56 +0100 Subject: [PATCH 012/344] Remove REST API boilerplate Was used in the past for Swagger generation. --- MIGRATION.md | 4 + .../CreateStartedRolloutExample.java | 17 +- .../GettingStartedDefaultScenario.java | 25 +- .../resource/api/DistributionSetRestApi.java | 17 +- .../api/DistributionSetTagRestApi.java | 6 +- .../api/DistributionSetTypeRestApi.java | 12 +- .../rest/resource/api/RolloutRestApi.java | 9 +- .../resource/api/SoftwareModuleRestAPI.java | 13 +- .../api/SoftwareModuleTypeRestApi.java | 7 +- .../rest/resource/api/TargetRestApi.java | 16 +- .../rest/resource/api/TargetTagRestApi.java | 6 +- .../rest/resource/model/PagedList.java | 13 +- .../model/action/ActionPagedList.java | 48 --- .../model/action/ActionStatusPagedList.java | 54 ---- .../model/action/ActionStatusRest.java | 3 - .../model/action/ActionStatussRest.java | 277 ------------------ .../model/artifact/ArtifactsRest.java | 273 ----------------- .../DistributionSetPagedList.java | 39 --- .../distributionset/DistributionSetsRest.java | 277 ------------------ .../DistributionSetTypePagedList.java | 40 --- .../DistributionSetTypesRest.java | 274 ----------------- .../rolloutgroup/RolloutGroupPagedList.java | 35 --- .../SoftwareModulePagedList.java | 39 --- .../softwaremodule/SoftwareModulesRest.java | 277 ------------------ .../SoftwareModuleTypePagedList.java | 39 --- .../SoftwareModuleTypeRest.java | 3 - .../SoftwareModuleTypesRest.java | 274 ----------------- ...DistributionSetTagAssigmentResultRest.java | 16 +- .../tag/TargetTagAssigmentResultRest.java | 16 +- .../model/target/TargetPagedList.java | 39 --- .../resource/model/target/TargetsRest.java | 269 ----------------- .../rest/resource/DistributionSetMapper.java | 5 +- .../resource/DistributionSetResource.java | 31 +- .../resource/DistributionSetTagResource.java | 6 +- .../resource/DistributionSetTypeMapper.java | 12 +- .../resource/DistributionSetTypeResource.java | 29 +- .../rest/resource/RestModelMapper.java | 2 +- .../rest/resource/RolloutResource.java | 15 +- .../rest/resource/SoftwareModuleMapper.java | 13 +- .../rest/resource/SoftwareModuleResource.java | 12 +- .../resource/SoftwareModuleTypeMapper.java | 5 +- .../resource/SoftwareModuleTypeResource.java | 11 +- .../hawkbit/rest/resource/TargetMapper.java | 22 +- .../hawkbit/rest/resource/TargetResource.java | 24 +- .../rest/resource/TargetTagResource.java | 6 +- 45 files changed, 177 insertions(+), 2453 deletions(-) delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionPagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusPagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatussRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactsRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetPagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetsRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypePagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypesRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupPagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulePagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulesRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypePagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypesRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetPagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetsRest.java diff --git a/MIGRATION.md b/MIGRATION.md index eacce864d..8db1ee57c 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -7,3 +7,7 @@ - hawkbit.server.email.support has changed to hawkbit.server.ui.links.support - hawkbit.server.email.request.account has changed to hawkbit.server.ui.links.requestAccount - hawkbit.server.im.login.url has changed to hawkbit.server.ui.links.userManagement + +### 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) 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 35b0f31ea..e92f81326 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 @@ -8,6 +8,8 @@ */ 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; @@ -21,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.DistributionSetsRest; +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.SoftwareModulesRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; +import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; +import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -65,8 +67,9 @@ public class CreateStartedRolloutExample { public void run() { // create three SoftwareModuleTypes - final SoftwareModuleTypesRest createdSoftwareModuleTypes = softwareModuleTypeResource.createSoftwareModuleTypes( - new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE).maxAssignments(1).build()) + final List createdSoftwareModuleTypes = softwareModuleTypeResource + .createSoftwareModuleTypes(new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE) + .maxAssignments(1).build()) .getBody(); // create one DistributionSetType @@ -75,12 +78,12 @@ public class CreateStartedRolloutExample { .getBody(); // create one DistributionSet - final DistributionSetsRest 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 SoftwareModulesRest softwareModulesRest = softwareModuleResource + final List softwareModulesRest = softwareModuleResource .createSoftwareModules( new SoftwareModuleBuilder().name("firmware").version("1.0.0").type(SM_MODULE_TYPE).build()) .getBody(); 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 5767ab9e7..d17048dea 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 @@ -8,6 +8,8 @@ */ 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; @@ -17,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.DistributionSetsRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModulesRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; +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.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -68,8 +70,9 @@ public class GettingStartedDefaultScenario { // create one SoftwareModuleTypes LOGGER.info("Creating software module type {}", SM_MODULE_TYPE); - final SoftwareModuleTypesRest createdSoftwareModuleTypes = softwareModuleTypeResource.createSoftwareModuleTypes( - new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE).maxAssignments(1).build()) + final List createdSoftwareModuleTypes = softwareModuleTypeResource + .createSoftwareModuleTypes(new SoftwareModuleTypeBuilder().key(SM_MODULE_TYPE).name(SM_MODULE_TYPE) + .maxAssignments(1).build()) .getBody(); // create one DistributionSetType @@ -83,17 +86,17 @@ public class GettingStartedDefaultScenario { final String dsVersion3 = "2.1.0"; LOGGER.info("Creating distribution set {}:{}", DS_EXAMPLE_NAME, dsVersion1); - final DistributionSetsRest 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 DistributionSetsRest 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 DistributionSetsRest distributionSetsRest3 = distributionSetResource.createDistributionSets( + final List distributionSetsRest3 = distributionSetResource.createDistributionSets( new DistributionSetBuilder().name(DS_EXAMPLE_NAME).version(dsVersion3).type(DS_MODULE_TYPE).build()) .getBody(); @@ -103,15 +106,15 @@ public class GettingStartedDefaultScenario { final String swVersion3 = "3"; LOGGER.info("Creating distribution set {}:{}", SM_EXAMPLE_NAME, swVersion1); - final SoftwareModulesRest 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 SoftwareModulesRest 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 SoftwareModulesRest 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-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java index 05d377950..f7e7a35b7 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java @@ -14,16 +14,15 @@ 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.MetadataRestPageList; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetPagedList; +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.DistributionSetsRest; 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.SoftwareModulePagedList; -import org.eclipse.hawkbit.rest.resource.model.target.TargetPagedList; +import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; +import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -58,7 +57,7 @@ public interface DistributionSetRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSets( + 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, @@ -93,7 +92,7 @@ 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( + public ResponseEntity> createDistributionSets( @RequestBody final List sets); /** @@ -148,7 +147,7 @@ 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, @@ -179,7 +178,7 @@ 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, @@ -357,7 +356,7 @@ 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java index d99368dc2..d86b90d6a 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java @@ -11,7 +11,7 @@ package org.eclipse.hawkbit.rest.resource.api; import java.util.List; import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetsRest; +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.TagPagedList; @@ -137,7 +137,7 @@ public interface DistributionSetTagRestApi { * exists. */ @RequestMapping(method = RequestMethod.GET, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) - public ResponseEntity getAssignedDistributionSets( + public ResponseEntity> getAssignedDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId); /** @@ -175,7 +175,7 @@ public interface DistributionSetTagRestApi { * exists. */ @RequestMapping(method = RequestMethod.POST, value = RestConstants.DISTRIBUTIONSET_REQUEST_MAPPING) - public ResponseEntity assignDistributionSets( + public ResponseEntity> assignDistributionSets( @PathVariable("distributionsetTagId") final Long distributionsetTagId, @RequestBody final List assignedDSRequestBodies); diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java index 9bed7f4f8..1900d8d7d 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTypeRestApi.java @@ -12,13 +12,11 @@ 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.distributionsettype.DistributionSetTypePagedList; +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.distributionsettype.DistributionSetTypesRest; import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -57,7 +55,7 @@ public interface DistributionSetTypeRestApi { * response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSetTypes( + 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, @@ -119,7 +117,7 @@ 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( + public ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes); /** @@ -133,7 +131,7 @@ public interface DistributionSetTypeRestApi { @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}/" + RestConstants.DISTRIBUTIONSETTYPE_V1_MANDATORY_MODULE_TYPES, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getMandatoryModules( + public ResponseEntity> getMandatoryModules( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** @@ -181,7 +179,7 @@ public interface DistributionSetTypeRestApi { @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetTypeId}/" + RestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULE_TYPES, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getOptionalModules( + public ResponseEntity> getOptionalModules( @PathVariable("distributionSetTypeId") final Long distributionSetTypeId); /** diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java index fe1c7caa5..5fcfd3b56 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java @@ -9,12 +9,12 @@ package org.eclipse.hawkbit.rest.resource.api; import org.eclipse.hawkbit.rest.resource.RestConstants; +import org.eclipse.hawkbit.rest.resource.model.PagedList; import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutPagedList; 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.RolloutGroupPagedList; import org.eclipse.hawkbit.rest.resource.model.rolloutgroup.RolloutGroupResponseBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetPagedList; +import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -154,7 +154,8 @@ public interface RolloutRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{rolloutId}/deploygroups", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity getRolloutGroups(@PathVariable("rolloutId") final Long rolloutId, + public 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, @@ -200,7 +201,7 @@ 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, + public 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java index 0662c43ba..b68ea6086 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java @@ -13,13 +13,11 @@ 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.MetadataRestPageList; +import org.eclipse.hawkbit.rest.resource.model.PagedList; import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactsRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModulePagedList; 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.rest.resource.model.softwaremodule.SoftwareModulesRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -79,7 +77,8 @@ 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); + public ResponseEntity> getArtifacts( + @PathVariable("softwareModuleId") final Long softwareModuleId); /** * Handles the GET request of retrieving a single Artifact meta data @@ -134,7 +133,7 @@ public interface SoftwareModuleRestAPI { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getSoftwareModules( + 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, @@ -168,7 +167,7 @@ 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( + public ResponseEntity> createSoftwareModules( @RequestBody final List softwareModules); /** @@ -187,7 +186,7 @@ public interface SoftwareModuleRestAPI { @RequestBody final SoftwareModuleRequestBodyPut restSoftwareModule); /** - * Handles the DELETE request for a single softwaremodule. + * Handles the DELETE request for a single software module. * * @param softwareModuleId * the ID of the module to retrieve diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java index 0c4756a04..a98e35a32 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleTypeRestApi.java @@ -11,11 +11,10 @@ package org.eclipse.hawkbit.rest.resource.api; import java.util.List; import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypePagedList; +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.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -52,7 +51,7 @@ public interface SoftwareModuleTypeRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getTypes( + 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, @@ -113,7 +112,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( + public 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-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java index 9d63a520f..48e242f81 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetRestApi.java @@ -11,16 +11,14 @@ package org.eclipse.hawkbit.rest.resource.api; import java.util.List; import org.eclipse.hawkbit.rest.resource.RestConstants; -import org.eclipse.hawkbit.rest.resource.model.action.ActionPagedList; +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.ActionStatusPagedList; +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.TargetPagedList; import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetsRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -70,7 +68,7 @@ public interface TargetRestApi { */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getTargets( + 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, @@ -89,7 +87,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); + public ResponseEntity> createTargets(@RequestBody final List targets); /** * Handles the PUT request of updating a target. The ID is within the URL @@ -160,7 +158,7 @@ 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, + 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, @@ -225,8 +223,8 @@ 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, + 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); diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java index 59770db08..ac82fbd5c 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java @@ -17,7 +17,7 @@ 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.TagsRest; import org.eclipse.hawkbit.rest.resource.model.tag.TargetTagAssigmentResultRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetsRest; +import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -129,7 +129,7 @@ public interface TargetTagRestApi { * 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); + public ResponseEntity> getAssignedTargets(@PathVariable("targetTagId") final Long targetTagId); /** * Handles the POST request to toggle the assignment of targets by the given @@ -163,7 +163,7 @@ public interface TargetTagRestApi { * 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, + public ResponseEntity> assignTargets(@PathVariable("targetTagId") final Long targetTagId, @RequestBody final List assignedTargetRequestBodies); /** diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java index 082015b5c..880ee0c16 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java @@ -20,19 +20,18 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; /** * A list representation with meta data for pagination, e.g. containing the - * total elements. The content of the acutal list is stored in the - * {@link #content} field. + * total elements and size of content. The content of the actual list is stored + * in the {@link #content} field. * * @param * the type of elements in this list * - * - * */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(Include.NON_NULL) public class PagedList extends ResourceSupport { + private final List content; private final long totalElements; private final int size; @@ -50,6 +49,7 @@ public class PagedList extends ResourceSupport { public PagedList(@NotNull final List content, final long total) { this.size = content.size(); this.totalElements = total; + this.content = content; } /** @@ -65,4 +65,9 @@ public class PagedList extends ResourceSupport { public long getTotal() { return totalElements; } + + public List getContent() { + return content; + } + } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionPagedList.java deleted file mode 100644 index 27b36779a..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionPagedList.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.model.action; - -import java.util.Collections; -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list rest model for {@link ErrorAction} to RESTful API representation. - * - */ -public class ActionPagedList extends PagedList { - - private final List content; - - /** - * Empty default constructor. - */ - public ActionPagedList() { - super(Collections.emptyList(), 0); - this.content = Collections.emptyList(); - } - - /** - * @param content - * @param total - */ - public ActionPagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusPagedList.java deleted file mode 100644 index d9f19b98e..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusPagedList.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.rest.resource.model.action; - -import java.util.Collections; -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - -/** - * Paged list rest model for ActionStatus to RESTful API representation. - * - * - * - * - */ -@JsonIgnoreProperties(ignoreUnknown = true) -public class ActionStatusPagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - public ActionStatusPagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * Default constructor. - */ - public ActionStatusPagedList() { - super(Collections.emptyList(), 0); - this.content = Collections.emptyList(); - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java index 1f08afe49..e5af39bac 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatusRest.java @@ -18,9 +18,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * A json annotated rest model for ActionStatus to RESTful API representation. * - * - * - * */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatussRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatussRest.java deleted file mode 100644 index b3f3207b4..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionStatussRest.java +++ /dev/null @@ -1,277 +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.model.action; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * A list representation of the ActionStatus because Spring MVC cannot handle - * plain lists interfaces as request body. - * - * - * - * - */ -public class ActionStatussRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final ActionStatusRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public ActionStatusRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public ActionStatusRest set(final int index, final ActionStatusRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final ActionStatusRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public ActionStatusRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactsRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactsRest.java deleted file mode 100644 index 172e4d315..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/artifact/ArtifactsRest.java +++ /dev/null @@ -1,273 +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.model.artifact; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * List representation of the {@link ArtifactRest}. - * - */ -public class ArtifactsRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final ArtifactRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public ArtifactRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public ArtifactRest set(final int index, final ArtifactRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final ArtifactRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public ArtifactRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetPagedList.java deleted file mode 100644 index b7ad1eddb..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetPagedList.java +++ /dev/null @@ -1,39 +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.model.distributionset; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list for SoftwareModule. - * - */ -public class DistributionSetPagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - public DistributionSetPagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetsRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetsRest.java deleted file mode 100644 index ce7b4d1f1..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionset/DistributionSetsRest.java +++ /dev/null @@ -1,277 +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.model.distributionset; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * List representation of the {@link DistributionSetRest} because Spring MVC - * cannot handle plain lists interfaces as request body. - * - * - * - * - */ -public class DistributionSetsRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final DistributionSetRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public DistributionSetRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public DistributionSetRest set(final int index, final DistributionSetRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final DistributionSetRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public DistributionSetRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypePagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypePagedList.java deleted file mode 100644 index 57b15f5e8..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypePagedList.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.rest.resource.model.distributionsettype; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list for DistributionSetType. - * - * - */ -public class DistributionSetTypePagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - public DistributionSetTypePagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypesRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypesRest.java deleted file mode 100644 index f3cd42a85..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/distributionsettype/DistributionSetTypesRest.java +++ /dev/null @@ -1,274 +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.model.distributionsettype; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * List representation of the {@link DistributionSetTypeRest} because Spring MVC - * cannot handle plain lists interfaces as request body. - * - */ -public class DistributionSetTypesRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final DistributionSetTypeRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public DistributionSetTypeRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public DistributionSetTypeRest set(final int index, final DistributionSetTypeRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final DistributionSetTypeRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public DistributionSetTypeRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupPagedList.java deleted file mode 100644 index a341ac6ba..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rolloutgroup/RolloutGroupPagedList.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.rest.resource.model.rolloutgroup; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list for Rollout. - * - */ -public class RolloutGroupPagedList extends PagedList { - - private final List content; - - public RolloutGroupPagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulePagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulePagedList.java deleted file mode 100644 index a49f41dc9..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulePagedList.java +++ /dev/null @@ -1,39 +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.model.softwaremodule; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list for SoftwareModule. - * - */ -public class SoftwareModulePagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - public SoftwareModulePagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulesRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulesRest.java deleted file mode 100644 index b40c98d36..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremodule/SoftwareModulesRest.java +++ /dev/null @@ -1,277 +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.model.softwaremodule; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * List representation of the {@link SoftwareModuleRest} because Spring MVC - * cannot handle plain lists interfaces as request body. - * - * - * - * - */ -public class SoftwareModulesRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final SoftwareModuleRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public SoftwareModuleRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public SoftwareModuleRest set(final int index, final SoftwareModuleRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final SoftwareModuleRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public SoftwareModuleRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypePagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypePagedList.java deleted file mode 100644 index 7e85cdca9..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypePagedList.java +++ /dev/null @@ -1,39 +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.model.softwaremoduletype; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list for SoftwareModuleType. - * - */ -public class SoftwareModuleTypePagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - public SoftwareModuleTypePagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java index 6478eb790..ed05c1ee4 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypeRest.java @@ -19,9 +19,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; * A json annotated rest model for SoftwareModuleType to RESTful API * representation. * - * - * - * */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypesRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypesRest.java deleted file mode 100644 index 91f440187..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/softwaremoduletype/SoftwareModuleTypesRest.java +++ /dev/null @@ -1,274 +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.model.softwaremoduletype; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * List representation of the {@link SoftwareModuleTypeRest} because Spring MVC - * cannot handle plain lists interfaces as request body. - * - */ -public class SoftwareModuleTypesRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final SoftwareModuleTypeRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public SoftwareModuleTypeRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public SoftwareModuleTypeRest set(final int index, final SoftwareModuleTypeRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final SoftwareModuleTypeRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public SoftwareModuleTypeRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java index 1d0b51e72..2078fe891 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/DistributionSetTagAssigmentResultRest.java @@ -8,7 +8,9 @@ */ package org.eclipse.hawkbit.rest.resource.model.tag; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetsRest; +import java.util.List; + +import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRest; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -25,24 +27,24 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class DistributionSetTagAssigmentResultRest { @JsonProperty - private DistributionSetsRest assignedDistributionSets; + private List assignedDistributionSets; @JsonProperty - private DistributionSetsRest unassignedDistributionSets; + private List unassignedDistributionSets; - public DistributionSetsRest getAssignedDistributionSets() { + public List getAssignedDistributionSets() { return assignedDistributionSets; } - public DistributionSetsRest getUnassignedDistributionSets() { + public List getUnassignedDistributionSets() { return unassignedDistributionSets; } - public void setAssignedDistributionSets(final DistributionSetsRest assignedDistributionSets) { + public void setAssignedDistributionSets(final List assignedDistributionSets) { this.assignedDistributionSets = assignedDistributionSets; } - public void setUnassignedDistributionSets(final DistributionSetsRest 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/TargetTagAssigmentResultRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java index 928a72460..30d47cc90 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TargetTagAssigmentResultRest.java @@ -8,7 +8,9 @@ */ package org.eclipse.hawkbit.rest.resource.model.tag; -import org.eclipse.hawkbit.rest.resource.model.target.TargetsRest; +import java.util.List; + +import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -25,24 +27,24 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class TargetTagAssigmentResultRest { @JsonProperty - private TargetsRest assignedTargets; + private List assignedTargets; @JsonProperty - private TargetsRest unassignedTargets; + private List unassignedTargets; - public void setAssignedTargets(final TargetsRest assignedTargets) { + public void setAssignedTargets(final List assignedTargets) { this.assignedTargets = assignedTargets; } - public TargetsRest getAssignedTargets() { + public List getAssignedTargets() { return assignedTargets; } - public void setUnassignedTargets(final TargetsRest unassignedTargets) { + public void setUnassignedTargets(final List unassignedTargets) { this.unassignedTargets = unassignedTargets; } - public TargetsRest getUnassignedTargets() { + public List getUnassignedTargets() { return unassignedTargets; } diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetPagedList.java deleted file mode 100644 index d7bb5ccca..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetPagedList.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. - */ -package org.eclipse.hawkbit.rest.resource.model.target; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * Paged list for targets. - * - */ -public class TargetPagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - @JsonCreator - public TargetPagedList(@JsonProperty("content") final List content, - @JsonProperty("total") final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetsRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetsRest.java deleted file mode 100644 index 6344ee93b..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/target/TargetsRest.java +++ /dev/null @@ -1,269 +0,0 @@ -/** - * Copyright (c) 2011-2015 Bosch Software Innovations GmbH, Germany. All rights reserved. - */ -package org.eclipse.hawkbit.rest.resource.model.target; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * A list representation of the {@link TargetRest} because Spring MVC cannot - * handle plain lists interfaces as request body. - * - */ -public class TargetsRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final TargetRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public TargetRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public TargetRest set(final int index, final TargetRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final TargetRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public TargetRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} 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 9ae133dd5..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 @@ -27,7 +27,6 @@ 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.DistributionSetsRest; import org.eclipse.hawkbit.rest.resource.model.distributionset.TargetAssignmentResponseBody; /** @@ -193,8 +192,8 @@ public final class DistributionSetMapper { return result; } - static DistributionSetsRest toResponseDistributionSets(final Iterable sets) { - final DistributionSetsRest response = new DistributionSetsRest(); + static List toResponseDistributionSets(final Iterable sets) { + final List response = new ArrayList<>(); if (sets != null) { for (final DistributionSet set : sets) { 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 a4c71378d..4d5f47612 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 @@ -34,16 +34,15 @@ 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.MetadataRestPageList; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetPagedList; +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.DistributionSetsRest; 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.SoftwareModulePagedList; -import org.eclipse.hawkbit.rest.resource.model.target.TargetPagedList; +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; @@ -81,7 +80,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); @@ -98,7 +97,7 @@ public class DistributionSetResource implements DistributionSetRestApi { } final List rest = DistributionSetMapper.toResponseFromDsList(findDsPage.getContent()); - return new ResponseEntity<>(new DistributionSetPagedList(rest, findDsPage.getTotalElements()), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, findDsPage.getTotalElements()), HttpStatus.OK); } @Override @@ -109,7 +108,7 @@ public class DistributionSetResource implements DistributionSetRestApi { } @Override - public ResponseEntity createDistributionSets( + public ResponseEntity> createDistributionSets( final List sets) { LOG.debug("creating {} distribution sets", sets.size()); @@ -155,8 +154,8 @@ public class DistributionSetResource implements DistributionSetRestApi { } @Override - public ResponseEntity getAssignedTargets(final Long distributionSetId, final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + 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 // immediately @@ -175,12 +174,12 @@ public class DistributionSetResource implements DistributionSetRestApi { targetsAssignedDS = this.targetManagement.findTargetByAssignedDistributionSet(distributionSetId, pageable); } - return new ResponseEntity<>(new TargetPagedList(TargetMapper.toResponse(targetsAssignedDS.getContent()), + return new ResponseEntity<>(new PagedList<>(TargetMapper.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 @@ -200,7 +199,7 @@ public class DistributionSetResource implements DistributionSetRestApi { pageable); } - return new ResponseEntity<>(new TargetPagedList(TargetMapper.toResponse(targetsInstalledDS.getContent()), + return new ResponseEntity<>(new PagedList(TargetMapper.toResponse(targetsInstalledDS.getContent()), targetsInstalledDS.getTotalElements()), HttpStatus.OK); } @@ -323,7 +322,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 @@ -334,10 +333,8 @@ 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 SoftwareModulePagedList(SoftwareModuleMapper.toResponse(softwaremodules.getContent()), - softwaremodules.getTotalElements()), - HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(SoftwareModuleMapper.toResponse(softwaremodules.getContent()), + softwaremodules.getTotalElements()), HttpStatus.OK); } private DistributionSet findDistributionSetWithExceptionIfNotFound(final Long distributionSetId) { 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 c395863ab..63b864758 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 @@ -20,7 +20,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssigmentResult; import org.eclipse.hawkbit.repository.rsql.RSQLUtility; import org.eclipse.hawkbit.rest.resource.api.DistributionSetTagRestApi; -import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetsRest; +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.TagPagedList; @@ -121,7 +121,7 @@ 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); @@ -151,7 +151,7 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } @Override - public ResponseEntity assignDistributionSets(final Long distributionsetTagId, + public ResponseEntity> assignDistributionSets(final Long distributionsetTagId, final List assignedDSRequestBodies) { LOG.debug("Assign DistributionSet {} for ds tag {}", assignedDSRequestBodies.size(), distributionsetTagId); final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); 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 b32302705..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 @@ -21,15 +21,11 @@ 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; -import org.eclipse.hawkbit.rest.resource.model.distributionsettype.DistributionSetTypesRest; /** * A mapper which maps repository model to RESTful model representation and * back. * - * - * - * */ final class DistributionSetTypeMapper { @@ -63,7 +59,7 @@ final class DistributionSetTypeMapper { } return smType; - }).forEach(softmType -> result.addMandatoryModuleType(softmType)); + }).forEach(result::addMandatoryModuleType); // Add optional smsRest.getOptionalmodules().stream().map(opt -> { @@ -74,13 +70,13 @@ final class DistributionSetTypeMapper { } return smType; - }).forEach(softmType -> result.addOptionalModuleType(softmType)); + }).forEach(result::addOptionalModuleType); return result; } - static DistributionSetTypesRest toTypesResponse(final List types) { - final DistributionSetTypesRest response = new DistributionSetTypesRest(); + static List toTypesResponse(final List types) { + final List response = new ArrayList<>(); for (final DistributionSetType dsType : types) { response.add(toResponse(dsType)); } 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 a5c8544fb..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 @@ -21,13 +21,11 @@ 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.distributionsettype.DistributionSetTypePagedList; +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.distributionsettype.DistributionSetTypesRest; import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypeRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -56,7 +54,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity getDistributionSetTypes( + 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, @@ -81,7 +79,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { final List rest = DistributionSetTypeMapper .toListResponse(findModuleTypessAll.getContent()); - return new ResponseEntity<>(new DistributionSetTypePagedList(rest, countModulesAll), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override @@ -119,7 +117,7 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { } @Override - public ResponseEntity createDistributionSetTypes( + public ResponseEntity> createDistributionSetTypes( @RequestBody final List distributionSetTypes) { final List createdSoftwareModules = distributionSetManagement.createDistributionSetTypes( @@ -139,14 +137,12 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { } @Override - public ResponseEntity getMandatoryModules(@PathVariable final Long distributionSetTypeId) { + public ResponseEntity> getMandatoryModules( + @PathVariable final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); - - final SoftwareModuleTypesRest rest = new SoftwareModuleTypesRest(); - - rest.addAll(SoftwareModuleTypeMapper.toListResponse(foundType.getMandatoryModuleTypes())); - return new ResponseEntity<>(rest, HttpStatus.OK); + return new ResponseEntity<>(SoftwareModuleTypeMapper.toListResponse(foundType.getMandatoryModuleTypes()), + HttpStatus.OK); } @Override @@ -182,14 +178,13 @@ public class DistributionSetTypeResource implements DistributionSetTypeRestApi { } @Override - public ResponseEntity getOptionalModules(@PathVariable final Long distributionSetTypeId) { + public ResponseEntity> getOptionalModules( + @PathVariable final Long distributionSetTypeId) { final DistributionSetType foundType = findDistributionSetTypeWithExceptionIfNotFound(distributionSetTypeId); - final SoftwareModuleTypesRest rest = new SoftwareModuleTypesRest(); - - rest.addAll(SoftwareModuleTypeMapper.toListResponse(foundType.getOptionalModuleTypes())); - return new ResponseEntity<>(rest, HttpStatus.OK); + return new ResponseEntity<>(SoftwareModuleTypeMapper.toListResponse(foundType.getOptionalModuleTypes()), + HttpStatus.OK); } @Override 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 index 24f717004..9616d0e86 100644 --- 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 @@ -8,8 +8,8 @@ */ package org.eclipse.hawkbit.rest.resource; -import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; 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; 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 e00d07191..2267cb836 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 @@ -28,12 +28,11 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupSuccessCond 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.RolloutPagedList; 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.RolloutGroupPagedList; import org.eclipse.hawkbit.rest.resource.model.rolloutgroup.RolloutGroupResponseBody; -import org.eclipse.hawkbit.rest.resource.model.target.TargetPagedList; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -168,8 +167,8 @@ public class RolloutResource implements RolloutRestApi { } @Override - public ResponseEntity getRolloutGroups(final Long rolloutId, final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getRolloutGroups(final Long rolloutId, + final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { final Rollout rollout = findRolloutOrThrowException(rolloutId); final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); @@ -188,8 +187,7 @@ public class RolloutResource implements RolloutRestApi { final List rest = RolloutMapper .toResponseRolloutGroup(findRolloutGroupsAll.getContent()); - return new ResponseEntity<>(new RolloutGroupPagedList(rest, findRolloutGroupsAll.getTotalElements()), - HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, findRolloutGroupsAll.getTotalElements()), HttpStatus.OK); } @Override @@ -200,7 +198,7 @@ public class RolloutResource implements RolloutRestApi { } @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); @@ -222,7 +220,8 @@ public class RolloutResource implements RolloutRestApi { rolloutGroupTargets = pageTargets; } final List rest = TargetMapper.toResponse(rolloutGroupTargets.getContent()); - return new ResponseEntity<>(new TargetPagedList(rest, rolloutGroupTargets.getTotalElements()), HttpStatus.OK); + return new ResponseEntity<>(new PagedList(rest, rolloutGroupTargets.getTotalElements()), + HttpStatus.OK); } private Rollout findRolloutOrThrowException(final Long rolloutId) { 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 1a3ce603f..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 @@ -26,18 +26,13 @@ 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.artifact.ArtifactsRest; import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRequestBodyPost; import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModulesRest; /** * A mapper which maps repository model to RESTful model representation and * back. * - * - * - * */ public final class SoftwareModuleMapper { private SoftwareModuleMapper() { @@ -102,8 +97,8 @@ public final class SoftwareModuleMapper { return mappedList; } - static SoftwareModulesRest toResponseSoftwareModules(final Iterable softwareModules) { - final SoftwareModulesRest response = new SoftwareModulesRest(); + static List toResponseSoftwareModules(final Iterable softwareModules) { + final List response = new ArrayList<>(); for (final SoftwareModule softwareModule : softwareModules) { response.add(toResponse(softwareModule)); } @@ -192,8 +187,8 @@ public final class SoftwareModuleMapper { return artifactRest; } - static ArtifactsRest artifactsToResponse(final List artifacts) { - final ArtifactsRest mappedList = new ArtifactsRest(); + static List artifactsToResponse(final List artifacts) { + final List mappedList = new ArrayList<>(); if (artifacts != null) { for (final Artifact artifact : artifacts) { 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 dfbac1a6f..e165fca20 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 @@ -24,13 +24,11 @@ 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.MetadataRestPageList; +import org.eclipse.hawkbit.rest.resource.model.PagedList; import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactRest; -import org.eclipse.hawkbit.rest.resource.model.artifact.ArtifactsRest; -import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModulePagedList; 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.rest.resource.model.softwaremodule.SoftwareModulesRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -93,7 +91,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } @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); @@ -120,7 +118,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } @Override - public ResponseEntity getSoftwareModules( + 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, @@ -144,7 +142,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } final List rest = SoftwareModuleMapper.toResponse(findModulesAll.getContent()); - return new ResponseEntity<>(new SoftwareModulePagedList(rest, countModulesAll), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override @@ -155,7 +153,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } @Override - public ResponseEntity createSoftwareModules( + public ResponseEntity> createSoftwareModules( @RequestBody final List softwareModules) { LOG.debug("creating {} softwareModules", softwareModules.size()); final Iterable createdSoftwareModules = softwareManagement diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java index bd2c5f1c1..b6525948c 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleTypeMapper.java @@ -19,7 +19,6 @@ 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; -import org.eclipse.hawkbit.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; /** * A mapper which maps repository model to RESTful model representation and @@ -50,8 +49,8 @@ final class SoftwareModuleTypeMapper { smsRest.getMaxAssignments()); } - static SoftwareModuleTypesRest toTypesResponse(final List types) { - final SoftwareModuleTypesRest response = new SoftwareModuleTypesRest(); + static List toTypesResponse(final List types) { + final List response = new ArrayList<>(); for (final SoftwareModuleType softwareModule : types) { response.add(toResponse(softwareModule)); } 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 4259dcc90..7dda79690 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 @@ -18,11 +18,10 @@ 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.softwaremoduletype.SoftwareModuleTypePagedList; +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.rest.resource.model.softwaremoduletype.SoftwareModuleTypesRest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -43,8 +42,8 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { private SoftwareManagement softwareManagement; @Override - public ResponseEntity getTypes(final int pagingOffsetParam, final int pagingLimitParam, - final String sortParam, final String rsqlParam) { + public ResponseEntity> getTypes(final int pagingOffsetParam, + final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -65,7 +64,7 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { final List rest = SoftwareModuleTypeMapper .toListResponse(findModuleTypessAll.getContent()); - return new ResponseEntity<>(new SoftwareModuleTypePagedList(rest, countModulesAll), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, countModulesAll), HttpStatus.OK); } @Override @@ -99,7 +98,7 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { } @Override - public ResponseEntity createSoftwareModuleTypes( + public ResponseEntity> createSoftwareModuleTypes( final List softwareModuleTypes) { final List createdSoftwareModules = this.softwareManagement diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java index b6c6c1539..0cb3c72a3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java @@ -27,18 +27,16 @@ 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.action.ActionStatussRest; import org.eclipse.hawkbit.rest.resource.model.action.ActionsRest; import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetsRest; /** * A mapper which maps repository model to RESTful model representation and * back. * */ -final public class TargetMapper { +public final class TargetMapper { private TargetMapper() { // Utility class @@ -64,7 +62,7 @@ final public class TargetMapper { } /** - * Add the pollstatus to a target response. + * Add the poll status to a target response. * * @param target * the target @@ -91,8 +89,8 @@ final public class TargetMapper { * the targets * @return the response */ - public static TargetsRest toResponseWithLinksAndPollStatus(final Iterable targets) { - final TargetsRest mappedList = new TargetsRest(); + 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); @@ -111,8 +109,8 @@ final public class TargetMapper { * list of targets * @return the response */ - public static TargetsRest toResponse(final Iterable targets) { - final TargetsRest mappedList = new TargetsRest(); + 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); @@ -184,12 +182,12 @@ final public class TargetMapper { return target; } - static ActionStatussRest toActionStatusRestResponse(final Action action, final List actionStatus) { - final ActionStatussRest mappedList = new ActionStatussRest(); + static List toActionStatusRestResponse(final List actionStatus) { + final List mappedList = new ArrayList<>(); if (actionStatus != null) { for (final ActionStatus status : actionStatus) { - final ActionStatusRest response = toResponse(action, status); + final ActionStatusRest response = toResponse(status); mappedList.add(response); } } @@ -293,7 +291,7 @@ final public class TargetMapper { return result; } - private static ActionStatusRest toResponse(final Action action, final ActionStatus actionStatus) { + private static ActionStatusRest toResponse(final ActionStatus actionStatus) { final ActionStatusRest result = new ActionStatusRest(); result.setMessages(actionStatus.getMessages()); 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 faa31a7cc..3c79c936c 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 @@ -29,16 +29,14 @@ 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.action.ActionPagedList; +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.ActionStatusPagedList; +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.TargetPagedList; import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetsRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -77,7 +75,7 @@ public class TargetResource implements TargetRestApi { } @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); @@ -98,11 +96,11 @@ public class TargetResource implements TargetRestApi { } final List rest = TargetMapper.toResponse(findTargetsAll.getContent()); - return new ResponseEntity<>(new TargetPagedList(rest, countTargetsAll), HttpStatus.OK); + 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)); LOG.debug("{} targets created, return status {}", targets.size(), HttpStatus.CREATED); @@ -147,7 +145,7 @@ public class TargetResource implements TargetRestApi { } @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); @@ -169,7 +167,7 @@ public class TargetResource implements TargetRestApi { } return new ResponseEntity<>( - new ActionPagedList(TargetMapper.toResponse(targetId, activeActions.getContent()), totalActionCount), + new PagedList<>(TargetMapper.toResponse(targetId, activeActions.getContent()), totalActionCount), HttpStatus.OK); } @@ -220,7 +218,7 @@ public class TargetResource implements TargetRestApi { } @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); @@ -238,10 +236,8 @@ public class TargetResource implements TargetRestApi { final Page statusList = this.deploymentManagement.findActionStatusByAction( new OffsetBasedPageRequest(sanitizedOffsetParam, sanitizedLimitParam, sorting), action, true); - return new ResponseEntity<>( - new ActionStatusPagedList(TargetMapper.toActionStatusRestResponse(action, statusList.getContent()), - statusList.getTotalElements()), - HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(TargetMapper.toActionStatusRestResponse(statusList.getContent()), + statusList.getTotalElements()), HttpStatus.OK); } 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 76209a958..0e4bf9ec9 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 @@ -26,7 +26,7 @@ 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.TagsRest; import org.eclipse.hawkbit.rest.resource.model.tag.TargetTagAssigmentResultRest; -import org.eclipse.hawkbit.rest.resource.model.target.TargetsRest; +import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -118,7 +118,7 @@ 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()), HttpStatus.OK); @@ -140,7 +140,7 @@ public class TargetTagResource implements TargetTagRestApi { } @Override - public ResponseEntity assignTargets(final Long targetTagId, + public ResponseEntity> assignTargets(final Long targetTagId, final List assignedTargetRequestBodies) { LOG.debug("Assign Targets {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); From 1cb7519ace523844a72854944f305cb5c45eaf5a Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 23 Mar 2016 16:17:53 +0100 Subject: [PATCH 013/344] add security and filters for anonymous download via http and amqp requests Signed-off-by: Michael Hirsch --- .../SecurityManagedConfiguration.java | 20 ++++-- .../amqp/AmqpControllerAuthentfication.java | 7 ++ .../amqp/AmqpMessageHandlerService.java | 16 ++--- .../AmqpControllerAuthenticationTest.java | 7 ++ .../dmf/json/model/TenantSecurityToken.java | 62 ++++++++++++++--- ...actHttpControllerAuthenticationFilter.java | 26 ++++--- ...reAuthenticateAnonymousDownloadFilter.java | 47 +++++++++++++ .../repository/ArtifactManagement.java | 2 +- .../im/authentication/SpPermission.java | 18 ++++- ...llerPreAuthenticatedAnonymousDownload.java | 69 +++++++++++++++++++ ...rollerPreAuthenticatedAnonymousFilter.java | 47 +++++++++++++ ...okenSourceTrustAuthenticationProvider.java | 1 + .../security/PreAuthenficationFilter.java | 17 +++++ 13 files changed, 304 insertions(+), 35 deletions(-) create mode 100644 hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpControllerPreAuthenticateAnonymousDownloadFilter.java create mode 100644 hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownload.java create mode 100644 hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousFilter.java 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 24e9667c2..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 @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.autoconfigure.security; import java.io.IOException; import java.net.URI; -import java.util.Collections; import javax.annotation.PostConstruct; import javax.servlet.Filter; @@ -35,6 +34,7 @@ import org.eclipse.hawkbit.security.ControllerTenantAwareAuthenticationDetailsSo import org.eclipse.hawkbit.security.DdiSecurityProperties; import org.eclipse.hawkbit.security.DosFilter; import org.eclipse.hawkbit.security.HawkbitSecurityProperties; +import org.eclipse.hawkbit.security.HttpControllerPreAuthenticateAnonymousDownloadFilter; import org.eclipse.hawkbit.security.HttpControllerPreAuthenticateSecurityTokenFilter; import org.eclipse.hawkbit.security.HttpControllerPreAuthenticatedGatewaySecurityTokenFilter; import org.eclipse.hawkbit.security.HttpControllerPreAuthenticatedSecurityHeaderFilter; @@ -83,6 +83,8 @@ 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. * @@ -147,6 +149,12 @@ public class SecurityManagedConfiguration { gatewaySecurityTokenFilter.setCheckForPrincipalChanges(true); gatewaySecurityTokenFilter.setAuthenticationDetailsSource(authenticationDetailsSource); + final HttpControllerPreAuthenticateAnonymousDownloadFilter controllerAnonymousDownloadFilter = new HttpControllerPreAuthenticateAnonymousDownloadFilter( + tenantConfigurationManagement, tenantAware, systemSecurityContext); + controllerAnonymousDownloadFilter.setAuthenticationManager(authenticationManager()); + controllerAnonymousDownloadFilter.setCheckForPrincipalChanges(true); + controllerAnonymousDownloadFilter.setAuthenticationDetailsSource(authenticationDetailsSource); + HttpSecurity httpSec = http.csrf().disable().headers() .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.DENY)).contentTypeOptions() .xssProtection().httpStrictTransportSecurity().and(); @@ -159,15 +167,17 @@ public class SecurityManagedConfiguration { LOG.info( "******************\n** Anonymous controller security enabled, should only use for developing purposes **\n******************"); final AnonymousAuthenticationFilter anoymousFilter = new AnonymousAuthenticationFilter( - "controllerAnonymousFilter", "anonymous", Collections.singletonList( - new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_ROLE_ANONYMOUS))); + "controllerAnonymousFilter", "anonymous", + Lists.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).antMatcher("/*/controller/**").anonymous().disable() - .authorizeRequests().anyRequest().authenticated().and().exceptionHandling() + .addFilter(gatewaySecurityTokenFilter).addFilter(controllerAnonymousDownloadFilter) + .antMatcher("/*/controller/**").anonymous().disable().authorizeRequests().anyRequest() + .authenticated().and().exceptionHandling() .authenticationEntryPoint((request, response, authException) -> response .setStatus(HttpStatus.UNAUTHORIZED.value())) .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java index 3fa7979b9..9d120c17b 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java @@ -19,6 +19,8 @@ import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.security.CoapAnonymousPreAuthenticatedFilter; import org.eclipse.hawkbit.security.ControllerPreAuthenticateSecurityTokenFilter; +import org.eclipse.hawkbit.security.ControllerPreAuthenticatedAnonymousDownload; +import org.eclipse.hawkbit.security.ControllerPreAuthenticatedAnonymousFilter; import org.eclipse.hawkbit.security.ControllerPreAuthenticatedGatewaySecurityTokenFilter; import org.eclipse.hawkbit.security.ControllerPreAuthenticatedSecurityHeaderFilter; import org.eclipse.hawkbit.security.DdiSecurityProperties; @@ -90,6 +92,11 @@ public class AmqpControllerAuthentfication { tenantConfigurationManagement, controllerManagement, tenantAware, systemSecurityContext); filterChain.add(securityTokenFilter); + final ControllerPreAuthenticatedAnonymousDownload anonymousDownloadFilter = new ControllerPreAuthenticatedAnonymousDownload( + tenantConfigurationManagement, tenantAware, systemSecurityContext); + filterChain.add(anonymousDownloadFilter); + + filterChain.add(new ControllerPreAuthenticatedAnonymousFilter(ddiSecruityProperties)); filterChain.add(new CoapAnonymousPreAuthenticatedFilter()); } 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 71b8f8db8..c5fff29ad 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 @@ -27,9 +27,9 @@ import org.eclipse.hawkbit.dmf.amqp.api.MessageType; import org.eclipse.hawkbit.dmf.json.model.ActionUpdateStatus; import org.eclipse.hawkbit.dmf.json.model.Artifact; 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.dmf.json.model.DownloadResponse; import org.eclipse.hawkbit.eventbus.event.TargetAssignDistributionSetEvent; import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; @@ -158,8 +158,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { private Message handleAuthentifiactionMessage(final Message message) { final DownloadResponse authentificationResponse = new DownloadResponse(); final MessageProperties messageProperties = message.getMessageProperties(); - final TenantSecurityToken secruityToken = convertMessage(message, - TenantSecurityToken.class); + final TenantSecurityToken secruityToken = convertMessage(message, TenantSecurityToken.class); final FileResource fileResource = secruityToken.getFileResource(); try { SecurityContextHolder.getContext().setAuthentication(authenticationManager.doAuthenticate(secruityToken)); @@ -221,12 +220,11 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } else if (fileResource.getFilename() != null) { localArtifact = artifactManagement.findLocalArtifactByFilename(fileResource.getFilename()).stream() .findFirst().orElse(null); - } else if (fileResource.getArtifactId() != null) { - final org.eclipse.hawkbit.repository.model.Artifact artifact = artifactManagement - .findArtifact(fileResource.getArtifactId()); - if (artifact instanceof LocalArtifact) { - localArtifact = (LocalArtifact) artifact; - } + } else if (fileResource.getSoftwareModuleFilenameResource() != null) { + localArtifact = artifactManagement + .findByFilenameAndSoftwareModule(fileResource.getSoftwareModuleFilenameResource().getFilename(), + fileResource.getSoftwareModuleFilenameResource().getSoftwareModuleId()) + .stream().findFirst().orElse(null); } return localArtifact; } 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 d7ab805ed..881260579 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 @@ -26,6 +26,7 @@ import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.security.DdiSecurityProperties; +import org.eclipse.hawkbit.security.DdiSecurityProperties.Authentication.Anonymous; import org.eclipse.hawkbit.security.DdiSecurityProperties.Rp; import org.eclipse.hawkbit.security.SecurityContextTenantAware; import org.eclipse.hawkbit.security.SystemSecurityContext; @@ -80,8 +81,14 @@ public class AmqpControllerAuthenticationTest { final DdiSecurityProperties secruityProperties = mock(DdiSecurityProperties.class); final Rp rp = mock(Rp.class); + final org.eclipse.hawkbit.security.DdiSecurityProperties.Authentication ddiAuthentication = mock( + org.eclipse.hawkbit.security.DdiSecurityProperties.Authentication.class); + final Anonymous anonymous = mock(Anonymous.class); when(secruityProperties.getRp()).thenReturn(rp); when(rp.getSslIssuerHashHeader()).thenReturn("X-Ssl-Issuer-Hash-%d"); + when(secruityProperties.getAuthentication()).thenReturn(ddiAuthentication); + when(ddiAuthentication.getAnonymous()).thenReturn(anonymous); + when(anonymous.isEnabled()).thenReturn(false); authenticationManager.setSecruityProperties(secruityProperties); tenantConfigurationManagement = mock(TenantConfigurationManagement.class); diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java index 9e07d3fc4..154ad5158 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java @@ -103,7 +103,7 @@ public class TenantSecurityToken { @JsonProperty(required = false) private String filename; @JsonProperty(required = false) - private Long artifactId; + private SoftwareModuleFilenameResource softwareModuleFilenameResource; public String getSha1() { return sha1; @@ -121,12 +121,13 @@ public class TenantSecurityToken { this.filename = filename; } - public Long getArtifactId() { - return artifactId; + public SoftwareModuleFilenameResource getSoftwareModuleFilenameResource() { + return softwareModuleFilenameResource; } - public void setArtifactId(final Long artifactId) { - this.artifactId = artifactId; + public void setSoftwareModuleFilenameResource( + final SoftwareModuleFilenameResource softwareModuleFilenameResource) { + this.softwareModuleFilenameResource = softwareModuleFilenameResource; } /** @@ -156,15 +157,19 @@ public class TenantSecurityToken { } /** - * factory method to create a file resource for an artifactId lookup. + * factory method to create a file resource for an softwaremodule + + * filename lookup, because an filename is not globally unique but + * within a softwaremodule. * - * @param artifactId - * the artifactId of the file to obtain + * @param softwareModuleId + * the ID of the software module which contains the artifact + * @param filename + * the name of file to obtain within the software module * @return the {@link FileResource} with artifactId set */ - public static FileResource artifactId(final Long artifactId) { + public static FileResource softwareModuleFilename(final Long softwareModuleId, final String filename) { final FileResource resource = new FileResource(); - resource.artifactId = artifactId; + resource.softwareModuleFilenameResource = new SoftwareModuleFilenameResource(softwareModuleId, filename); return resource; } @@ -172,5 +177,42 @@ public class TenantSecurityToken { public String toString() { return "FileResource [sha1=" + sha1 + ", filename=" + filename + "]"; } + + /** + * Inner class which holds the pointer to an artifact based on the + * softwaremoduleId and the filename. + */ + @JsonInclude(Include.NON_NULL) + @JsonIgnoreProperties(ignoreUnknown = true) + public static class SoftwareModuleFilenameResource { + @JsonProperty(required = false) + private final Long softwareModuleId; + @JsonProperty(required = false) + private final String filename; + + /** + * Constructor. + * + * @param softwareModuleId + * the ID of the softwaremodule + * @param filename + * the name of the file of the artifact within the + * softwaremodule + */ + @JsonCreator + public SoftwareModuleFilenameResource(@JsonProperty("softwareModuleId") final Long softwareModuleId, + @JsonProperty("filename") final String filename) { + this.softwareModuleId = softwareModuleId; + this.filename = filename; + } + + public Long getSoftwareModuleId() { + return softwareModuleId; + } + + public String getFilename() { + return filename; + } + } } } diff --git a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java index ace5bc834..0e67489ea 100644 --- a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java +++ b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/AbstractHttpControllerAuthenticationFilter.java @@ -9,6 +9,8 @@ package org.eclipse.hawkbit.security; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; import java.util.Map; import javax.servlet.FilterChain; @@ -16,6 +18,7 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken.FileResource; @@ -23,8 +26,11 @@ import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter; +import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.util.AntPathMatcher; import com.google.common.collect.Iterators; @@ -80,14 +86,6 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac pathExtractor = new AntPathMatcher(); } - /* - * (non-Javadoc) - * - * @see org.springframework.security.web.authentication.preauth. - * AbstractPreAuthenticatedProcessingFilter - * #doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, - * javax.servlet.FilterChain) - */ @Override public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { @@ -113,6 +111,18 @@ public abstract class AbstractHttpControllerAuthenticationFilter extends Abstrac protected abstract PreAuthenficationFilter createControllerAuthenticationFilter(); + @Override + protected void successfulAuthentication(final HttpServletRequest request, final HttpServletResponse response, + final Authentication authResult) { + final Collection authorities = new ArrayList<>(); + authorities.addAll(authResult.getAuthorities()); + authorities.addAll(abstractControllerAuthenticationFilter.getSuccessfulAuthenticationAuthorities()); + final PreAuthenticatedAuthenticationToken authTokenWithGrantedAuthorities = new PreAuthenticatedAuthenticationToken( + authResult.getPrincipal(), authResult.getCredentials(), authorities); + authTokenWithGrantedAuthorities.setDetails(authResult.getDetails()); + super.successfulAuthentication(request, response, authTokenWithGrantedAuthorities); + } + /** * Extracts tenant and controllerId from the request URI as path variables. * diff --git a/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpControllerPreAuthenticateAnonymousDownloadFilter.java b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpControllerPreAuthenticateAnonymousDownloadFilter.java new file mode 100644 index 000000000..40fd1e555 --- /dev/null +++ b/hawkbit-http-security/src/main/java/org/eclipse/hawkbit/security/HttpControllerPreAuthenticateAnonymousDownloadFilter.java @@ -0,0 +1,47 @@ +/** + * 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.security; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.tenancy.TenantAware; + +/** + * An pre-authenticated processing filter which add the + * {@link SpringEvalExpressions#CONTROLLER_DOWNLOAD_ROLE_ANONYMOUS} to the + * security context in case the anonymous download is allowed through + * configuration. + */ +public class HttpControllerPreAuthenticateAnonymousDownloadFilter extends AbstractHttpControllerAuthenticationFilter { + + /** + * Constructor. + * + * @param tenantConfigurationManagement + * the system management service to retrieve configuration + * properties + * @param tenantAware + * the tenant aware service to get configuration for the specific + * tenant + * @param systemSecurityContext + * the system security context + */ + public HttpControllerPreAuthenticateAnonymousDownloadFilter( + final TenantConfigurationManagement tenantConfigurationManagement, final TenantAware tenantAware, + final SystemSecurityContext systemSecurityContext) { + super(tenantConfigurationManagement, tenantAware, systemSecurityContext); + } + + @Override + protected PreAuthenficationFilter createControllerAuthenticationFilter() { + return new ControllerPreAuthenticatedAnonymousDownload(tenantConfigurationManagement, tenantAware, + systemSecurityContext); + } + +} 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 122d7b881..145287fbf 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 @@ -404,7 +404,7 @@ public class ArtifactManagement { * if file could not be found in store */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DOWNLOAD_ARTIFACT + SpringEvalExpressions.HAS_AUTH_OR - + SpringEvalExpressions.IS_CONTROLLER) + + SpringEvalExpressions.HAS_CONTROLLER_DOWNLOAD) public DbArtifact loadLocalArtifactBinary(@NotNull final LocalArtifact artifact) { final DbArtifact result = artifactRepository.getArtifactBySha1(artifact.getGridFsFileName()); if (result == null) { 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 5d4ab9283..2e222d879 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 @@ -182,6 +182,12 @@ public final class SpPermission { */ public static final String CONTROLLER_ROLE_ANONYMOUS = "ROLE_CONTROLLER_ANONYMOUS"; + /** + * The role which contains in the spring security context in case an + * controller is authenticated to download artifacts. + */ + public static final String CONTROLLER_DOWNLOAD_ROLE = "ROLE_CONTROLLER_DOWNLOAD"; + /** * The role which contains the spring security context in case the * system is executing code which is necessary to be privileged. @@ -275,8 +281,16 @@ public final class SpPermission { * context contains the anoynmous role or the controller specific role * {@link SpPermission#CONTROLLER_ROLE}. */ - public static final String IS_CONTROLLER = "hasAnyRole('" + CONTROLLER_ROLE_ANONYMOUS + "', '" - + CONTROLLER_ROLE + "')"; + public static final String IS_CONTROLLER = "hasAnyRole('" + CONTROLLER_ROLE_ANONYMOUS + "', '" + CONTROLLER_ROLE + + "')"; + + /** + * 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}. + */ + 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 diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownload.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownload.java new file mode 100644 index 000000000..b4457bfcf --- /dev/null +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownload.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.security; + +import java.util.Collection; + +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.tenancy.TenantAware; +import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +import com.google.common.collect.Lists; + +/** + * An pre-authenticated processing filter which add the + * {@link SpringEvalExpressions#CONTROLLER_DOWNLOAD_ROLE_ANONYMOUS} to the + * security context in case the anonymous download is allowed through + * configuration. + */ +public class ControllerPreAuthenticatedAnonymousDownload extends AbstractControllerAuthenticationFilter { + + /** + * Constructor. + * + * @param tenantConfigurationManagement + * the tenant management service to retrieve configuration + * properties + * @param tenantAware + * the tenant aware service to get configuration for the specific + * tenant + * @param systemSecurityContext + * the system security context to get access to tenant + * configuration + */ + public ControllerPreAuthenticatedAnonymousDownload( + final TenantConfigurationManagement tenantConfigurationManagement, final TenantAware tenantAware, + final SystemSecurityContext systemSecurityContext) { + super(tenantConfigurationManagement, tenantAware, systemSecurityContext); + } + + @Override + public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { + return new HeaderAuthentication(secruityToken.getControllerId(), secruityToken.getControllerId()); + } + + @Override + public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { + return new HeaderAuthentication(secruityToken.getControllerId(), secruityToken.getControllerId()); + } + + @Override + protected TenantConfigurationKey getTenantConfigurationKey() { + return TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED; + } + + @Override + public Collection getSuccessfulAuthenticationAuthorities() { + return Lists.newArrayList(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_DOWNLOAD_ROLE)); + } +} diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousFilter.java new file mode 100644 index 000000000..cf55c47fb --- /dev/null +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousFilter.java @@ -0,0 +1,47 @@ +/** + * 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.security; + +import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; + +/** + * An anonymous controller filter which is only enabled in case of anonymous + * access is granted. This should only be for development purposes. + * + * @see DdiSecurityProperties + */ +public class ControllerPreAuthenticatedAnonymousFilter implements PreAuthenficationFilter { + + private final DdiSecurityProperties ddiSecurityConfiguration; + + /** + * @param ddiSecurityConfiguration + * the security configuration which holds the configuration if + * anonymous is enabled or not + */ + public ControllerPreAuthenticatedAnonymousFilter(final DdiSecurityProperties ddiSecurityConfiguration) { + this.ddiSecurityConfiguration = ddiSecurityConfiguration; + } + + @Override + public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { + return new HeaderAuthentication(secruityToken.getControllerId(), secruityToken.getControllerId()); + } + + @Override + public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { + return new HeaderAuthentication(secruityToken.getControllerId(), secruityToken.getControllerId()); + } + + @Override + public boolean isEnable(final TenantSecurityToken secruityToken) { + return ddiSecurityConfiguration.getAuthentication().getAnonymous().isEnabled(); + } + +} diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java index ca38404f7..b81b76e5c 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java @@ -109,6 +109,7 @@ public class PreAuthTokenSourceTrustAuthenticationProvider implements Authentica if (successAuthentication) { final Collection controllerAuthorities = new ArrayList<>(); controllerAuthorities.add(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_ROLE)); + controllerAuthorities.add(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_DOWNLOAD_ROLE)); final PreAuthenticatedAuthenticationToken successToken = new PreAuthenticatedAuthenticationToken(principal, credentials, controllerAuthorities); successToken.setDetails(tokenDetails); diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java index 8981fa9af..5e4aacfa9 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthenficationFilter.java @@ -8,7 +8,12 @@ */ package org.eclipse.hawkbit.security; +import java.util.Collection; +import java.util.Collections; + import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; /** * Interface for Pre Authenfication. @@ -45,4 +50,16 @@ public interface PreAuthenficationFilter { */ HeaderAuthentication getPreAuthenticatedCredentials(TenantSecurityToken secruityToken); + /** + * Allows to add additional authorities to the successful authenticated + * token. + * + * @return the authorities granted to the principal, or an empty collection + * if the token has not been authenticated. Never null. + * @see Authentication#getAuthorities() + */ + default Collection getSuccessfulAuthenticationAuthorities() { + return Collections.emptyList(); + }; + } From 771516988946924c2a0b6746cc6355b8440b8fc3 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 24 Mar 2016 11:02:28 +0100 Subject: [PATCH 014/344] Added id for checkbox component for selenium tests Signed-off-by: Jonathan Philip Knoblauch --- .../DownloadAnonymousConfigurationView.java | 3 +++ .../hawkbit/ui/utils/SPUIComponetIdProvider.java | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java index fa441476d..e008e03f2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java @@ -15,6 +15,7 @@ import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; 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.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -80,6 +81,8 @@ public class DownloadAnonymousConfigurationView extends BaseConfigurationView downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); downloadAnonymousCheckBox.addValueChangeListener(event -> configurationHasChanged()); + downloadAnonymousCheckBox.setId(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_ANONYMOUS_DOWNLOAD_CHECKBOX); + gridLayout.addComponent(downloadAnonymousCheckBox); final Label configurationLabel = SPUIComponentProvider.getLabel(i18n.get("enonymous.download.label"), 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 163be34c4..48e501e1d 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,11 @@ public final class SPUIComponetIdProvider { */ public static final String SYSTEM_CONFIGURATION_CANCEL = "system.configuration.cancel"; + /** + * Id of the anonymous download checkbox. + */ + public static final String SYSTEM_CONFIGURATION_ANONYMOUS_DOWNLOAD_CHECKBOX = "system.configuration.anonymous.download.checkbox"; + /** * Id of maximize/minimize icon of table - Software module table. */ @@ -827,7 +832,7 @@ public final class SPUIComponetIdProvider { * Rollout status label id. */ public static final String ROLLOUT_STATUS_LABEL_ID = "rollout.status.id"; - + /** * Rollout group status label id. */ @@ -867,12 +872,12 @@ public final class SPUIComponetIdProvider { * Rollout group targets count message label. */ public static final String ROLLOUT_GROUP_TARGET_LABEL = "rollout.group.target.label"; - + /** * Action confirmation popup id. */ public static final String CONFIRMATION_POPUP_ID = "action.confirmation.popup.id"; - + /** * Validation status icon . */ From 7e75b79cbec808bf3cad9b5a6883427e8880468d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 12:00:07 +0100 Subject: [PATCH 015/344] Add a event provider which hold the repository events which are provided by the ui. fix the performance issue. Issue was the selection of targets. The table needs very long to calculate the scroll position. Signed-off-by: SirWayne --- .../autoconfigure/ui/UIAutoConfiguration.java | 15 ++++- .../hawkbit/repository/RolloutScheduler.java | 42 +++++++------- .../org/eclipse/hawkbit/ui/EventProvider.java | 16 ------ .../hawkbit/ui/HawkbitEventProvider.java | 37 +++++++----- .../eclipse/hawkbit/ui/UIEventProvider.java | 56 +++++++++++++++++++ .../management/targettable/TargetTable.java | 41 ++------------ .../ui/push/DelayedEventBusPushStrategy.java | 43 +++----------- 7 files changed, 124 insertions(+), 126 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java index ff73eff7b..7b3302533 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java @@ -9,6 +9,8 @@ package org.eclipse.hawkbit.autoconfigure.ui; import org.eclipse.hawkbit.DistributedResourceBundleMessageSource; +import org.eclipse.hawkbit.ui.HawkbitEventProvider; +import org.eclipse.hawkbit.ui.UIEventProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.vaadin.spring.annotation.EnableVaadinExtensions; @@ -17,9 +19,6 @@ import org.vaadin.spring.security.annotation.EnableVaadinSecurity; /** * The hawkbit-ui autoconfiguration. - * - * - * */ @Configuration @EnableVaadinSecurity @@ -37,4 +36,14 @@ public class UIAutoConfiguration { return new DistributedResourceBundleMessageSource(); } + /** + * A event provider bean which hold the supported events for the UI. + * + * @return the provider bean + */ + @Bean + public UIEventProvider eventProvider() { + return new HawkbitEventProvider(); + } + } 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..9b45e661f 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 @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.repository; -import java.util.List; - import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; @@ -56,25 +54,25 @@ 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."); - // run this code in system code privileged to have the necessary - // permission to query and create entities. - systemSecurityContext.runAsSystem(() -> { - // workaround eclipselink that is currently not possible to - // execute a query without multitenancy if MultiTenant - // annotation is used. - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458. So - // 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()); - for (final String tenant : tenants) { - tenantAware.runAsTenant(tenant, () -> { - rolloutManagement.checkRunningRollouts(rolloutProperties.getScheduler().getFixedDelay()); - return null; - }); - } - return null; - }); + // 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(() -> { + // // workaround eclipselink that is currently not possible to + // // execute a query without multitenancy if MultiTenant + // // annotation is used. + // // https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458. So + // // 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()); + // for (final String tenant : tenants) { + // tenantAware.runAsTenant(tenant, () -> { + // rolloutManagement.checkRunningRollouts(rolloutProperties.getScheduler().getFixedDelay()); + // return null; + // }); + // } + // return null; + // }); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java deleted file mode 100644 index 0ae83af01..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/EventProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. - */ -package org.eclipse.hawkbit.ui; - -import java.util.Set; - -/** - * - */ -public interface EventProvider { - - Set> getSingleEvents(); - - Set> getBulkEvents(); -} 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 8600b8e20..8afb46ba7 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 @@ -3,11 +3,13 @@ */ 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; @@ -15,29 +17,38 @@ import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; -import com.google.common.collect.Sets; - /** - * @author Dennis Melzer - * + * The default hawkbit event provider. */ -public class HawkbitEventProvider implements EventProvider { +public class HawkbitEventProvider implements UIEventProvider { - private static final Set> SINGLE_EVENTS = Sets.newHashSet(TargetTagCreatedBulkEvent.class, - DistributionSetTagCreatedBulkEvent.class, DistributionSetTagDeletedEvent.class, - DistributionSetTagUpdateEvent.class, RolloutGroupChangeEvent.class, RolloutChangeEvent.class); + private static final Set> SINGLE_EVENTS = new HashSet<>(); - private static final Set> BULD_EVENTS = Sets.newHashSet(TargetCreatedEvent.class, - TargetInfoUpdateEvent.class, TargetDeletedEvent.class); + static { + SINGLE_EVENTS.add(TargetTagCreatedBulkEvent.class); + SINGLE_EVENTS.add(DistributionSetTagCreatedBulkEvent.class); + SINGLE_EVENTS.add(DistributionSetTagDeletedEvent.class); + SINGLE_EVENTS.add(DistributionSetTagUpdateEvent.class); + SINGLE_EVENTS.add(RolloutGroupChangeEvent.class); + SINGLE_EVENTS.add(RolloutChangeEvent.class); + } + + private static final Set> BULK_EVENTS = new HashSet<>(); + + static { + BULK_EVENTS.add(TargetCreatedEvent.class); + BULK_EVENTS.add(TargetInfoUpdateEvent.class); + BULK_EVENTS.add(TargetDeletedEvent.class); + } @Override - public Set> getSingleEvents() { + public Set> getSingleEvents() { return SINGLE_EVENTS; } @Override - public Set> getBulkEvents() { - return BULD_EVENTS; + public Set> getBulkEvents() { + return BULK_EVENTS; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java new file mode 100644 index 000000000..65f907d94 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.ui; + +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import org.eclipse.hawkbit.eventbus.event.Event; + +/** + * The UI event provider hold all supported repository events which will + * delegated to the UI. A event type can delegated as single event or bulk + * event. Bulk event means, that all events from one type is collected by the + * provider. The delegater and delegated as a list of this events. + */ +public interface UIEventProvider { + + /** + * Return all supported repository single event types. All events which this + * type are delegated to the UI as single event. + * + * @return list of provided event types. Should not be null + */ + default Set> getSingleEvents() { + return Collections.emptySet(); + } + + /** + * Return all supported repository bulk event types. All events which this + * type are delegated to the UI as a list. This list contains all collected + * events from one type. + * + * @return list of provided bulk event types. Should not be null + */ + default Set> getBulkEvents() { + return Collections.emptySet(); + } + + /** + * Return all filtered bulk event types by the given events. The default + * maps the events by class. + * + * @param allEvents + * the events + * @return list of provided bulk event types which are filtered. Should not + * be null + */ + default Set> getFilteredBulkEventsType(final List allEvents) { + return allEvents.stream().map(Event::getClass).filter(eventClass -> getBulkEvents().contains(eventClass)) + .collect(Collectors.toSet()); + } + +} 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 b8b59cb91..66417986f 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 @@ -104,12 +104,11 @@ import com.vaadin.ui.themes.ValoTheme; @ViewScope public class TargetTable extends AbstractTable implements Handler { + private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class); private static final String TARGET_PINNED = "targetPinned"; private static final long serialVersionUID = -2300392868806614568L; - private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class); - private static final int PROPERTY_DEPT = 3; private static final String ITEMID = "itemId"; private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; @@ -326,39 +325,20 @@ public class TargetTable extends AbstractTable implements Handler { (source, itemId, columnId) -> getTagetPollTime(itemId)); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable# - * isFirstRowSelectedOnLoad () - */ @Override protected boolean isFirstRowSelectedOnLoad() { return !managementUIState.getSelectedTargetIdName().isPresent() || managementUIState.getSelectedTargetIdName().get().isEmpty(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getItemIdToSelect() - */ @Override protected Object getItemIdToSelect() { if (managementUIState.getSelectedTargetIdName().isPresent()) { - LOG.info("****** getItemIdToSelect *********"); - // setCurrentPageFirstItemId(managementUIState.getLastSelectedTargetIdName()); return managementUIState.getSelectedTargetIdName().get(); } return null; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#onValueChange() - */ @Override protected void onValueChange() { eventBus.publish(this, DragEvent.HIDE_DROP_HINT); @@ -378,23 +358,11 @@ public class TargetTable extends AbstractTable implements Handler { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#isMaximized() - */ @Override protected boolean isMaximized() { return managementUIState.isTargetTableMaximized(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getTableVisibleColumns - * () - */ @Override protected List getTableVisibleColumns() { final List columnList = new ArrayList<>(); @@ -451,14 +419,13 @@ public class TargetTable extends AbstractTable implements Handler { } else { shouldRefreshTargets = true; } - unselect(targetIdName); } + if (shouldRefreshTargets) { refreshOnDelete(); - } else { - targetContainer.commit(); - selectRow(); } + + unSelectAll(); } private void refreshOnDelete() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java index 5ac9362fe..4d267167e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/push/DelayedEventBusPushStrategy.java @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.push; -import java.time.Instant; import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -21,9 +20,8 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import org.eclipse.hawkbit.eventbus.event.EntityEvent; -import org.eclipse.hawkbit.eventbus.event.Event; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; -import org.eclipse.hawkbit.ui.EventProvider; +import org.eclipse.hawkbit.ui.UIEventProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.context.SecurityContext; @@ -66,7 +64,7 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { private ScheduledFuture jobHandle; - private final EventProvider eventProvider; + private final UIEventProvider eventProvider; /** * Constructor. @@ -78,7 +76,7 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { * back-end */ public DelayedEventBusPushStrategy(final SessionEventBus eventBus, - final com.google.common.eventbus.EventBus systemEventBus, final EventProvider eventProvider) { + final com.google.common.eventbus.EventBus systemEventBus, final UIEventProvider eventProvider) { this.eventBus = eventBus; this.systemEventBus = systemEventBus; this.eventProvider = eventProvider; @@ -153,9 +151,6 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { return false; } - private static int addAccess = 0; - private static int startAccess = 0; - private final class DispatchRunnable implements Runnable { private final UI vaadinUI; @@ -211,41 +206,21 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { try { SecurityContextHolder.setContext(userContext); - // TODO viele kleine access? - addAccess++; - final int endAddAccess = addAccess; - LOG.info("Add Access to runnable{}", addAccess); vaadinUI.access(() -> { - startAccess++; - final int currentAccess = startAccess; - LOG.info("Started Access {}", currentAccess); - final Instant startAcess = Instant.now(); - if (vaadinSession.getState() != State.OPEN) { return; } fowardSingleEvents(events, userContext); fowardBulkEvents(events, userContext); - berechneDauer(startAcess, "End Access " + currentAccess); }); - - LOG.info("End add Access to runnable{}", endAddAccess); } finally { SecurityContextHolder.setContext(oldContext); } } - private void berechneDauer(final Instant start, final String methode) { - final Instant end = Instant.now(); - final long second = end.getEpochSecond() - start.getEpochSecond(); - LOG.info("Dauer {} {} sekunden.", methode, second); - } - private void fowardBulkEvents(final List events, final SecurityContext userContext) { - final Set> filterBulkEvenTypes = events.stream().map(Event::getClass) - .filter(eventClass -> eventProvider.getBulkEvents().contains(eventClass)) - .collect(Collectors.toSet()); + final Set> filterBulkEvenTypes = eventProvider.getFilteredBulkEventsType(events); publishBulkEvent(events, userContext, filterBulkEvenTypes); } @@ -257,7 +232,6 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { && bulkType.isInstance(event)) .collect(Collectors.toList()); if (!listBulkEvents.isEmpty()) { - LOG.info("Publish bulk event"); eventBus.publish(vaadinUI, listBulkEvents); } } @@ -265,11 +239,10 @@ public class DelayedEventBusPushStrategy implements EventPushStrategy { private void fowardSingleEvents(final List events, final SecurityContext userContext) { - events.stream().filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event) - && eventProvider.getSingleEvents().contains(event.getClass())).forEach(event -> { - LOG.info("Publish single event"); - eventBus.publish(vaadinUI, event); - }); + events.stream() + .filter(event -> DelayedEventBusPushStrategy.this.eventSecurityCheck(userContext, event) + && eventProvider.getSingleEvents().contains(event.getClass())) + .forEach(event -> eventBus.publish(vaadinUI, event)); } } From b837defb13c3e8b48775163bf1a1e144c5a231c0 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 12:12:28 +0100 Subject: [PATCH 016/344] Revert uncomment code Signed-off-by: SirWayne --- .../hawkbit/repository/RolloutScheduler.java | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) 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 9b45e661f..6671ad896 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 @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.repository; +import java.util.List; + import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.tenancy.TenantAware; import org.slf4j.Logger; @@ -54,25 +56,25 @@ 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."); - // // run this code in system code privileged to have the necessary - // // permission to query and create entities. - // systemSecurityContext.runAsSystem(() -> { - // // workaround eclipselink that is currently not possible to - // // execute a query without multitenancy if MultiTenant - // // annotation is used. - // // https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458. So - // // 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()); - // for (final String tenant : tenants) { - // tenantAware.runAsTenant(tenant, () -> { - // rolloutManagement.checkRunningRollouts(rolloutProperties.getScheduler().getFixedDelay()); - // return null; - // }); - // } - // return null; - // }); + 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(() -> { + // workaround eclipselink that is currently not possible to + // execute a query without multitenancy if MultiTenant + // annotation is used. + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458. So + // 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()); + for (final String tenant : tenants) { + tenantAware.runAsTenant(tenant, () -> { + rolloutManagement.checkRunningRollouts(rolloutProperties.getScheduler().getFixedDelay()); + return null; + }); + } + return null; + }); } } From cbefcb2f53109fab8808e911e549e3e2e06b4d90 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 12:14:08 +0100 Subject: [PATCH 017/344] Add commit Signed-off-by: SirWayne --- .../eclipse/hawkbit/ui/management/targettable/TargetTable.java | 2 ++ 1 file changed, 2 insertions(+) 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 66417986f..74e93ab6b 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 @@ -423,6 +423,8 @@ public class TargetTable extends AbstractTable implements Handler { if (shouldRefreshTargets) { refreshOnDelete(); + } else { + targetContainer.commit(); } unSelectAll(); From 18b4ac338d3c08e074a4b0f72ac1fc006bbd5677 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 12:38:06 +0100 Subject: [PATCH 018/344] Reselect items after deletion Signed-off-by: SirWayne --- .../ui/management/targettable/TargetTable.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 74e93ab6b..4b57f48c6 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 @@ -426,8 +426,23 @@ public class TargetTable extends AbstractTable implements Handler { } else { targetContainer.commit(); } + reSelectItemsAfterDeletionEvent(); + } + private void reSelectItemsAfterDeletionEvent() { + Set values = new HashSet<>(); + if (isMultiSelect()) { + values = new HashSet<>((Set) getValue()); + } else { + values.add(getValue()); + } unSelectAll(); + + for (final Object value : values) { + if (getVisibleItemIds().contains(value)) { + select(value); + } + } } private void refreshOnDelete() { From 45f6fb80a389fa514fad891b23948555b4c50a2c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 12:59:29 +0100 Subject: [PATCH 019/344] Fix event provider autowiring Signed-off-by: SirWayne --- .../src/main/java/org/eclipse/hawkbit/app/MyUI.java | 7 ++++--- .../hawkbit/autoconfigure/ui/UIAutoConfiguration.java | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java index bbb348961..68d3b2fd9 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java @@ -8,8 +8,8 @@ */ package org.eclipse.hawkbit.app; -import org.eclipse.hawkbit.ui.HawkbitEventProvider; import org.eclipse.hawkbit.ui.HawkbitUI; +import org.eclipse.hawkbit.ui.UIEventProvider; import org.eclipse.hawkbit.ui.push.DelayedEventBusPushStrategy; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +34,8 @@ public class MyUI extends HawkbitUI { private static final long serialVersionUID = 1L; @Autowired - public MyUI(final EventBus systemEventBus, final org.vaadin.spring.events.EventBus.SessionEventBus eventBus) { - super(new DelayedEventBusPushStrategy(eventBus, systemEventBus, new HawkbitEventProvider())); + public MyUI(final EventBus systemEventBus, final org.vaadin.spring.events.EventBus.SessionEventBus eventBus, + final UIEventProvider provider) { + super(new DelayedEventBusPushStrategy(eventBus, systemEventBus, provider)); } } diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java index 7b3302533..be66904d5 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/ui/UIAutoConfiguration.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.autoconfigure.ui; import org.eclipse.hawkbit.DistributedResourceBundleMessageSource; import org.eclipse.hawkbit.ui.HawkbitEventProvider; import org.eclipse.hawkbit.ui.UIEventProvider; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.vaadin.spring.annotation.EnableVaadinExtensions; @@ -42,6 +43,7 @@ public class UIAutoConfiguration { * @return the provider bean */ @Bean + @ConditionalOnMissingBean public UIEventProvider eventProvider() { return new HawkbitEventProvider(); } From 53fbe367e479a84575002d4be2ecb6031cd18c43 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 13:16:37 +0100 Subject: [PATCH 020/344] Sonar fix Signed-off-by: SirWayne --- .../src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java index 65f907d94..25890f9f1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java @@ -49,8 +49,7 @@ public interface UIEventProvider { * be null */ default Set> getFilteredBulkEventsType(final List allEvents) { - return allEvents.stream().map(Event::getClass).filter(eventClass -> getBulkEvents().contains(eventClass)) - .collect(Collectors.toSet()); + return allEvents.stream().map(Event::getClass).filter(getBulkEvents()::contains).collect(Collectors.toSet()); } } From 5232058433ffa98ec62be88eedaedb849601e5d5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 17:24:58 +0100 Subject: [PATCH 021/344] Add license header Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/ui/HawkbitEventProvider.java | 9 +++++++-- .../java/org/eclipse/hawkbit/ui/UIEventProvider.java | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) 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 8afb46ba7..885576fef 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 @@ -1,6 +1,11 @@ /** - * 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.ui; import java.util.HashSet; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java index 25890f9f1..5663ce897 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UIEventProvider.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.ui; From c14d534fe143e3cd842b3e58db974c45ae2eb39d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 24 Mar 2016 18:04:56 +0100 Subject: [PATCH 022/344] Add license header Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/ui/HawkbitEventProvider.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 885576fef..f026378b9 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 @@ -1,11 +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 -*/ + * + * 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; import java.util.HashSet; From f237a1e508d60983e7089087b02fe87cdcb5ea25 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 25 Mar 2016 16:24:42 +0100 Subject: [PATCH 023/344] Added tests for software management - while at it I renamed also a few methods to fit into the overall pattern --- .../repository/SoftwareManagement.java | 53 ++- .../repository/SoftwareModuleRepository.java | 2 + .../hawkbit/repository/SystemManagement.java | 2 - .../model/CustomSoftwareModule.java | 40 ++ .../repository/model/SoftwareModule.java | 24 +- .../model/SoftwareModuleMetadata.java | 87 ++-- .../repository/SoftwareManagementTest.java | 447 ++++++++++++++++-- .../rest/resource/SoftwareModuleResource.java | 2 +- .../resource/SoftwareModuleTypeResource.java | 2 +- .../resource/SoftwareModuleResourceTest.java | 8 +- .../smtable/SwModuleBeanQuery.java | 7 +- 11 files changed, 564 insertions(+), 110 deletions(-) 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 1f610d29c..b51019338 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 @@ -59,11 +59,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Sets; /** - * Business facade for managing the deployable {@link SoftwareModule}s. - * - * - * - * + * Business facade for managing {@link SoftwareModule}s. * */ @Transactional(readOnly = true) @@ -99,7 +95,7 @@ public class SoftwareManagement { private ArtifactManagement artifactManagement; /** - * Updates existing {@link SoftwareModule}. Updateable values are + * Updates existing {@link SoftwareModule}. Update-able values are * {@link SoftwareModule#getDescription()} * {@link SoftwareModule#getVendor()}. * @@ -119,17 +115,21 @@ public class SoftwareManagement { final SoftwareModule module = softwareModuleRepository.findOne(sm.getId()); + boolean updated = false; if (null == sm.getDescription() || !sm.getDescription().equals(module.getDescription())) { module.setDescription(sm.getDescription()); + updated = true; } if (null == sm.getVendor() || !sm.getVendor().equals(module.getVendor())) { module.setVendor(sm.getVendor()); + updated = true; } - return softwareModuleRepository.save(module); + + return updated ? softwareModuleRepository.save(module) : module; } /** - * Updates existing {@link SoftwareModuleType}. Updatable value is + * Updates existing {@link SoftwareModuleType}. Update-able value is * {@link SoftwareModuleType#getDescription()} and * {@link SoftwareModuleType#getColour()}. * @@ -145,13 +145,16 @@ public class SoftwareManagement { final SoftwareModuleType type = softwareModuleTypeRepository.findOne(sm.getId()); + boolean updated = false; if (sm.getDescription() != null && !sm.getDescription().equals(type.getDescription())) { type.setDescription(sm.getDescription()); + updated = true; } if (sm.getColour() != null && !sm.getColour().equals(type.getColour())) { type.setColour(sm.getColour()); + updated = true; } - return softwareModuleTypeRepository.save(type); + return updated ? softwareModuleTypeRepository.save(type) : type; } /** @@ -255,6 +258,10 @@ public class SoftwareManagement { return artifactManagement.findSoftwareModuleById(id); } + // TODO: discuss this method, does not seem to make sense to search by name + // and version without type. It also makes no sense to return collection + // here. It should be a single result based on ytpe,name,version (like the + // constraint). /** * retrieves {@link SoftwareModule}s by their name AND version. * @@ -491,12 +498,17 @@ public class SoftwareManagement { /** * Filter {@link SoftwareModule}s with given * {@link SoftwareModule#getName()} or {@link SoftwareModule#getVersion()} - * and {@link SoftwareModule#getType()} that are not marked as deleted. + * 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 order by + * the ID of distribution set to be ordered on top * @param searchText * to be filtered as "like" on {@link SoftwareModule#getName()} * @param type @@ -504,8 +516,9 @@ public class SoftwareManagement { * @return the page of found {@link SoftwareModule} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Slice findSoftwareModuleOrderByDistribution(@NotNull final Pageable pageable, - @NotNull final Long orderByDistributionId, final String searchText, final SoftwareModuleType type) { + public Slice findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc( + @NotNull final Pageable pageable, @NotNull final Long orderByDistributionId, final String searchText, + final SoftwareModuleType type) { final List resultList = new ArrayList<>(); final int pageSize = pageable.getPageSize(); @@ -522,7 +535,7 @@ public class SoftwareManagement { assignedRoot, assignedQuery, cb, cb.equal(assignedDsJoin.get(DistributionSet_.id), orderByDistributionId)); // if we have some predicates then add it to the where clause of the - // multiselect + // multi select assignedQuery.where(specPredicate); assignedQuery.orderBy(cb.asc(assignedRoot.get(SoftwareModule_.name)), cb.asc(assignedRoot.get(SoftwareModule_.version))); @@ -546,7 +559,7 @@ public class SoftwareManagement { unassignedQuery.distinct(true); final Root unassignedRoot = unassignedQuery.from(SoftwareModule.class); - Predicate[] unassignedSpec = null; + Predicate[] unassignedSpec; if (!assignedSoftwareModules.isEmpty()) { unassignedSpec = specificationsToPredicate(buildSpecificationList(searchText, type), unassignedRoot, unassignedQuery, cb, cb.not(unassignedRoot.get(SoftwareModule_.id) @@ -709,8 +722,8 @@ public class SoftwareManagement { @Modifying @Transactional @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) - public List createSoftwareModuleTypes(@NotNull final Collection types) { - return types.stream().map(type -> createSoftwareModuleType(type)).collect(Collectors.toList()); + public List createSoftwareModuleType(@NotNull final Collection types) { + return types.stream().map(this::createSoftwareModuleType).collect(Collectors.toList()); } /** @@ -826,7 +839,7 @@ public class SoftwareManagement { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public SoftwareModuleMetadata updateSoftwareModuleMetadata(@NotNull final SoftwareModuleMetadata metadata) { // check if exists otherwise throw entity not found exception - findOne(metadata.getId()); + findSoftwareModuleMetadata(metadata.getId()); // touch it to update the lock revision because we are modifying the // software module // indirectly @@ -884,7 +897,7 @@ public class SoftwareManagement { cb) -> cb.and( cb.equal(root.get(SoftwareModuleMetadata_.softwareModule) .get(SoftwareModule_.id), softwareModuleId), - spec.toPredicate(root, query, cb)), + spec.toPredicate(root, query, cb)), pageable); } @@ -899,7 +912,7 @@ public class SoftwareManagement { * in case the meta data does not exists for the given key */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public SoftwareModuleMetadata findOne(@NotNull final SwMetadataCompositeKey id) { + public SoftwareModuleMetadata findSoftwareModuleMetadata(@NotNull final SwMetadataCompositeKey id) { final SoftwareModuleMetadata findOne = softwareModuleMetadataRepository.findOne(id); if (findOne == null) { throw new EntityNotFoundException("Metadata with key '" + id.getKey() + "' does not exist"); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java index ccadb028a..44682da64 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java @@ -81,6 +81,8 @@ public interface SoftwareModuleRepository Page findByAssignedTo(Pageable pageable, DistributionSet set); /** + * + * * @param set * to search for * @return all {@link SoftwareModule}s that are assigned to given 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 559b71498..31f5f1c18 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 @@ -310,8 +310,6 @@ public class SystemManagement { } private DistributionSetType createStandardSoftwareDataSetup() { - - // Edge Controller Linux standard setup final SoftwareModuleType eclApp = softwareModuleTypeRepository.save(new SoftwareModuleType("application", "ECL Application", "Edge Controller Linux base application type", 1)); final SoftwareModuleType eclOs = softwareModuleTypeRepository diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java index 96c7cdd62..b68f9df49 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java @@ -52,4 +52,44 @@ public class CustomSoftwareModule implements Serializable { public boolean isAssigned() { return assigned; } + + @Override + public String toString() { + return "CustomSoftwareModule [softwareModule=" + softwareModule + ", assigned=" + assigned + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (assigned ? 1231 : 1237); + result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final CustomSoftwareModule other = (CustomSoftwareModule) obj; + if (assigned != other.assigned) { + return false; + } + 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/model/SoftwareModule.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModule.java index 49e73f749..7b0c03c0e 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 @@ -43,7 +43,7 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; */ @Entity @Table(name = "sp_base_software_module", uniqueConstraints = @UniqueConstraint(columnNames = { "module_type", "name", - "version", "tenant" }, name = "uk_base_sw_mod") , indexes = { + "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") }) @@ -52,7 +52,7 @@ 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") ) + @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) @@ -239,23 +239,12 @@ public class SoftwareModule extends NamedVersionedEntity { return metadata; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { - return "SoftwareModule [type=" + type + ", deleted=" + deleted + ", getVersion()=" + getVersion() - + ", getOptLockRevision()=" + getOptLockRevision() + ", getId()=" + getId() + ", getType()=" - + getType().getName() + "]"; + return "SoftwareModule [deleted=" + deleted + ", getVersion()=" + getVersion() + ", getOptLockRevision()=" + + getOptLockRevision() + ", getId()=" + getId() + ", getType()=" + getType().getName() + "]"; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { // NOSONAR - as this is generated final int prime = 31; @@ -264,11 +253,6 @@ public class SoftwareModule extends NamedVersionedEntity { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated if (this == obj) { 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 dfc1ecfa7..4ffbd2c10 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 @@ -24,9 +24,6 @@ import javax.persistence.Table; /** * Metadata for {@link SoftwareModule}. * - * - * - * */ @IdClass(SwMetadataCompositeKey.class) @Entity @@ -50,18 +47,21 @@ public class SoftwareModuleMetadata implements Serializable { @JoinColumn(name = "sw_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_sw")) private SoftwareModule softwareModule; + /** + * Default constructor for JPA. + */ public SoftwareModuleMetadata() { - + // default constructor for JPA. } /** * Standard constructor. * * @param key - * of the metadata element + * of the meta data element * @param softwareModule * @param value - * of the metadata element + * of the meta data element */ public SoftwareModuleMetadata(final String key, final SoftwareModule softwareModule, final String value) { this.key = key; @@ -69,56 +69,83 @@ public class SoftwareModuleMetadata implements Serializable { this.value = value; } - /** - * @return the id - */ public SwMetadataCompositeKey getId() { return new SwMetadataCompositeKey(softwareModule, key); } - /** - * @return the value - */ public String getValue() { return value; } - /** - * @param value - * the value to set - */ public void setValue(final String value) { this.value = value; } - /** - * @return the softwareModule - */ public SoftwareModule getSoftwareModule() { return softwareModule; } - /** - * @param softwareModule - * the softwareModule to set - */ public void setSoftwareModule(final SoftwareModule softwareModule) { this.softwareModule = softwareModule; } - /** - * @return the key - */ public String getKey() { return key; } - /** - * @param key - * the key to set - */ public void setKey(final String key) { this.key = key; } + @Override + public String toString() { + return "SoftwareModuleMetadata [key=" + key + ", value=" + value + ", softwareModule=" + softwareModule + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + ((softwareModule == null) ? 0 : softwareModule.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 (getClass() != obj.getClass()) { + return false; + } + final SoftwareModuleMetadata other = (SoftwareModuleMetadata) obj; + if (key == null) { + if (other.key != null) { + return false; + } + } else if (!key.equals(other.key)) { + return false; + } + if (softwareModule == null) { + if (other.softwareModule != null) { + return false; + } + } else if (!softwareModule.equals(other.softwareModule)) { + 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/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementTest.java index 49776e392..c295c57ce 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 @@ -14,7 +14,6 @@ import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -24,14 +23,18 @@ 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.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.DistributionSetTag; +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; @@ -51,6 +54,143 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Software Management") public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { + @Test + @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)); + + created.setName("a new name"); + final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(created); + + assertThat(updated.getOptLockRevision()) + .as("Expected version number of updated entitity to be equal to created version") + .isEqualTo(created.getOptLockRevision()); + } + + @Test + @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)); + + final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(created); + + assertThat(updated.getOptLockRevision()) + .as("Expected version number of updated entitity to be equal to created version") + .isEqualTo(created.getOptLockRevision()); + } + + @Test + @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)); + + created.setDescription("changed"); + created.setColour("changed"); + + final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(created); + + assertThat(updated.getOptLockRevision()).as("Expected version number of updated entitity is") + .isEqualTo(created.getOptLockRevision() + 1); + assertThat(updated.getDescription()).as("Updated description is").isEqualTo("changed"); + assertThat(updated.getColour()).as("Updated vendor is").isEqualTo("changed"); + } + + @Test + @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, "")); + + ah.setName("a new name"); + final SoftwareModule updated = softwareManagement.updateSoftwareModule(ah); + + assertThat(updated.getOptLockRevision()) + .as("Expected version number of updated entitity to be equal to created version") + .isEqualTo(ah.getOptLockRevision()); + } + + @Test + @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, "")); + + final SoftwareModule updated = softwareManagement.updateSoftwareModule(ah); + + assertThat(updated.getOptLockRevision()) + .as("Expected version number of updated entitity to be equal to created version") + .isEqualTo(ah.getOptLockRevision()); + } + + @Test + @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")); + + ah.setDescription("changed"); + ah.setVendor("changed"); + final SoftwareModule updated = softwareManagement.updateSoftwareModule(ah); + + assertThat(updated.getOptLockRevision()).as("Expected version number of updated entitity is") + .isEqualTo(ah.getOptLockRevision() + 1); + assertThat(updated.getDescription()).as("Updated description is").isEqualTo("changed"); + assertThat(updated.getVendor()).as("Updated vendor is").isEqualTo("changed"); + } + + @Test(expected = EntityAlreadyExistsException.class) + @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")); + softwareManagement.createSoftwareModule(ah); + } + + @Test(expected = EntityAlreadyExistsException.class) + @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"))); + softwareManagement.createSoftwareModule(modules); + } + + @Test(expected = EntityAlreadyExistsException.class) + @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)); + softwareManagement.createSoftwareModuleType(created); + } + + @Test(expected = EntityAlreadyExistsException.class) + @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", "test-name", "test-desc", 1), + new SoftwareModuleType("test-key2", "test-name", "test-desc", 1))); + softwareManagement.createSoftwareModuleType(created); + } + + @Test + @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")); + + ah.setDescription(null); + ah.setVendor(null); + final SoftwareModule updated = softwareManagement.updateSoftwareModule(ah); + + assertThat(updated.getOptLockRevision()).as("Expected version number of updated entitity is") + .isEqualTo(ah.getOptLockRevision() + 1); + assertThat(updated.getDescription()).as("Updated description is").isNull(); + assertThat(updated.getVendor()).as("Updated vendor is").isNull(); + } + @Test @Description("searched for software modules based on the various filter options, e.g. name,desc,type, version.") public void findSoftwareModuleByFilters() { @@ -105,7 +245,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { @Test @Description("Searches for software modules based on a list of IDs.") - public void findSoftwareModulesByIdAndType() { + public void findSoftwareModulesById() { final List modules = new ArrayList(); @@ -118,6 +258,54 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(softwareManagement.findSoftwareModulesById(modules)).hasSize(2); } + @Test + @Description("Searches for software modules by type.") + public void findSoftwareModulesByType() { + // found in test + final SoftwareModule one = softwareManagement + .createSoftwareModule(new SoftwareModule(osType, "one", "one", null, "")); + final SoftwareModule two = softwareManagement + .createSoftwareModule(new SoftwareModule(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, "")); + + assertThat(softwareManagement.findSoftwareModulesByType(pageReq, osType).getContent()) + .as("Expected to find the following number of modules:").hasSize(2).as("with the following elements") + .contains(two, one); + } + + @Test + @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, "")); + // ignored + softwareManagement.deleteSoftwareModule( + softwareManagement.createSoftwareModule(new SoftwareModule(osType, "deleted", "deleted", null, ""))); + + assertThat(softwareManagement.countSoftwareModulesAll()).as("Expected to find the following number of modules:") + .isEqualTo(2); + } + + @Test + @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, "")); + + // ignored + softwareManagement.deleteSoftwareModule( + softwareManagement.createSoftwareModule(new SoftwareModule(osType, "deleted", "deleted", null, ""))); + softwareManagement.createSoftwareModule(new SoftwareModule(appType, "three", "3.0.2", null, "")); + + assertThat(softwareManagement.countSoftwareModulesByType(osType)) + .as("Expected to find the following number of modules:").isEqualTo(2); + } + @Test @Description("Tests the successfull deletion of software module types. Both unused (hard delete) and used ones (soft delete).") public void deleteAssignedAndUnassignedSoftwareModuleTypes() { @@ -419,32 +607,184 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { } } - /** - * - * @param findAll - * @return - */ - @SuppressWarnings("rawtypes") - private Collection iterable2Collection(final Iterable iterable) { - final Collection col = new ArrayList(); - for (final Object o : iterable) { - col.add(o); - } - return col; + @Test + @Description("Test verfies that results are returned based on given filter parameters and in the specified order.") + public void findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc() { + // test meta data + final SoftwareModuleType testType = softwareManagement + .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + final DistributionSetType testDsType = distributionSetManagement + .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) + .addOptionalModuleType(testType)); + + // found in test + final SoftwareModule unassigned = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "asis", "found", null, "")); + final SoftwareModule one = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "found", "b", null, "")); + final SoftwareModule two = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "found", "c", null, "")); + final SoftwareModule differentName = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "differentname", "d", null, "")); + + // ignored + final SoftwareModule deleted = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "deleted", "deleted", null, "")); + final SoftwareModule four = softwareManagement + .createSoftwareModule(new SoftwareModule(osType, "sdfjhsdj", "e", null, "")); + + final DistributionSet set = distributionSetManagement.createDistributionSet(new DistributionSet("set", "1", + "desc", testDsType, Lists.newArrayList(one, two, deleted, four, differentName))); + softwareManagement.deleteSoftwareModule(deleted); + + // with filter on name, version and module type + assertThat(softwareManagement.findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc(pageReq, + set.getId(), "found", testType).getContent()) + .as("Found modules with given name, given module type and the assigned ones first") + .containsExactly(new CustomSoftwareModule(one, true), new CustomSoftwareModule(two, true), + new CustomSoftwareModule(unassigned, false)); + + // with filter on module type only + assertThat(softwareManagement.findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc(pageReq, + set.getId(), null, testType).getContent()) + .as("Found modules with given module type and the assigned ones first").containsExactly( + new CustomSoftwareModule(differentName, true), new CustomSoftwareModule(one, true), + new CustomSoftwareModule(two, true), new CustomSoftwareModule(unassigned, false)); + + // without any filter + assertThat(softwareManagement + .findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc(pageReq, set.getId(), null, null) + .getContent()).as("Found modules with the assigned ones first").containsExactly( + new CustomSoftwareModule(differentName, true), new CustomSoftwareModule(one, true), + new CustomSoftwareModule(two, true), new CustomSoftwareModule(four, true), + new CustomSoftwareModule(unassigned, false)); } - /** - * - */ - private void printDSTags() { - System.out.println("=============================================================================="); - for (final DistributionSet d : distributionSetRepository.findAll()) { - System.out.printf("%s\t[", d.getName()); - for (final DistributionSetTag t : d.getTags()) { - System.out.printf("%s ", t.getName()); - } - System.out.println("]"); - } + @Test + @Description("Checks that number of modules is returned as expected based on given filters.") + public void countSoftwareModuleByFilters() { + + // test meta data + final SoftwareModuleType testType = softwareManagement + .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + final DistributionSetType testDsType = distributionSetManagement + .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) + .addOptionalModuleType(testType)); + + // test modules + softwareManagement.createSoftwareModule(new SoftwareModule(testType, "asis", "found", null, "")); + final SoftwareModule one = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "found", "b", null, "")); + final SoftwareModule two = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "found", "c", null, "")); + final SoftwareModule differentName = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "differentname", "d", null, "")); + final SoftwareModule four = softwareManagement + .createSoftwareModule(new SoftwareModule(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, + Lists.newArrayList(one, two, deleted, four, differentName))); + softwareManagement.deleteSoftwareModule(deleted); + + // test + assertThat(softwareManagement.countSoftwareModuleByFilters("found", testType)) + .as("Number of modules with given name or version and type").isEqualTo(3); + assertThat(softwareManagement.countSoftwareModuleByFilters(null, testType)) + .as("Number of modules with given type").isEqualTo(4); + assertThat(softwareManagement.countSoftwareModuleByFilters(null, null)).as("Number of modules overall") + .isEqualTo(5); + } + + @Test + @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)); + final DistributionSetType testDsType = distributionSetManagement + .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) + .addOptionalModuleType(testType)); + final SoftwareModule four = softwareManagement + .createSoftwareModule(new SoftwareModule(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, Lists.newArrayList(deleted, four))); + softwareManagement.deleteSoftwareModule(deleted); + + assertThat(softwareManagement.countSoftwareModulesAll()).as("Number of undeleted modules").isEqualTo(1); + assertThat(softwareModuleRepository.count()).as("Number of all modules").isEqualTo(2); + } + + @Test + @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)); + + assertThat(softwareManagement.findSoftwareModuleTypeByName("thename")).as("Type with given name") + .isEqualTo(found); + } + + @Test(expected = EntityAlreadyExistsException.class) + @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)); + softwareManagement.createSoftwareModuleType(created); + } + + @Test(expected = EntityAlreadyExistsException.class) + @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)); + softwareManagement.createSoftwareModuleType( + Lists.newArrayList(created, new SoftwareModuleType("anothertype", "anothername", "desc", 100))); + } + + @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))); + + assertThat(created.size()).as("Number of created types").isEqualTo(2); + assertThat(softwareManagement.countSoftwareModuleTypesAll()).as("Number of types in repository").isEqualTo(5); + } + + @Test + @Description("Verfies that sofwtare modules are resturned that are assigned to given DS.") + public void findSoftwareModuleByAssignedTo() { + // test meta data + final SoftwareModuleType testType = softwareManagement + .createSoftwareModuleType(new SoftwareModuleType("thetype", "thename", "desc", 100)); + final DistributionSetType testDsType = distributionSetManagement + .createDistributionSetType(new DistributionSetType("key", "name", "desc").addMandatoryModuleType(osType) + .addOptionalModuleType(testType)); + + // test modules + softwareManagement.createSoftwareModule(new SoftwareModule(testType, "asis", "found", null, "")); + final SoftwareModule one = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "found", "b", null, "")); + final SoftwareModule two = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "found", "c", null, "")); + + // one soft deleted + final SoftwareModule deleted = softwareManagement + .createSoftwareModule(new SoftwareModule(testType, "deleted", "deleted", null, "")); + final DistributionSet set = distributionSetManagement.createDistributionSet( + new DistributionSet("set", "1", "desc", testDsType, Lists.newArrayList(one, deleted))); + softwareManagement.deleteSoftwareModule(deleted); + + assertThat(softwareManagement.findSoftwareModuleByAssignedTo(pageReq, set).getContent()) + .as("Found this number of modules").hasSize(2); } @Test @@ -479,6 +819,22 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(softwareModuleMetadata.get(0).getSoftwareModule().getId()).isEqualTo(ah.getId()); } + @Test(expected = EntityAlreadyExistsException.class) + @Description("Checks that metadata for a software module cannot be created for an existing key.") + public void createSoftwareModuleMetadataFailsIfKeyExists() { + + final String knownKey1 = "myKnownKey1"; + final String knownValue1 = "myKnownValue1"; + final String knownValue2 = "myKnownValue2"; + + final SoftwareModule ah = softwareManagement + .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + + softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)); + + softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue2)); + } + @Test @WithUser(allSpPermissions = true) @Description("Checks that metadata for a software module can be updated.") @@ -525,6 +881,43 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(updated.getSoftwareModule().getId()).isEqualTo(ah.getId()); } + @Test + @Description("Verfies that existing metadata can be deleted.") + public void deleteSoftwareModuleMetadata() { + final String knownKey1 = "myKnownKey1"; + final String knownValue1 = "myKnownValue1"; + + SoftwareModule ah = softwareManagement + .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + + ah = softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)) + .getSoftwareModule(); + + assertThat(softwareManagement.findSoftwareModuleById(ah.getId()).getMetadata()) + .as("Contains the created metadata element") + .containsExactly(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)); + + softwareManagement.deleteSoftwareModuleMetadata(new SwMetadataCompositeKey(ah, knownKey1)); + assertThat(softwareManagement.findSoftwareModuleById(ah.getId()).getMetadata()).as("Metadata elemenets are") + .isEmpty(); + } + + @Test(expected = EntityNotFoundException.class) + @Description("Verfies that non existing metadata find results in exception.") + public void findSoftwareModuleMetadataFailsIfEntryDoesNotExist() { + final String knownKey1 = "myKnownKey1"; + final String knownValue1 = "myKnownValue1"; + + SoftwareModule ah = softwareManagement + .createSoftwareModule(new SoftwareModule(appType, "agent-hub", "1.0.1", null, "")); + + ah = softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)) + .getSoftwareModule(); + + softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(ah, "doesnotexist")); + + } + @Test @Description("Queries and loads the metadata related to a given software module.") public void findAllSoftwareModuleMetadataBySwId() { 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 e165fca20..cfddf9d40 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 @@ -226,7 +226,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { // check if distribution set exists otherwise throw exception // immediately final SoftwareModule sw = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, null); - final SoftwareModuleMetadata findOne = softwareManagement.findOne(new SwMetadataCompositeKey(sw, metadataKey)); + final SoftwareModuleMetadata findOne = softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sw, metadataKey)); return ResponseEntity. ok(SoftwareModuleMapper.toResponseSwMetadata(findOne)); } 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 7dda79690..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 @@ -102,7 +102,7 @@ public class SoftwareModuleTypeResource implements SoftwareModuleTypeRestApi { final List softwareModuleTypes) { final List createdSoftwareModules = this.softwareManagement - .createSoftwareModuleTypes(SoftwareModuleTypeMapper.smFromRequest(softwareModuleTypes)); + .createSoftwareModuleType(SoftwareModuleTypeMapper.smFromRequest(softwareModuleTypes)); return new ResponseEntity<>(SoftwareModuleTypeMapper.toTypesResponse(createdSoftwareModules), HttpStatus.CREATED); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java index 0b8503d6b..09ae7978f 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java @@ -930,8 +930,8 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(jsonPath("[1]key", equalTo(knownKey2))) .andExpect(jsonPath("[1]value", equalTo(knownValue2))); - final SoftwareModuleMetadata metaKey1 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey1)); - final SoftwareModuleMetadata metaKey2 = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey2)); + final SoftwareModuleMetadata metaKey1 = softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey1)); + final SoftwareModuleMetadata metaKey2 = softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey2)); assertThat(metaKey1.getValue()).as("Metadata key is wrong").isEqualTo(knownValue1); assertThat(metaKey2.getValue()).as("Metadata key is wrong").isEqualTo(knownValue2); @@ -957,7 +957,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue))); - final SoftwareModuleMetadata assertDS = softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey)); + final SoftwareModuleMetadata assertDS = softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey)); assertThat(assertDS.getValue()).as("Metadata is wrong").isEqualTo(updateValue); } @@ -976,7 +976,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()); try { - softwareManagement.findOne(new SwMetadataCompositeKey(sm, knownKey)); + softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey)); fail("expected EntityNotFoundException but didn't throw"); } catch (final EntityNotFoundException e) { // ok as expected 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 859febbce..9aae5ca5c 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 @@ -22,8 +22,6 @@ import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SpringContextHelper; import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; -import org.springframework.data.domain.Sort.Direction; import org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery; import org.vaadin.addons.lazyquerycontainer.QueryDefinition; @@ -79,9 +77,8 @@ public class SwModuleBeanQuery extends AbstractBeanQuery final Slice swModuleBeans; final List proxyBeans = new ArrayList<>(); - swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderByDistribution( - new OffsetBasedPageRequest(startIndex, count, new Sort(Direction.ASC, "name", "version")), - orderByDistId, searchText, type); + swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc( + new OffsetBasedPageRequest(startIndex, count), orderByDistId, searchText, type); for (final CustomSoftwareModule swModule : swModuleBeans) { proxyBeans.add(getProxyBean(swModule)); From 080f7d20e84b2cbc53145eefc9e1ae538f2f575e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 26 Mar 2016 09:26:48 +0100 Subject: [PATCH 024/344] Removed boiler plate code. Added missing equals in model. Fixed sonar issues. Signed-off-by: Kai Zimmermann --- .../repository/ControllerManagement.java | 20 +++-- .../repository/DeploymentManagement.java | 1 - .../repository/DistributionSetManagement.java | 2 +- .../hawkbit/repository/TargetManagement.java | 2 - .../hawkbit/repository/model/Action.java | 25 ++----- .../repository/model/ActionStatus.java | 58 +++++++++++++-- .../hawkbit/repository/model/Artifact.java | 72 +++++++++++------- .../repository/model/DistributionSetType.java | 74 ++++++++++++------- .../hawkbit/repository/model/NamedEntity.java | 48 ++++++++++-- .../model/SwMetadataCompositeKey.java | 13 +--- .../repository/model/TenantMetaData.java | 37 ++++++++++ .../repository/TargetManagementTest.java | 8 +- 12 files changed, 247 insertions(+), 113 deletions(-) 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 7131bbe0a..271221e4a 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 @@ -376,16 +376,10 @@ public class ControllerManagement { switch (actionStatus.getStatus()) { case ERROR: mergedTarget = deploymentManagement.updateTargetInfo(mergedTarget, TargetUpdateStatus.ERROR, false); - // set action inactive - mergedAction.setActive(false); - mergedAction.setStatus(Status.ERROR); - mergedTarget.setAssignedDistributionSet(null); - targetManagement.updateTarget(mergedTarget); + handleErrorOnAction(mergedAction, mergedTarget); break; case FINISHED: - // set action inactive - mergedAction.setActive(false); - mergedAction.setStatus(Status.FINISHED); + handleFinishedAndStoreInTargetStatus(mergedTarget, mergedAction); break; case CANCELED: @@ -404,6 +398,14 @@ public class ControllerManagement { return actionRepository.save(mergedAction); } + private void handleErrorOnAction(final Action mergedAction, final Target mergedTarget) { + // set action inactive + mergedAction.setActive(false); + mergedAction.setStatus(Status.ERROR); + mergedTarget.setAssignedDistributionSet(null); + targetManagement.updateTarget(mergedTarget); + } + private void checkForToManyStatusEntries(final Action action) { if (securityProperties.getDos().getMaxStatusEntriesPerAction() > 0) { @@ -420,6 +422,8 @@ public class ControllerManagement { } 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); 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 77f71bebf..bdeba4d0a 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 @@ -534,7 +534,6 @@ public class DeploymentManagement { return saveAction; } else { throw new CancelActionNotAllowedException( - "Action [id: " + action.getId() + "] is not active and cannot be canceled"); } } 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 8df29956b..88e222e64 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 @@ -915,7 +915,7 @@ public class DistributionSetManagement { @Transactional @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public List createDistributionSetTypes(@NotNull final Collection types) { - return types.stream().map(type -> createDistributionSetType(type)).collect(Collectors.toList()); + return types.stream().map(this::createDistributionSetType).collect(Collectors.toList()); } /** 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 e790d0a5e..9cf487641 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 @@ -74,8 +74,6 @@ import com.google.common.eventbus.EventBus; /** * Business service facade for managing {@link Target}s. * - * - * */ @Transactional(readOnly = true) @Validated 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 17a7965dd..bca57efa5 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 @@ -50,7 +50,7 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; @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") ) ) }) + @NamedAttributeNode(value = "target", subgraph = "target.ds") }, subgraphs = @NamedSubgraph(name = "target.ds", attributeNodes = @NamedAttributeNode("assignedDistributionSet"))) }) @Entity public class Action extends TenantAwareBaseEntity implements Comparable { private static final long serialVersionUID = 1L; @@ -64,11 +64,11 @@ public class Action extends TenantAwareBaseEntity implements Comparable * 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") ) + @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") ) + @JoinColumn(name = "target", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_target")) private Target target; @Column(name = "active") @@ -90,11 +90,11 @@ public class Action extends TenantAwareBaseEntity implements Comparable private List actionStatus; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "rolloutgroup", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rolloutgroup") ) + @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") ) + @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_action_rollout")) private Rollout rollout; /** @@ -305,21 +305,11 @@ public class Action extends TenantAwareBaseEntity implements Comparable return actionType == ActionType.FORCED; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Action [distributionSet=" + distributionSet + ", getId()=" + getId() + "]"; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { // NOSONAR - as this is generated final int prime = 31; @@ -332,11 +322,6 @@ public class Action extends TenantAwareBaseEntity implements Comparable return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated 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 0fdec839b..6409dc209 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 @@ -32,9 +32,6 @@ 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"), @@ -42,10 +39,6 @@ import com.google.common.base.Splitter; @NamedEntityGraph(name = "ActionStatus.withMessages", attributeNodes = { @NamedAttributeNode("messages") }) @Entity public class ActionStatus extends TenantAwareBaseEntity { - - /** - * - */ private static final long serialVersionUID = 1L; @Column(name = "target_occurred_at") @@ -146,4 +139,55 @@ public class ActionStatus extends TenantAwareBaseEntity { public void setStatus(final Status status) { this.status = status; } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((action == null) ? 0 : action.hashCode()); + result = prime * result + ((messages == null) ? 0 : messages.hashCode()); + result = prime * result + ((occurredAt == null) ? 0 : occurredAt.hashCode()); + result = prime * result + ((status == null) ? 0 : status.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final ActionStatus other = (ActionStatus) obj; + if (action == null) { + if (other.action != null) { + return false; + } + } else if (!action.equals(other.action)) { + return false; + } + if (messages == null) { + if (other.messages != null) { + return false; + } + } else if (!messages.equals(other.messages)) { + return false; + } + if (occurredAt == null) { + if (other.occurredAt != null) { + return false; + } + } else if (!occurredAt.equals(other.occurredAt)) { + return false; + } + if (status != other.status) { + return false; + } + return true; + } + } 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 5d829e4d6..23c5de34f 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 @@ -13,11 +13,7 @@ import javax.persistence.MappedSuperclass; /** * Tenant specific locally stored artifact representation that is used by - * {@link SoftwareModule} . - * - * - * - * + * {@link SoftwareModule}. */ @MappedSuperclass public abstract class Artifact extends TenantAwareBaseEntity { @@ -34,49 +30,73 @@ public abstract class Artifact extends TenantAwareBaseEntity { public abstract SoftwareModule getSoftwareModule(); - /** - * @return the md5Hash - */ public String getMd5Hash() { return md5Hash; } - /** - * @return the sha1Hash - */ public String getSha1Hash() { return sha1Hash; } - /** - * @param md5Hash - * the md5Hash to set - */ public void setMd5Hash(final String md5Hash) { this.md5Hash = md5Hash; } - /** - * @param sha1Hash - * the sha1Hash to set - */ public void setSha1Hash(final String sha1Hash) { this.sha1Hash = sha1Hash; } - /** - * @return the size - */ public Long getSize() { return size; } - /** - * @param size - * the size to set - */ public void setSize(final Long size) { this.size = size; } + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((md5Hash == null) ? 0 : md5Hash.hashCode()); + result = prime * result + ((sha1Hash == null) ? 0 : sha1Hash.hashCode()); + result = prime * result + ((size == null) ? 0 : size.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Artifact other = (Artifact) obj; + if (md5Hash == null) { + if (other.md5Hash != null) { + return false; + } + } else if (!md5Hash.equals(other.md5Hash)) { + return false; + } + if (sha1Hash == null) { + if (other.sha1Hash != null) { + return false; + } + } else if (!sha1Hash.equals(other.sha1Hash)) { + return false; + } + if (size == null) { + if (other.size != null) { + return false; + } + } else if (!size.equals(other.size)) { + return false; + } + return true; + } } 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 e1c7e61ea..30fb73365 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 @@ -38,10 +38,6 @@ import javax.persistence.UniqueConstraint; @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 = { @@ -256,17 +252,10 @@ public class DistributionSetType extends NamedEntity { return this; } - /** - * @return the key - */ public String getKey() { return key; } - /** - * @param key - * the key to set - */ public void setKey(final String key) { this.key = key; } @@ -282,19 +271,10 @@ public class DistributionSetType extends NamedEntity { .containsAll(getMandatoryModuleTypes()); } - /** - * - * @return the DistributionSet type color - */ public String getColour() { return colour; } - /** - * - * @param colour - * the col - */ public void setColour(final String colour) { this.colour = colour; } @@ -303,14 +283,58 @@ public class DistributionSetType extends NamedEntity { return elements; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "DistributionSetType [key=" + key + ", isDeleted()=" + isDeleted() + ", getId()=" + getId() + "]"; } + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((colour == null) ? 0 : colour.hashCode()); + result = prime * result + (deleted ? 1231 : 1237); + result = prime * result + ((elements == null) ? 0 : elements.hashCode()); + result = prime * result + ((key == null) ? 0 : key.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final DistributionSetType other = (DistributionSetType) obj; + if (colour == null) { + if (other.colour != null) { + return false; + } + } else if (!colour.equals(other.colour)) { + return false; + } + if (deleted != other.deleted) { + return false; + } + if (elements == null) { + if (other.elements != null) { + return false; + } + } else if (!elements.equals(other.elements)) { + return false; + } + if (key == null) { + if (other.key != null) { + return false; + } + } else if (!key.equals(other.key)) { + return false; + } + return true; + } } 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 30446a0bf..3ee2387ed 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 @@ -12,14 +12,8 @@ import javax.persistence.Column; import javax.persistence.MappedSuperclass; /** - * {@link TenantAwareBaseEntity} extension for all entities that are named in addition to - * their technical ID. - * - * - * - * - * - * + * {@link TenantAwareBaseEntity} extension for all entities that are named in + * addition to their technical ID. */ @MappedSuperclass public abstract class NamedEntity extends TenantAwareBaseEntity { @@ -67,4 +61,42 @@ public abstract class NamedEntity extends TenantAwareBaseEntity { this.name = name; } + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final NamedEntity other = (NamedEntity) obj; + if (description == null) { + if (other.description != null) { + return false; + } + } else if (!description.equals(other.description)) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + } 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/model/SwMetadataCompositeKey.java index 2518e4b1b..f76cac155 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java @@ -11,16 +11,10 @@ package org.eclipse.hawkbit.repository.model; import java.io.Serializable; /** - * The Software Module Metadata composite key which contains the meta data key + * The Software Module meta data composite key which contains the meta data key * and the ID of the software module itself. - * - * - * */ public final class SwMetadataCompositeKey implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private String key; @@ -28,9 +22,10 @@ public final class SwMetadataCompositeKey implements Serializable { private Long softwareModule; /** - * - */ + * Default constructor for JPA. + */ public SwMetadataCompositeKey() { + // Default constructor for JPA. } /** 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 5b75bd0bd..35c7466be 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 @@ -78,4 +78,41 @@ public class TenantMetaData extends BaseEntity { this.tenant = tenant; } + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((defaultDsType == null) ? 0 : defaultDsType.hashCode()); + result = prime * result + ((tenant == null) ? 0 : tenant.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TenantMetaData other = (TenantMetaData) obj; + if (defaultDsType == null) { + if (other.defaultDsType != null) { + return false; + } + } else if (!defaultDsType.equals(other.defaultDsType)) { + return false; + } + 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/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TargetManagementTest.java index 20dffde29..c7a4cb136 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 @@ -54,15 +54,11 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Target Management") public class TargetManagementTest extends AbstractIntegrationTest { - @Test + @Test(expected = TenantNotExistException.class) @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists.") @WithUser(tenantId = "tenantWhichDoesNotExists", allSpPermissions = true, autoCreateTenant = false) public void createTargetForTenantWhichDoesNotExistThrowsTenantNotExistException() { - try { - targetManagement.createTarget(new Target("targetId123")); - fail("tenant not exist"); - } catch (final TenantNotExistException e) { - } + targetManagement.createTarget(new Target("targetId123")); } @Test From cc8a62d1d4208b33fca7a2071960b488520914e4 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 26 Mar 2016 09:27:33 +0100 Subject: [PATCH 025/344] Checked in typo by accident. --- .../org/eclipse/hawkbit/repository/DeploymentManagement.java | 1 + 1 file changed, 1 insertion(+) 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 bdeba4d0a..77f71bebf 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 @@ -534,6 +534,7 @@ public class DeploymentManagement { return saveAction; } else { throw new CancelActionNotAllowedException( + "Action [id: " + action.getId() + "] is not active and cannot be canceled"); } } From 0cc7284f6fe6ae468f83c9c985257bff33fec417 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 26 Mar 2016 16:13:58 +0100 Subject: [PATCH 026/344] Added further tests for target searches including the various filter options that we provide --- .../DistributionSetAssignmentResult.java | 2 +- .../hawkbit/repository/TargetManagement.java | 65 +- .../repository/model/TargetFilterQuery.java | 25 +- .../repository/model/TargetIdName.java | 11 +- .../TargetFilterQueryManagenmentTest.java | 3 - .../TargetManagementSearchTest.java | 805 +++++++++++++++--- .../repository/TargetManagementTest.java | 6 + .../resource/SystemManagementResource.java | 8 +- .../management/targettable/TargetTable.java | 5 +- 9 files changed, 747 insertions(+), 183 deletions(-) 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 3e61e4499..8b1df00da 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 @@ -55,7 +55,7 @@ public class DistributionSetAssignmentResult extends AssignmentResult { * @return the assignedTargets */ public List getAssignedTargets() { - return targetManagement.findTargetsByControllerID(assignedTargets); + return targetManagement.findTargetByControllerID(assignedTargets); } /** 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 9cf487641..4f89c8263 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 @@ -53,7 +53,6 @@ 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; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; @@ -155,7 +154,7 @@ public class TargetManagement { * @return List of found{@link Target}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findTargetsByControllerID(@NotEmpty final Collection controllerIDs) { + public List findTargetByControllerID(@NotEmpty final Collection controllerIDs) { return targetRepository.findAll(TargetSpecifications.byControllerIdWithStatusAndAssignedInJoin(controllerIDs)); } @@ -331,10 +330,10 @@ public class TargetManagement { } /** - * retrieves {@link Target}s by the assigned {@link DistributionSet} without + * Retrieves {@link Target}s by the assigned {@link DistributionSet} without * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible including the filtering based - * on the given {@code spec}. + * {@link Target#getActiveActions()} possible including additional filtering + * based on the given {@code spec}. * * @param distributionSetID * the ID of the {@link DistributionSet} @@ -374,7 +373,8 @@ public class TargetManagement { /** * retrieves {@link Target}s by the installed {@link DistributionSet}without * details, i.e. NO {@link Target#getTags()} and - * {@link Target#getActiveActions()} possible. + * {@link Target#getActiveActions()} possible including additional filtering + * based on the given {@code spec}. * * @param distributionSetId * the ID of the {@link DistributionSet} @@ -490,7 +490,7 @@ public class TargetManagement { if (!Strings.isNullOrEmpty(searchText)) { specList.add(TargetSpecifications.likeNameOrDescriptionOrIp(searchText)); } - if (selectTargetWithNoTag || (tagNames != null && tagNames.length > 0)) { + if (selectTargetWithNoTag != null && (selectTargetWithNoTag || (tagNames != null && tagNames.length > 0))) { specList.add(TargetSpecifications.hasTags(tagNames, selectTargetWithNoTag)); } return specList; @@ -810,14 +810,12 @@ public class TargetManagement { } /** - * finds all {@link Target#getControllerId()} for all the given parameters. + * 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 filterByDistributionId - * to find targets having the {@link DistributionSet} as - * installed or assigned. 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. @@ -825,28 +823,38 @@ public class TargetManagement { * 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 Target}s + * @return the found {@link TargetIdName}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findAllTargetIdsByFilters(final PageRequest pageRequest, - final Long filterByDistributionId, final Collection filterByStatus, - final String filterBySearchText, final Boolean selectTargetWithNoTag, final String... filterByTagNames) { + public List findAllTargetIdsByFilters(@NotNull final Pageable pageRequest, + final Collection filterByStatus, final String filterBySearchText, + final Long installedOrAssignedDistributionSetId, final Boolean selectTargetWithNoTag, + final String... filterByTagNames) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(Object[].class); final Root targetRoot = query.from(Target.class); List resultList; + + String sortProperty = Target_.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(pageRequest.getSort().iterator().next().getProperty())); + targetRoot.get(Target_.controllerId), targetRoot.get(Target_.name), targetRoot.get(sortProperty)); final Predicate[] specificationsForMultiSelect = specificationsToPredicate( - buildSpecificationList(filterByStatus, filterBySearchText, filterByDistributionId, + buildSpecificationList(filterByStatus, filterBySearchText, installedOrAssignedDistributionSetId, selectTargetWithNoTag, false, filterByTagNames), targetRoot, multiselect, cb); @@ -862,24 +870,29 @@ public class TargetManagement { } /** - * Finds all {@link Target#getControllerId()} for all the given parameter - * {@link TargetFilterQuery}. + * 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 Target}s + * @return the found {@link TargetIdName}s */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET) - public List findAllTargetIdsByTargetFilterQuery(final PageRequest pageRequest, + public List findAllTargetIdsByTargetFilterQuery(final Pageable pageRequest, @NotNull final TargetFilterQuery targetFilterQuery) { final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery query = cb.createQuery(Object[].class); final Root targetRoot = query.from(Target.class); + + String sortProperty = Target_.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(pageRequest.getSort().iterator().next().getProperty())); + targetRoot.get(Target_.controllerId), targetRoot.get(Target_.name), targetRoot.get(sortProperty)); final Specification spec = RSQLUtility.parse(targetFilterQuery.getQuery(), TargetFields.class); final List> specList = new ArrayList<>(); @@ -1072,7 +1085,7 @@ public class TargetManagement { return targetRepository.count(specs); } - private List getTargetIdNameResultSet(final PageRequest pageRequest, final CriteriaBuilder cb, + private List getTargetIdNameResultSet(final Pageable pageRequest, final CriteriaBuilder cb, final Root targetRoot, final CriteriaQuery multiselect) { List resultList; if (pageRequest.getSort() != null) { 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 f14fc26e2..80721a3d2 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 @@ -15,18 +15,14 @@ import javax.persistence.Table; import javax.persistence.UniqueConstraint; /** - * + * 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") ) + "name", "tenant" }, name = "uk_tenant_custom_filter_name")) public class TargetFilterQuery extends TenantAwareBaseEntity { - /** - * - * - */ private static final long serialVersionUID = 7493966984413479089L; @Column(name = "name", length = 64) @@ -36,8 +32,7 @@ public class TargetFilterQuery extends TenantAwareBaseEntity { private String query; public TargetFilterQuery() { - name = null; - query = null; + // Default constructor for JPA. } public TargetFilterQuery(final String name, final String query) { @@ -45,32 +40,18 @@ public class TargetFilterQuery extends TenantAwareBaseEntity { this.query = query; } - /** - * @return the name - */ public String getName() { return name; } - /** - * @param name - * the name to set - */ public void setName(final String name) { this.name = name; } - /** - * @return the query - */ public String getQuery() { return query; } - /** - * @param query - * the query to set - */ public void setQuery(final String query) { this.query = query; } 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 f7a63b775..f06fa8cf0 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 @@ -13,19 +13,12 @@ import java.io.Serializable; /** * ID class of the {@link Target} which contains the * {@link Target#getControllerId()} and the {@link Target#getName()} in one - * object. Often it's necessary to remeber the IDs of the {@link Target} and the - * resolve for e.g. the UI the name of the target, this is very costly + * object. Often it's necessary to remember the IDs of the {@link Target} and + * the resolve for e.g. the UI the name of the target, this is very costly * operation, so it's much better if the ID and the name of the {@link Target} * is already in memory available. - * - * - * - * */ public class TargetIdName implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private final long targetId; 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 73528ca5b..87fdff253 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 @@ -22,10 +22,7 @@ import ru.yandex.qatools.allure.annotations.Stories; /** * Test class for {@link TargetFilterQueryManagement}. * - * - * */ - @Features("Component Tests - Repository") @Stories("Target Filter Query Management") public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { 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 93806e626..0438ac512 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 @@ -11,28 +11,34 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; 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.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; 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.PageRequest; import org.springframework.data.domain.Slice; +import com.google.common.collect.Lists; import com.google.common.primitives.Ints; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Step; import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Repository") @@ -40,152 +46,626 @@ import ru.yandex.qatools.allure.annotations.Stories; public class TargetManagementSearchTest extends AbstractIntegrationTest { @Test - @Description("Tests different parameter combinations for target search operations. That includes both the test itself as a count operation with the same filters.") + @Description("Tests different parameter combinations for target search operations. " + + "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 targTagA = tagManagement.createTargetTag(new TargetTag("TargTag-A")); - final TargetTag targTagB = tagManagement.createTargetTag(new TargetTag("TargTag-B")); - final TargetTag targTagC = tagManagement.createTargetTag(new TargetTag("TargTag-C")); - final TargetTag targTagD = tagManagement.createTargetTag(new TargetTag("TargTag-D")); - - // TODO kaizimmerm: test also installedDS (not only assignedDS) + 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 DistributionSet setA = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); + final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, + distributionSetManagement); + final String targetDsAIdPref = "targ-A"; List targAs = targetManagement.createTargets( TestDataUtil.buildTargetFixtures(100, targetDsAIdPref, targetDsAIdPref.concat(" description"))); - targAs = targetManagement.toggleTagAssignment(targAs, targTagA).getAssignedTargets(); + targAs = targetManagement.toggleTagAssignment(targAs, targTagX).getAssignedTargets(); final String targetDsBIdPref = "targ-B"; List targBs = targetManagement.createTargets( TestDataUtil.buildTargetFixtures(100, targetDsBIdPref, targetDsBIdPref.concat(" description"))); - targBs = targetManagement.toggleTagAssignment(targBs, targTagB).getAssignedTargets(); - targBs = targetManagement.toggleTagAssignment(targBs, targTagD).getAssignedTargets(); + targBs = targetManagement.toggleTagAssignment(targBs, targTagY).getAssignedTargets(); + targBs = targetManagement.toggleTagAssignment(targBs, targTagW).getAssignedTargets(); final String targetDsCIdPref = "targ-C"; List targCs = targetManagement.createTargets( TestDataUtil.buildTargetFixtures(100, targetDsCIdPref, targetDsCIdPref.concat(" description"))); - targCs = targetManagement.toggleTagAssignment(targCs, targTagC).getAssignedTargets(); - targCs = targetManagement.toggleTagAssignment(targCs, targTagD).getAssignedTargets(); + targCs = targetManagement.toggleTagAssignment(targCs, targTagZ).getAssignedTargets(); + targCs = targetManagement.toggleTagAssignment(targCs, targTagW).getAssignedTargets(); final String targetDsDIdPref = "targ-D"; - final Iterable targDs = targetManagement.createTargets( + final List targDs = targetManagement.createTargets( TestDataUtil.buildTargetFixtures(100, targetDsDIdPref, targetDsDIdPref.concat(" description"))); - deploymentManagement.assignDistributionSet(setA.getId(), targCs.iterator().next().getControllerId()); - deploymentManagement.assignDistributionSet(setA.getId(), targAs.iterator().next().getControllerId()); - deploymentManagement.assignDistributionSet(setA.getId(), targBs.iterator().next().getControllerId()); + final String assignedC = targCs.iterator().next().getControllerId(); + deploymentManagement.assignDistributionSet(setA.getId(), assignedC); + final String assignedA = targAs.iterator().next().getControllerId(); + deploymentManagement.assignDistributionSet(setA.getId(), assignedA); + final String assignedB = targBs.iterator().next().getControllerId(); + deploymentManagement.assignDistributionSet(setA.getId(), assignedB); + final String installedC = targCs.iterator().next().getControllerId(); + final Long actionId = deploymentManagement.assignDistributionSet(installedSet.getId(), assignedC).getActions() + .get(0); - final List unknown = new ArrayList(); + // set one installed DS also + final Action action = deploymentManagement.findActionWithDetails(actionId); + action.setStatus(Status.FINISHED); + controllerManagament.addUpdateActionStatus( + new ActionStatus(action, Status.FINISHED, System.currentTimeMillis(), "message"), action); + deploymentManagement.assignDistributionSet(setA.getId(), installedC); + + final List unknown = new ArrayList<>(); unknown.add(TargetUpdateStatus.UNKNOWN); - final List pending = new ArrayList(); + final List pending = new ArrayList<>(); pending.add(TargetUpdateStatus.PENDING); - final List both = new ArrayList(); + final List both = new ArrayList<>(); both.add(TargetUpdateStatus.UNKNOWN); both.add(TargetUpdateStatus.PENDING); - final PageRequest pageReq = new PageRequest(0, 500); // try to find several targets with different filter settings + verifyThatRepositoryContains400Targets(); + verifyThat200TargetsHaveTagD(targTagW, concat(targBs, targCs)); + verifyThat100TargetsContainsGivenTextAndHaveTagAssigned(targTagY, targTagW, targBs); + verifyThat1TargetHasTagHasDescOrNameAndDs(targTagW, setA, targetManagement.findTargetByControllerID(assignedC)); + verifyThat0TargetsWithTagAndDescOrNameHasDS(targTagW, setA); + verifyThat0TargetsWithNameOrdescAndDSHaveTag(targTagX, setA); + verifyThat3TargetsHaveDSAssigned(setA, + targetManagement.findTargetByControllerID(Lists.newArrayList(assignedA, assignedB, assignedC))); + verifyThat1TargetWithDescOrNameHasDS(setA, targetManagement.findTargetByControllerID(assignedA)); + List expected = concat(targAs, targBs, targCs, targDs); + expected.removeAll( + targetManagement.findTargetByControllerID(Lists.newArrayList(assignedA, assignedB, assignedC))); + verifyThat397TargetsAreInStatusUnknown(unknown, expected); + expected = concat(targBs, targCs); + expected.removeAll(targetManagement.findTargetByControllerID(Lists.newArrayList(assignedB, assignedC))); + verifyThat198TargetsAreInStatusUnknownAndHaveGivenTags(targTagY, targTagW, unknown, expected); + verfyThat0TargetsAreInStatusUnknownAndHaveDSAssigned(setA, unknown); + expected = concat(targAs); + expected.remove(targetManagement.findTargetByControllerID(assignedA)); + verifyThat99TargetsWithNameOrDescriptionAreInGivenStatus(unknown, expected); + expected = concat(targBs); + expected.remove(targetManagement.findTargetByControllerID(assignedB)); + verifyThat99TargetsWithGivenNameOrDescAndTagAreInStatusUnknown(targTagW, unknown, expected); + verifyThat3TargetsAreInStatusPending(pending, + targetManagement.findTargetByControllerID(Lists.newArrayList(assignedA, assignedB, assignedC))); + verifyThat3TargetsWithGivenDSAreInPending(setA, pending, + targetManagement.findTargetByControllerID(Lists.newArrayList(assignedA, assignedB, assignedC))); + verifyThat1TargetWithGivenNameOrDescAndDSIsInPending(setA, pending, + targetManagement.findTargetByControllerID(assignedA)); + verifyThat1TargetWithGivenNameOrDescAndTagAndDSIsInPending(targTagW, setA, pending, + targetManagement.findTargetByControllerID(assignedB)); + verifyThat2TargetsWithGivenTagAndDSIsInPending(targTagW, setA, pending, + targetManagement.findTargetByControllerID(Lists.newArrayList(assignedB, assignedC))); + verifyThat2TargetsWithGivenTagAreInPending(targTagW, pending, + targetManagement.findTargetByControllerID(Lists.newArrayList(assignedB, assignedC))); + verifyThat200targetsWithGivenTagAreInStatusPendingorUnknown(targTagW, both, concat(targBs, targCs)); + verfiyThat1TargetAIsInStatusPendingAndHasDSInstalled(installedSet, pending, + targetManagement.findTargetByControllerID(installedC)); + } - // TODO kaizimmerm: comment and check also the content itself, not only - // the numbers - // (containsOnly) - assertThat(targetManagement.countTargetsAll()).isEqualTo(400); + @Step + private void verfiyThat1TargetAIsInStatusPendingAndHasDSInstalled(final DistributionSet installedSet, + final List pending, final Target expected) { + final TargetIdName expectedIdName = convertToIdName(expected); + final String query = "updatestatus==pending and installedds.name==" + installedSet.getName(); - assertThat(targetManagement.findTargetByFilters(pageReq, null, null, null, Boolean.FALSE, targTagD.getName()) - .getNumberOfElements()).isEqualTo(200).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(null, null, null, Boolean.FALSE, targTagD.getName()))); + assertThat(targetManagement + .findTargetByFilters(pageReq, pending, null, installedSet.getId(), Boolean.FALSE, new String[0]) + .getContent()).as("has number of elements").hasSize(1) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, null, + installedSet.getId(), Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsExactly(expected) + .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()); - Slice x = targetManagement.findTargetByFilters(pageReq, null, "%targ-B%", null, Boolean.FALSE, - targTagB.getName(), targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(100).isEqualTo(Ints.saturatedCast(targetManagement - .countTargetByFilters(null, "%targ-B%", null, Boolean.FALSE, targTagB.getName(), targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, null, "%targ-C%", setA.getId(), Boolean.FALSE, - targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(1).isEqualTo(Ints.saturatedCast(targetManagement - .countTargetByFilters(null, "%targ-C%", setA.getId(), Boolean.FALSE, targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, null, "%targ-A%", setA.getId(), Boolean.FALSE, - targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(0).isEqualTo(Ints.saturatedCast(targetManagement - .countTargetByFilters(null, "%targ-A%", setA.getId(), Boolean.FALSE, targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, null, "%targ-C%", setA.getId(), Boolean.FALSE, - targTagA.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(0).isEqualTo(Ints.saturatedCast(targetManagement - .countTargetByFilters(null, "%targ-C%", setA.getId(), Boolean.FALSE, targTagA.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, null, null, setA.getId(), Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(3).isEqualTo(Ints - .saturatedCast(targetManagement.countTargetByFilters(null, null, setA.getId(), Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, null, "%targ-A%", setA.getId(), Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(1).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(null, "%targ-A%", setA.getId(), Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, unknown, null, null, Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(397).isEqualTo( - Ints.saturatedCast(targetManagement.countTargetByFilters(unknown, null, null, Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, unknown, null, null, Boolean.FALSE, targTagB.getName(), - targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(198).isEqualTo(Ints.saturatedCast(targetManagement - .countTargetByFilters(unknown, null, null, Boolean.FALSE, targTagB.getName(), targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, unknown, null, setA.getId(), Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(0).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(unknown, null, setA.getId(), Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, unknown, "%targ-A%", null, Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(99).isEqualTo(Ints - .saturatedCast(targetManagement.countTargetByFilters(unknown, "%targ-A%", null, Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, unknown, "%targ-B%", null, Boolean.FALSE, targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(99).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(unknown, "%targ-B%", null, Boolean.FALSE, targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, unknown, null, null, Boolean.FALSE, targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(198).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(unknown, null, null, Boolean.FALSE, targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, pending, null, null, Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(3).isEqualTo( - Ints.saturatedCast(targetManagement.countTargetByFilters(pending, null, null, Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, pending, null, setA.getId(), Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(3).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(pending, null, setA.getId(), Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, pending, "%targ-A%", setA.getId(), Boolean.FALSE, null); - assertThat(x.getNumberOfElements()).isEqualTo(1).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(pending, "%targ-A%", setA.getId(), Boolean.FALSE, null))); - - x = targetManagement.findTargetByFilters(pageReq, pending, "%targ-B%", setA.getId(), Boolean.FALSE, - targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(1).isEqualTo(Ints.saturatedCast(targetManagement - .countTargetByFilters(pending, "%targ-B%", setA.getId(), Boolean.FALSE, targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, pending, null, setA.getId(), Boolean.FALSE, - targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(2).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(pending, null, setA.getId(), Boolean.FALSE, targTagD.getName()))); - - x = targetManagement.findTargetByFilters(pageReq, pending, null, null, Boolean.FALSE, targTagD.getName()); - assertThat(x.getNumberOfElements()).isEqualTo(2).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(pending, null, null, Boolean.FALSE, targTagD.getName()))); - - // Both status: 2 pending and 198 unknown - assertThat(targetManagement.findTargetByFilters(pageReq, both, null, null, Boolean.FALSE, targTagD.getName()) - .getNumberOfElements()).isEqualTo(200).isEqualTo(Ints.saturatedCast( - targetManagement.countTargetByFilters(both, null, null, Boolean.FALSE, targTagD.getName()))); + 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))); + + } + + @Step + private void verifyThat200targetsWithGivenTagAreInStatusPendingorUnknown(final TargetTag targTagW, + final List both, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + + final String query = "(updatestatus==pending or updatestatus==unknown) and tag==" + targTagW.getName(); + + assertThat(targetManagement.findTargetByFilters(pageReq, both, null, null, Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(200) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(both, null, null, + Boolean.FALSE, targTagW.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + private static List convertToIdNames(final List expected) { + return expected.stream() + .map(target -> new TargetIdName(target.getId(), target.getControllerId(), target.getName())) + .collect(Collectors.toList()); + } + + private static TargetIdName convertToIdName(final Target target) { + return new TargetIdName(target.getId(), target.getControllerId(), target.getName()); + } + + @Step + private void verifyThat2TargetsWithGivenTagAreInPending(final TargetTag targTagW, + final List pending, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==pending and tag==" + targTagW.getName(); + + assertThat(targetManagement.findTargetByFilters(pageReq, pending, null, null, Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(2) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, null, null, + Boolean.FALSE, targTagW.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat2TargetsWithGivenTagAndDSIsInPending(final TargetTag targTagW, final DistributionSet setA, + final List pending, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==pending and (assignedds.name==" + setA.getName() + " or installedds.name==" + + setA.getName() + ") and tag==" + targTagW.getName(); + + assertThat(targetManagement + .findTargetByFilters(pageReq, pending, null, setA.getId(), Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(2) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, null, setA.getId(), + Boolean.FALSE, targTagW.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat1TargetWithGivenNameOrDescAndTagAndDSIsInPending(final TargetTag targTagW, + final DistributionSet setA, final List pending, final Target expected) { + final TargetIdName expectedIdName = convertToIdName(expected); + final String query = "updatestatus==pending and (assignedds.name==" + setA.getName() + " or installedds.name==" + + setA.getName() + ") and (name==*targ-B* or description==*targ-B*) and tag==" + targTagW.getName(); + + assertThat(targetManagement + .findTargetByFilters(pageReq, pending, "%targ-B%", setA.getId(), Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(1) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, "%targ-B%", + setA.getId(), Boolean.FALSE, targTagW.getName()))) + .as("and contains the following elements").containsExactly(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat1TargetWithGivenNameOrDescAndDSIsInPending(final DistributionSet setA, + final List pending, final Target expected) { + final TargetIdName expectedIdName = convertToIdName(expected); + final String query = "updatestatus==pending and (assignedds.name==" + setA.getName() + " or installedds.name==" + + setA.getName() + ") and (name==*targ-A* or description==*targ-A*)"; + + assertThat(targetManagement + .findTargetByFilters(pageReq, pending, "%targ-A%", setA.getId(), Boolean.FALSE, new String[0]) + .getContent()).as("has number of elements").hasSize(1) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, "%targ-A%", + setA.getId(), Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsExactly(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat3TargetsWithGivenDSAreInPending(final DistributionSet setA, + final List pending, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==pending and (assignedds.name==" + setA.getName() + " or installedds.name==" + + setA.getName() + ")"; + + assertThat(targetManagement + .findTargetByFilters(pageReq, pending, null, setA.getId(), Boolean.FALSE, new String[0]).getContent()) + .as("has number of elements").hasSize(3).as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, null, setA.getId(), + Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat3TargetsAreInStatusPending(final List pending, + final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==pending"; + + assertThat(targetManagement.findTargetByFilters(pageReq, pending, null, null, Boolean.FALSE, new String[0]) + .getContent()).as("has number of elements").hasSize(3) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(pending, null, null, + Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat99TargetsWithGivenNameOrDescAndTagAreInStatusUnknown(final TargetTag targTagW, + final List unknown, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==unknown and (name==*targ-B* or description==*targ-B*) and tag==" + + targTagW.getName(); + + assertThat(targetManagement + .findTargetByFilters(pageReq, unknown, "%targ-B%", null, Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(99) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(unknown, "%targ-B%", null, + Boolean.FALSE, targTagW.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat99TargetsWithNameOrDescriptionAreInGivenStatus(final List unknown, + final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==unknown and (name==*targ-A* or description==*targ-A*)"; + + assertThat(targetManagement + .findTargetByFilters(pageReq, unknown, "%targ-A%", null, Boolean.FALSE, new String[0]).getContent()) + .as("has number of elements").hasSize(99).as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(unknown, "%targ-A%", null, + Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verfyThat0TargetsAreInStatusUnknownAndHaveDSAssigned(final DistributionSet setA, + final List unknown) { + final String query = "updatestatus==unknown and (assignedds.name==" + setA.getName() + " or installedds.name==" + + setA.getName() + ")"; + + assertThat(targetManagement + .findTargetByFilters(pageReq, unknown, null, setA.getId(), Boolean.FALSE, new String[0]).getContent()) + .as("has number of elements").hasSize(0).as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(unknown, null, setA.getId(), + Boolean.FALSE, new String[0]))) + .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()); + + 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))); + } + + @Step + private void verifyThat198TargetsAreInStatusUnknownAndHaveGivenTags(final TargetTag targTagY, + final TargetTag targTagW, final List unknown, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==unknown and (tag==" + targTagY.getName() + " or tag==" + targTagW.getName() + + ")"; + + assertThat(targetManagement.findTargetByFilters(pageReq, unknown, null, null, Boolean.FALSE, targTagY.getName(), + targTagW.getName()).getContent()).as("has number of elements").hasSize(198) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(unknown, null, null, + Boolean.FALSE, targTagY.getName(), targTagW.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat397TargetsAreInStatusUnknown(final List unknown, + final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "updatestatus==unknown"; + + assertThat(targetManagement.findTargetByFilters(pageReq, unknown, null, null, Boolean.FALSE, new String[0]) + .getContent()).as("has number of elements").hasSize(397) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(unknown, null, null, + Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat1TargetWithDescOrNameHasDS(final DistributionSet setA, final Target expected) { + final TargetIdName expectedIdName = convertToIdName(expected); + final String query = "(name==*targ-A* or description==*targ-A*) and (assignedds.name==" + setA.getName() + + " or installedds.name==" + setA.getName() + ")"; + + assertThat(targetManagement + .findTargetByFilters(pageReq, null, "%targ-A%", setA.getId(), Boolean.FALSE, new String[0]) + .getContent()).as("has number of elements").hasSize(1) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, "%targ-A%", + setA.getId(), Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsExactly(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat3TargetsHaveDSAssigned(final DistributionSet setA, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "assignedds.name==" + setA.getName() + " or installedds.name==" + setA.getName(); + + assertThat(targetManagement.findTargetByFilters(pageReq, null, null, setA.getId(), Boolean.FALSE, new String[0]) + .getContent()).as("has number of elements").hasSize(3) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, null, setA.getId(), + Boolean.FALSE, new String[0]))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat0TargetsWithNameOrdescAndDSHaveTag(final TargetTag targTagX, final DistributionSet setA) { + final String query = "(name==*targ-C* or description==*targ-C*) and tag==" + targTagX.getName() + + " and (assignedds.name==" + setA.getName() + " or installedds.name==" + setA.getName() + ")"; + assertThat(targetManagement + .findTargetByFilters(pageReq, null, "%targ-C%", setA.getId(), Boolean.FALSE, targTagX.getName()) + .getContent()).as("has number of elements").hasSize(0) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, "%targ-C%", + setA.getId(), Boolean.FALSE, targTagX.getName()))) + .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()); + + 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))); + } + + @Step + private void verifyThat0TargetsWithTagAndDescOrNameHasDS(final TargetTag targTagW, final DistributionSet setA) { + final String query = "(name==*targ-A* or description==*targ-A*) and tag==" + targTagW.getName() + + " and (assignedds.name==" + setA.getName() + " or installedds.name==" + setA.getName() + ")"; + assertThat(targetManagement + .findTargetByFilters(pageReq, null, "%targ-A%", setA.getId(), Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(0) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, "%targ-A%", + setA.getId(), Boolean.FALSE, targTagW.getName()))) + .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()); + + 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))); + } + + @Step + private void verifyThat1TargetHasTagHasDescOrNameAndDs(final TargetTag targTagW, final DistributionSet setA, + final Target expected) { + final TargetIdName expectedIdName = convertToIdName(expected); + final String query = "(name==*targ-c* or description==*targ-C*) and tag==" + targTagW.getName() + + " and (assignedds.name==" + setA.getName() + " or installedds.name==" + setA.getName() + ")"; + assertThat(targetManagement + .findTargetByFilters(pageReq, null, "%targ-C%", setA.getId(), Boolean.FALSE, targTagW.getName()) + .getContent()).as("has number of elements").hasSize(1) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, "%targ-C%", + setA.getId(), Boolean.FALSE, targTagW.getName()))) + .as("and contains the following elements").containsExactly(expected) + .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()); + + 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))); + } + + @Step + private void verifyThat100TargetsContainsGivenTextAndHaveTagAssigned(final TargetTag targTagY, + final TargetTag targTagW, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "(name==*targ-B* or description==*targ-B*) and (tag==" + targTagY.getName() + " or tag==" + + targTagW.getName() + ")"; + assertThat(targetManagement.findTargetByFilters(pageReq, null, "%targ-B%", null, Boolean.FALSE, + targTagY.getName(), targTagW.getName()).getContent()).as("has number of elements").hasSize(100) + .as("that number is also returned by count query") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, "%targ-B%", null, + Boolean.FALSE, targTagY.getName(), targTagW.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + + } + + @SafeVarargs + private final List concat(final List... targets) { + final List result = new ArrayList<>(); + Arrays.asList(targets).forEach(result::addAll); + return result; + } + + @Step + private void verifyThat200TargetsHaveTagD(final TargetTag targTagD, final List expected) { + final List expectedIdNames = convertToIdNames(expected); + final String query = "tag==" + targTagD.getName(); + assertThat(targetManagement.findTargetByFilters(pageReq, null, null, null, Boolean.FALSE, targTagD.getName()) + .getContent()).as("Expected number of results is").hasSize(200) + .as("and is expected number of results is equal to ") + .hasSize(Ints.saturatedCast(targetManagement.countTargetByFilters(null, null, null, + Boolean.FALSE, targTagD.getName()))) + .as("and contains the following elements").containsAll(expected) + .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()); + + 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))); + + } + + @Step + private void verifyThatRepositoryContains400Targets() { + assertThat(targetManagement.findTargetByFilters(pageReq, null, null, null, null, new String[0]).getContent()) + .as("Overall we expect that many targets in the repository").hasSize(400) + .as("which is also reflected by repository count") + .hasSize(Ints.saturatedCast(targetManagement.countTargetsAll())) + .as("which is also reflected by call without specification") + .containsAll(targetManagement.findTargetsAll(pageReq).getContent()); } - // TODO kaizimmerm: add filter tests @Test @Description("Tests the correct order of targets based on selected distribution set. The system expects to have an order based on installed, assigned DS.") public void targetSearchWithVariousFilterCombinationsAndOrderByDistributionSet() { @@ -205,7 +685,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { targInstalled = sendUpdateActionStatusToTargets(ds, targInstalled, Status.FINISHED, "installed"); final Slice result = targetManagement.findTargetsAllOrderByLinkedDistributionSet(pageReq, ds.getId(), - null, null, null, Boolean.FALSE, null); + null, null, null, Boolean.FALSE, new String[0]); final Comparator byId = (e1, e2) -> Long.compare(e2.getId(), e1.getId()); @@ -222,6 +702,103 @@ 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")); + final List assignedtargets = targetManagement + .createTargets(TestDataUtil.generateTargets(10, "assigned")); + + deploymentManagement.assignDistributionSet(assignedSet, assignedtargets); + + assertThat(targetManagement.findTargetByAssignedDistributionSet(assignedSet.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 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")); + final 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"), action); + }); + deploymentManagement.assignDistributionSet(assignedSet, assignedtargets); + + 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() { + final DistributionSet assignedSet = TestDataUtil.generateDistributionSet("", softwareManagement, + distributionSetManagement); + final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, + distributionSetManagement); + targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); + final 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"), action); + }); + deploymentManagement.assignDistributionSet(assignedSet, installedtargets); + + assertThat(targetManagement.findTargetByInstalledDistributionSet(installedSet.getId(), pageReq)) + .as("Contains the assigned targets").containsAll(installedtargets) + .as("and that means the following expected amount").hasSize(10); + + } + + @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")); + final 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"), action); + }); + deploymentManagement.assignDistributionSet(assignedSet, installedtargets); + + 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(); 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 c7a4cb136..4a664f5b8 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 @@ -202,6 +202,12 @@ public class TargetManagementTest extends AbstractIntegrationTest { } + @Test + @Description("Ensures that repositoy returns null if given controller ID does not exist without exception.") + public void findTargetByControllerIDWithDetailsReturnsNullForNonexisting() { + assertThat(targetManagement.findTargetByControllerIDWithDetails("dsfsdfsdfsd")).as("Expected as").isNull(); + } + @Test @Description("Checks if the EntityAlreadyExistsException is thrown if the targets with the same controller ID are created twice.") public void createMultipleTargetsDuplicate() { 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 b3a461915..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 @@ -88,7 +88,7 @@ public class SystemManagementResource { .setOverallTargets(report.getOverallTargets()).setOverallTenants(report.getTenants().size()); result.setTenantStats( - report.getTenants().stream().map(tenant -> convertTenant(tenant)).collect(Collectors.toList())); + report.getTenants().stream().map(SystemManagementResource::convertTenant).collect(Collectors.toList())); return ResponseEntity.ok(result); } @@ -104,7 +104,7 @@ public class SystemManagementResource { } /** - * Returns a list of all caches containing currently. + * Returns a list of all caches. * * @return a list of caches for all tenants */ @@ -112,8 +112,8 @@ public class SystemManagementResource { @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) public ResponseEntity> getCaches() { final Collection cacheNames = cacheManager.getCacheNames(); - return ResponseEntity.ok(cacheNames.stream().map(cacheName -> cacheManager.getCache(cacheName)) - .map(cache -> cacheRest(cache)).collect(Collectors.toList())); + return ResponseEntity + .ok(cacheNames.stream().map(cacheManager::getCache).map(this::cacheRest).collect(Collectors.toList())); } /** 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 960553a6a..88d82bd9d 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 @@ -15,7 +15,6 @@ 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 java.util.stream.Collectors; @@ -141,8 +140,6 @@ public class TargetTable extends AbstractTable implements Handler { private Boolean isTargetPinned = Boolean.FALSE; private ShortcutAction actionSelectAll; private ShortcutAction actionUnSelectAll; - - @Override @PostConstruct @@ -1038,7 +1035,7 @@ public class TargetTable extends AbstractTable implements Handler { final String[] tagArray = tagList.toArray(new String[tagList.size()]); List targetIdList; - targetIdList = targetManagement.findAllTargetIdsByFilters(pageRequest, filterByDistId, statusList, searchText, + targetIdList = targetManagement.findAllTargetIdsByFilters(pageRequest, statusList, searchText, filterByDistId, noTagSelected, tagList.toArray(tagArray)); Collections.reverse(targetIdList); return targetIdList; From c9566e61ce6bf4f768a739788336e3e1344eda33 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sun, 27 Mar 2016 10:36:55 +0200 Subject: [PATCH 027/344] Used lambdas to reduce boilerplate code. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/TargetManagement.java | 14 +- .../DistributionSetSpecification.java | 158 +++++------------- .../DistributionSetTypeSpecification.java | 56 +------ .../SoftwareModuleSpecification.java | 62 ++----- .../TargetFilterQuerySpecification.java | 21 +-- .../specifications/TargetSpecifications.java | 143 +++++----------- 6 files changed, 112 insertions(+), 342 deletions(-) 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 4f89c8263..0e0e474b2 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 @@ -43,7 +43,7 @@ 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.TargetTagAssigmentResult; +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; @@ -534,7 +534,7 @@ public class TargetManagement { @Transactional @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public TargetTagAssigmentResult toggleTagAssignment(@NotEmpty final List targets, + public TargetTagAssignmentResult toggleTagAssignment(@NotEmpty final List targets, @NotNull final TargetTag tag) { return toggleTagAssignment( targets.stream().map(target -> target.getControllerId()).collect(Collectors.toList()), tag.getName()); @@ -556,7 +556,7 @@ public class TargetManagement { @Transactional @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) - public TargetTagAssigmentResult toggleTagAssignment(@NotEmpty final Collection targetIds, + public TargetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection targetIds, @NotNull final String tagName) { final TargetTag tag = targetTagRepository.findByNameEquals(tagName); final List alreadyAssignedTargets = targetRepository.findByTagNameAndControllerIdIn(tagName, targetIds); @@ -566,7 +566,7 @@ public class TargetManagement { // all are already assigned -> unassign if (alreadyAssignedTargets.size() == allTargets.size()) { alreadyAssignedTargets.forEach(target -> target.getTags().remove(tag)); - final TargetTagAssigmentResult result = new TargetTagAssigmentResult(0, 0, alreadyAssignedTargets.size(), + final TargetTagAssignmentResult result = new TargetTagAssignmentResult(0, 0, alreadyAssignedTargets.size(), Collections.emptyList(), alreadyAssignedTargets, tag); afterCommit.afterCommit(() -> eventBus.post(new TargetTagAssigmentResultEvent(result))); @@ -576,7 +576,7 @@ public class TargetManagement { allTargets.removeAll(alreadyAssignedTargets); // some or none are assigned -> assign allTargets.forEach(target -> target.getTags().add(tag)); - final TargetTagAssigmentResult result = new TargetTagAssigmentResult(alreadyAssignedTargets.size(), + final TargetTagAssignmentResult result = new TargetTagAssignmentResult(alreadyAssignedTargets.size(), allTargets.size(), 0, targetRepository.save(allTargets), Collections.emptyList(), tag); afterCommit.afterCommit(() -> eventBus.post(new TargetTagAssigmentResultEvent(result))); @@ -607,7 +607,7 @@ public class TargetManagement { final List save = targetRepository.save(allTargets); afterCommit.afterCommit(() -> { - final TargetTagAssigmentResult assigmentResult = new TargetTagAssigmentResult(0, save.size(), 0, save, + final TargetTagAssignmentResult assigmentResult = new TargetTagAssignmentResult(0, save.size(), 0, save, Collections.emptyList(), tag); eventBus.post(new TargetTagAssigmentResultEvent(assigmentResult)); }); @@ -620,7 +620,7 @@ public class TargetManagement { final List save = targetRepository.save(targets); afterCommit.afterCommit(() -> { - final TargetTagAssigmentResult assigmentResult = new TargetTagAssigmentResult(0, 0, save.size(), + final TargetTagAssignmentResult assigmentResult = new TargetTagAssignmentResult(0, 0, save.size(), Collections.emptyList(), save, tag); eventBus.post(new TargetTagAssigmentResultEvent(assigmentResult)); }); 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/specifications/DistributionSetSpecification.java index 4150229c6..b95f0b8e7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetSpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetSpecification.java @@ -11,13 +11,11 @@ package org.eclipse.hawkbit.repository.specifications; import java.util.Collection; 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.Path; import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; import javax.persistence.criteria.SetJoin; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -33,9 +31,7 @@ import org.springframework.data.jpa.domain.Specification; /** * Specifications class for {@link DistributionSet}s. The class provides Spring - * Data JPQL Specifications - * - * + * Data JPQL Specifications. * */ public final class DistributionSetSpecification { @@ -53,16 +49,8 @@ public final class DistributionSetSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification isDeleted(final Boolean isDeleted) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.equal(targetRoot. get(DistributionSet_.deleted), isDeleted); - return predicate; - } - }; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSet_.deleted), isDeleted); - return spec; } /** @@ -75,16 +63,8 @@ public final class DistributionSetSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification isCompleted(final Boolean isCompleted) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.equal(targetRoot. get(DistributionSet_.complete), isCompleted); - return predicate; - } - }; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSet_.complete), isCompleted); - return spec; } /** @@ -96,21 +76,15 @@ public final class DistributionSetSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byId(final Long distid) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { + 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); + query.distinct(true); - 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); - query.distinct(true); - - return predicate; - } + return predicate; }; - return spec; } /** @@ -122,20 +96,14 @@ public final class DistributionSetSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byIds(final Collection distids) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder 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); - query.distinct(true); - return predicate; - } + 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); + query.distinct(true); + return predicate; }; - return spec; } /** @@ -147,21 +115,10 @@ public final class DistributionSetSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification likeNameOrDescriptionOrVersion(final String subString) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = 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())); - return predicate; - } - }; - - return spec; + 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())); } /** @@ -176,19 +133,13 @@ public final class DistributionSetSpecification { */ public static Specification hasTags(final Collection tagNames, final Boolean selectDSWithNoTag) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final SetJoin tags = targetRoot.join(DistributionSet_.tags, - JoinType.LEFT); - final Predicate predicate = getPredicate(tags, tagNames, selectDSWithNoTag, cb); - query.distinct(true); - return predicate; - } + return (targetRoot, query, cb) -> { + final SetJoin tags = targetRoot.join(DistributionSet_.tags, + JoinType.LEFT); + final Predicate predicate = getPredicate(tags, tagNames, selectDSWithNoTag, cb); + query.distinct(true); + return predicate; }; - - return spec; } private static Predicate getPredicate(final SetJoin tags, @@ -218,20 +169,10 @@ public final class DistributionSetSpecification { */ public static Specification equalsNameAndVersionIgnoreCase(final String name, final String version) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.and( - // formatter:off - cb.equal(cb.lower(targetRoot. get(DistributionSet_.name)), name.toLowerCase()), - cb.equal(cb.lower(targetRoot. get(DistributionSet_.version)), version.toLowerCase())); - // formatter:on - return predicate; - } - }; + 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())); - return spec; } /** @@ -243,16 +184,8 @@ public final class DistributionSetSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byType(final DistributionSetType type) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.equal(targetRoot. get(DistributionSet_.type), type); - return predicate; - } - }; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSet_.type), type); - return spec; } /** @@ -263,18 +196,12 @@ public final class DistributionSetSpecification { * installed to the given targetId */ public static Specification installedTarget(final String installedTargetId) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root dsRoot, final CriteriaQuery query, - final CriteriaBuilder 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); - } + 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); }; - - return spec; } /** @@ -285,16 +212,11 @@ public final class DistributionSetSpecification { * assigned to the given targetId */ public static Specification assignedTarget(final String assignedTargetId) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root dsRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final ListJoin assignedTargetJoin = dsRoot - .join(DistributionSet_.assignedToTargets, JoinType.INNER); - return cb.equal(assignedTargetJoin.get(Target_.controllerId), assignedTargetId); - } + return (dsRoot, query, cb) -> { + final ListJoin assignedTargetJoin = dsRoot.join(DistributionSet_.assignedToTargets, + JoinType.INNER); + return cb.equal(assignedTargetJoin.get(Target_.controllerId), assignedTargetId); }; - return spec; } } 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/specifications/DistributionSetTypeSpecification.java index 1caa5ef59..13776deb0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetTypeSpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/DistributionSetTypeSpecification.java @@ -8,22 +8,14 @@ */ package org.eclipse.hawkbit.repository.specifications; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; - 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; /** - * - * - * - * - * + * Specifications class for {@link DistributionSetType}s. The class provides + * Spring Data JPQL Specifications. */ public final class DistributionSetTypeSpecification { private DistributionSetTypeSpecification() { @@ -40,16 +32,7 @@ public final class DistributionSetTypeSpecification { * @return the {@link DistributionSetType} {@link Specification} */ public static Specification isDeleted(final Boolean isDeleted) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.equal(targetRoot. get(DistributionSetType_.deleted), isDeleted); - return predicate; - } - }; - - return spec; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.deleted), isDeleted); } /** @@ -62,16 +45,7 @@ public final class DistributionSetTypeSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byId(final Long distid) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - - final Predicate predicate = cb.equal(targetRoot. get(DistributionSetType_.id), distid); - return predicate; - } - }; - return spec; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.id), distid); } /** @@ -84,16 +58,7 @@ public final class DistributionSetTypeSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byName(final String name) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - - final Predicate predicate = cb.equal(targetRoot. get(DistributionSetType_.name), name); - return predicate; - } - }; - return spec; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.name), name); } /** @@ -106,16 +71,7 @@ public final class DistributionSetTypeSpecification { * @return the {@link DistributionSet} {@link Specification} */ public static Specification byKey(final String key) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - - final Predicate predicate = cb.equal(targetRoot. get(DistributionSetType_.key), key); - return predicate; - } - }; - return spec; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(DistributionSetType_.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/specifications/SoftwareModuleSpecification.java index 2311f59f6..680f97778 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SoftwareModuleSpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/SoftwareModuleSpecification.java @@ -8,10 +8,7 @@ */ package org.eclipse.hawkbit.repository.specifications; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -22,8 +19,6 @@ import org.springframework.data.jpa.domain.Specification; * Specifications class for {@link SoftwareModule}s. The class provides Spring * Data JPQL Specifications * - * - * */ public final class SoftwareModuleSpecification { private SoftwareModuleSpecification() { @@ -39,38 +34,21 @@ public final class SoftwareModuleSpecification { * @return the {@link SoftwareModule} {@link Specification} */ public static Specification byId(final Long moduleId) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - - final Predicate predicate = cb.equal(targetRoot. get(SoftwareModule_.id), moduleId); - targetRoot.fetch(SoftwareModule_.type); - return predicate; - } + return (targetRoot, query, cb) -> { + final Predicate predicate = cb.equal(targetRoot. get(SoftwareModule_.id), moduleId); + targetRoot.fetch(SoftwareModule_.type); + return predicate; }; - return spec; } /** - * {@link Specification} for retrieving {@link SoftwareModule}s by its - * DELETED attribute. + * {@link Specification} for retrieving {@link SoftwareModule}s where its + * DELETED attribute is false. * - * @param isDeleted - * TRUE/FALSE are compared to the attribute DELETED. If NULL the - * attribute is ignored * @return the {@link SoftwareModule} {@link Specification} */ public static Specification isDeletedFalse() { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root swRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.equal(swRoot. get(SoftwareModule_.deleted), Boolean.FALSE); - return predicate; - } - }; - return spec; + return (swRoot, query, cb) -> cb.equal(swRoot. get(SoftwareModule_.deleted), Boolean.FALSE); } /** @@ -82,18 +60,9 @@ public final class SoftwareModuleSpecification { * @return the {@link SoftwareModule} {@link Specification} */ public static Specification likeNameOrVersion(final String subString) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.or( - cb.like(cb.lower(targetRoot. get(SoftwareModule_.name)), subString.toLowerCase()), - cb.like(cb.lower(targetRoot. get(SoftwareModule_.version)), subString.toLowerCase())); - return predicate; - } - }; - - return spec; + 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())); } /** @@ -105,16 +74,7 @@ public final class SoftwareModuleSpecification { * @return the {@link SoftwareModule} {@link Specification} */ public static Specification equalType(final SoftwareModuleType type) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.equal(targetRoot. get(SoftwareModule_.type), type); - return predicate; - } - }; - - return spec; + return (targetRoot, query, cb) -> cb.equal(targetRoot. get(SoftwareModule_.type), type); } } 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/specifications/TargetFilterQuerySpecification.java index c92da7ed1..0b600c849 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetFilterQuerySpecification.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetFilterQuerySpecification.java @@ -8,17 +8,13 @@ */ package org.eclipse.hawkbit.repository.specifications; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; - import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetFilterQuery_; import org.springframework.data.jpa.domain.Specification; /** - * + * Specifications class for {@link TargetFilterQuery}s. The class provides + * Spring Data JPQL Specifications. * */ public class TargetFilterQuerySpecification { @@ -27,16 +23,9 @@ public class TargetFilterQuerySpecification { } public static Specification likeName(final String searchText) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetFilterQueryRoot, - final CriteriaQuery query, final CriteriaBuilder cb) { - final String searchTextToLower = searchText.toLowerCase(); - final Predicate predicate = cb.like(cb.lower(targetFilterQueryRoot.get(TargetFilterQuery_.name)), - searchTextToLower); - return predicate; - } + return (targetFilterQueryRoot, query, cb) -> { + final String searchTextToLower = searchText.toLowerCase(); + return cb.like(cb.lower(targetFilterQueryRoot.get(TargetFilterQuery_.name)), searchTextToLower); }; - return spec; } } 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/specifications/TargetSpecifications.java index fb0e5740e..de894d3a3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetSpecifications.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/TargetSpecifications.java @@ -12,7 +12,6 @@ import java.util.Collection; import java.util.List; import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Join; import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Path; @@ -36,8 +35,6 @@ import org.springframework.data.jpa.domain.Specification; * Specifications class for {@link Target}s. The class provides Spring Data JPQL * Specifications. * - * - * */ public final class TargetSpecifications { private TargetSpecifications() { @@ -54,18 +51,12 @@ public final class TargetSpecifications { * @return the {@link Target} {@link Specification} */ public static Specification byControllerIdWithStatusAndTagsInJoin(final Collection controllerIDs) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = targetRoot.get(Target_.controllerId).in(controllerIDs); - targetRoot.fetch(Target_.tags, JoinType.LEFT); - query.distinct(true); - return predicate; - } + return (targetRoot, query, cb) -> { + final Predicate predicate = targetRoot.get(Target_.controllerId).in(controllerIDs); + targetRoot.fetch(Target_.tags, JoinType.LEFT); + query.distinct(true); + return predicate; }; - - return spec; } /** @@ -79,18 +70,12 @@ public final class TargetSpecifications { */ public static Specification byControllerIdWithStatusAndAssignedInJoin( final Collection controllerIDs) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { + return (targetRoot, query, cb) -> { - final Predicate predicate = targetRoot.get(Target_.controllerId).in(controllerIDs); - targetRoot.fetch(Target_.assignedDistributionSet); - return predicate; - } + final Predicate predicate = targetRoot.get(Target_.controllerId).in(controllerIDs); + targetRoot.fetch(Target_.assignedDistributionSet); + return predicate; }; - - return spec; } /** @@ -106,24 +91,18 @@ public final class TargetSpecifications { */ public static Specification hasTargetUpdateStatus(final Collection updateStatus, final boolean fetch) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - if (!query.getResultType().isAssignableFrom(Long.class)) { - if (fetch) { - targetRoot.fetch(Target_.targetInfo); - } else { - targetRoot.join(Target_.targetInfo); - } - return targetRoot.get(Target_.targetInfo).get(TargetInfo_.updateStatus).in(updateStatus); + return (targetRoot, query, cb) -> { + if (!query.getResultType().isAssignableFrom(Long.class)) { + if (fetch) { + targetRoot.fetch(Target_.targetInfo); + } else { + targetRoot.join(Target_.targetInfo); } - final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); - return targetInfoJoin.get(TargetInfo_.updateStatus).in(updateStatus); + return targetRoot.get(Target_.targetInfo).get(TargetInfo_.updateStatus).in(updateStatus); } + final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); + return targetInfoJoin.get(TargetInfo_.updateStatus).in(updateStatus); }; - - return spec; } /** @@ -135,18 +114,11 @@ public final class TargetSpecifications { * @return the {@link Target} {@link Specification} */ public static Specification likeNameOrDescriptionOrIp(final String searchText) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final String searchTextToLower = searchText.toLowerCase(); - final Predicate predicate = cb.or(cb.like(cb.lower(targetRoot.get(Target_.name)), searchTextToLower), - cb.like(cb.lower(targetRoot.get(Target_.description)), searchTextToLower)); - return predicate; - } + 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 spec; } /** @@ -158,21 +130,14 @@ public final class TargetSpecifications { * @return the {@link Target} {@link Specification} */ public static Specification hasInstalledOrAssignedDistributionSet(@NotNull final Long distributionId) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); - final Predicate predicate = cb.or( - cb.equal(targetInfoJoin.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), - distributionId), - cb.equal(targetRoot. get(Target_.assignedDistributionSet) - .get(DistributionSet_.id), distributionId)); - return predicate; - } + return (targetRoot, query, cb) -> { + final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); + return cb.or( + cb.equal(targetInfoJoin.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), + distributionId), + cb.equal(targetRoot. get(Target_.assignedDistributionSet).get(DistributionSet_.id), + distributionId)); }; - - return spec; } /** @@ -187,18 +152,11 @@ public final class TargetSpecifications { */ public static Specification hasControllerIdAndAssignedDistributionSetIdNot(final List tIDs, @NotNull final Long distributionId) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = cb.and(targetRoot.get(Target_.controllerId).in(tIDs), + 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 predicate; - } - }; - return spec; + cb.isNull(targetRoot. get(Target_.assignedDistributionSet)))); } /** @@ -212,16 +170,11 @@ public final class TargetSpecifications { * @return the {@link Target} {@link Specification} */ public static Specification hasTags(final String[] tagNames, final Boolean selectTargetWithNoTag) { - final Specification spec = new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Predicate predicate = getPredicate(targetRoot, cb, selectTargetWithNoTag, tagNames); - query.distinct(true); - return predicate; - } + return (targetRoot, query, cb) -> { + final Predicate predicate = getPredicate(targetRoot, cb, selectTargetWithNoTag, tagNames); + query.distinct(true); + return predicate; }; - return spec; } private static Predicate getPredicate(final Root targetRoot, final CriteriaBuilder cb, @@ -248,15 +201,9 @@ public final class TargetSpecifications { * @return the {@link Target} {@link Specification} */ public static Specification hasAssignedDistributionSet(final Long distributionSetId) { - return new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - return cb.equal( - targetRoot. get(Target_.assignedDistributionSet).get(DistributionSet_.id), - distributionSetId); - } - }; + return (targetRoot, query, cb) -> cb.equal( + targetRoot. get(Target_.assignedDistributionSet).get(DistributionSet_.id), + distributionSetId); } /** @@ -268,14 +215,10 @@ public final class TargetSpecifications { * @return the {@link Target} {@link Specification} */ public static Specification hasInstalledDistributionSet(final Long distributionSetId) { - return new Specification() { - @Override - public Predicate toPredicate(final Root targetRoot, final CriteriaQuery query, - final CriteriaBuilder cb) { - final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); - return cb.equal(targetInfoJoin.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), - distributionSetId); - } + return (targetRoot, query, cb) -> { + final Join targetInfoJoin = targetRoot.join(Target_.targetInfo); + return cb.equal(targetInfoJoin.get(TargetInfo_.installedDistributionSet).get(DistributionSet_.id), + distributionSetId); }; } } From 8a26ded4c418c5ed4b82ebcb8bea64dd97ad6c8f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sun, 27 Mar 2016 10:39:29 +0200 Subject: [PATCH 028/344] Extended tests for tag toggle and fixed a typo on the assigment result classes. Signed-off-by: Kai Zimmermann --- ...istributionSetTagAssigmentResultEvent.java | 8 +- .../event/TargetTagAssigmentResultEvent.java | 8 +- .../repository/DistributionSetManagement.java | 41 +++--- .../repository/SoftwareManagement.java | 14 +- .../repository/SoftwareModuleRepository.java | 10 +- ...> DistributionSetTagAssignmentResult.java} | 18 +-- ...lt.java => TargetTagAssignmentResult.java} | 18 +-- .../org/eclipse/hawkbit/TestDataUtil.java | 2 +- .../repository/ControllerManagementTest.java | 19 +-- ...ava => DistributionSetManagementTest.java} | 11 +- .../hawkbit/repository/TagManagementTest.java | 128 +++++++++++++++--- .../resource/DistributionSetTagResource.java | 4 +- .../rest/resource/TargetTagResource.java | 4 +- .../resource/SoftwareModuleResourceTest.java | 23 ++-- .../SoftwareModuleAddUpdateWindow.java | 30 ++-- .../tagdetails/DistributionTagToken.java | 16 +-- .../ui/common/tagdetails/TargetTagToken.java | 16 +-- .../management/dstable/DistributionTable.java | 6 +- .../event/DistributionTagDropEvent.java | 4 +- .../management/targettable/TargetTable.java | 4 +- .../targettag/TargetTagFilterButtons.java | 4 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 27 ++-- 22 files changed, 232 insertions(+), 183 deletions(-) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/{DistributionSetTagAssigmentResult.java => DistributionSetTagAssignmentResult.java} (80%) rename hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/{TargetTagAssigmentResult.java => TargetTagAssignmentResult.java} (82%) rename hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/{SoftwareManagementForDSTest.java => DistributionSetManagementTest.java} (99%) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java index 9a8a485b4..e10b9a51f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/DistributionSetTagAssigmentResultEvent.java @@ -8,14 +8,14 @@ */ package org.eclipse.hawkbit.eventbus.event; -import org.eclipse.hawkbit.repository.model.DistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; /** * A event for assignment target tag. */ public class DistributionSetTagAssigmentResultEvent { - private final DistributionSetTagAssigmentResult assigmentResult; + private final DistributionSetTagAssignmentResult assigmentResult; /** * Constructor. @@ -23,11 +23,11 @@ public class DistributionSetTagAssigmentResultEvent { * @param assigmentResult * the assignment result- */ - public DistributionSetTagAssigmentResultEvent(final DistributionSetTagAssigmentResult assigmentResult) { + public DistributionSetTagAssigmentResultEvent(final DistributionSetTagAssignmentResult assigmentResult) { this.assigmentResult = assigmentResult; } - public DistributionSetTagAssigmentResult getAssigmentResult() { + public DistributionSetTagAssignmentResult getAssigmentResult() { return assigmentResult; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java index 405595de0..6bdc3aebd 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetTagAssigmentResultEvent.java @@ -8,14 +8,14 @@ */ package org.eclipse.hawkbit.eventbus.event; -import org.eclipse.hawkbit.repository.model.TargetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; /** * A event for assignment target tag. */ public class TargetTagAssigmentResultEvent { - private final TargetTagAssigmentResult assigmentResult; + private final TargetTagAssignmentResult assigmentResult; /** * Constructor. @@ -23,11 +23,11 @@ public class TargetTagAssigmentResultEvent { * @param assigmentResult * the assignment result- */ - public TargetTagAssigmentResultEvent(final TargetTagAssigmentResult assigmentResult) { + public TargetTagAssigmentResultEvent(final TargetTagAssignmentResult assigmentResult) { this.assigmentResult = assigmentResult; } - public TargetTagAssigmentResult getAssigmentResult() { + public TargetTagAssignmentResult getAssigmentResult() { return assigmentResult; } 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 88e222e64..890333697 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 @@ -38,7 +38,7 @@ 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.DistributionSetTagAssigmentResult; +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_; @@ -68,9 +68,6 @@ import com.google.common.eventbus.EventBus; /** * Business facade for managing the {@link DistributionSet}s. * - * - * - * */ @Transactional(readOnly = true) @Validated @@ -140,15 +137,15 @@ public class DistributionSetManagement { * @param sets * to toggle for * @param tag - * to toogle - * @return {@link DistributionSetTagAssigmentResult} with all metadata of + * to toggle + * @return {@link DistributionSetTagAssignmentResult} with all meta data of * the assignment outcome. */ @Modifying @Transactional @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetTagAssigmentResult toggleTagAssignment(@NotEmpty final List sets, + public DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final List sets, @NotNull final DistributionSetTag tag) { return toggleTagAssignment(sets.stream().map(ds -> ds.getId()).collect(Collectors.toList()), tag.getName()); } @@ -163,42 +160,42 @@ public class DistributionSetManagement { * to toggle for * @param tagName * to toggle - * @return {@link DistributionSetTagAssigmentResult} with all metadata of + * @return {@link DistributionSetTagAssignmentResult} with all meta data of * the assignment outcome. */ @Modifying @Transactional @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) - public DistributionSetTagAssigmentResult toggleTagAssignment(@NotEmpty final Collection dsIds, + public DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection dsIds, @NotNull final String tagName) { final Iterable sets = findDistributionSetListWithDetails(dsIds); final DistributionSetTag myTag = tagManagement.findDistributionSetTag(tagName); - DistributionSetTagAssigmentResult result; - final List allDSs = new ArrayList<>(); + DistributionSetTagAssignmentResult result; + final List toBeChangedDSs = new ArrayList<>(); for (final DistributionSet set : sets) { if (set.getTags().add(myTag)) { - allDSs.add(set); + toBeChangedDSs.add(set); } } - // unassigment case - if (allDSs.isEmpty()) { + // un-assignment case + if (toBeChangedDSs.isEmpty()) { for (final DistributionSet set : sets) { if (set.getTags().remove(myTag)) { - allDSs.add(set); + toBeChangedDSs.add(set); } } - result = new DistributionSetTagAssigmentResult(dsIds.size() - allDSs.size(), 0, allDSs.size(), - Collections.emptyList(), distributionSetRepository.save(allDSs), myTag); + result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), 0, toBeChangedDSs.size(), + Collections.emptyList(), distributionSetRepository.save(toBeChangedDSs), myTag); } else { - result = new DistributionSetTagAssigmentResult(dsIds.size() - allDSs.size(), allDSs.size(), 0, - distributionSetRepository.save(allDSs), Collections.emptyList(), myTag); + result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), toBeChangedDSs.size(), 0, + distributionSetRepository.save(toBeChangedDSs), Collections.emptyList(), myTag); } - final DistributionSetTagAssigmentResult resultAssignment = result; + final DistributionSetTagAssignmentResult resultAssignment = result; afterCommit.afterCommit(() -> eventBus.post(new DistributionSetTagAssigmentResultEvent(resultAssignment))); // no reason to persist the tag @@ -436,7 +433,7 @@ public class DistributionSetManagement { * @param spec * of the search * @param pageable - * parametsr for paging + * parameter for paging * * @return the found {@link SoftwareModuleType}s */ @@ -1059,7 +1056,7 @@ public class DistributionSetManagement { afterCommit.afterCommit(() -> { - final DistributionSetTagAssigmentResult result = new DistributionSetTagAssigmentResult(0, save.size(), 0, + final DistributionSetTagAssignmentResult result = new DistributionSetTagAssignmentResult(0, save.size(), 0, save, Collections.emptyList(), tag); eventBus.post(new DistributionSetTagAssigmentResultEvent(result)); }); 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 b51019338..ec1954b35 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 @@ -258,10 +258,6 @@ public class SoftwareManagement { return artifactManagement.findSoftwareModuleById(id); } - // TODO: discuss this method, does not seem to make sense to search by name - // and version without type. It also makes no sense to return collection - // here. It should be a single result based on ytpe,name,version (like the - // constraint). /** * retrieves {@link SoftwareModule}s by their name AND version. * @@ -269,13 +265,15 @@ public class SoftwareManagement { * of the {@link SoftwareModule} * @param version * of the {@link SoftwareModule} - * @return the found {@link SoftwareModule}s + * @param type + * of the {@link SoftwareModule} + * @return the found {@link SoftwareModule} or null */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public List findSoftwareModuleByNameAndVersion(@NotEmpty final String name, - @NotEmpty final String version) { + public SoftwareModule findSoftwareModuleByNameAndVersion(@NotEmpty final String name, + @NotEmpty final String version, @NotNull final SoftwareModuleType type) { - return softwareModuleRepository.findByNameAndVersion(name, version); + return softwareModuleRepository.findOneByNameAndVersionAndType(name, version, type); } /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java index 44682da64..d70e8226f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java @@ -43,15 +43,19 @@ public interface SoftwareModuleRepository Long countByType(SoftwareModuleType type); /** - * Retrieves {@link SoftwareModule}s by filtering on name AND version. + * Retrieves {@link SoftwareModule} by filtering on name AND version AND + * type (which is unique per tenant. * * @param name * to be filtered on * @param version * to be filtered on - * @return the found {@link SoftwareModule}s with the given name AND verion + * @param type + * to be filtered on + * @return the found {@link SoftwareModule} with the given name AND version + * AND type */ - List findByNameAndVersion(String name, String version); + SoftwareModule findOneByNameAndVersionAndType(String name, String version, SoftwareModuleType type); /** * deletes the {@link SoftwareModule}s with the given IDs. diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssigmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java similarity index 80% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssigmentResult.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java index d7ed57305..eddd10c1b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssigmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java @@ -11,10 +11,10 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; /** - * Result object for {@link DistributionSetTag} assigments. + * Result object for {@link DistributionSetTag} assignments. * */ -public class DistributionSetTagAssigmentResult extends AssignmentResult { +public class DistributionSetTagAssignmentResult extends AssignmentResult { private final int unassigned; private final List assignedDs; @@ -37,7 +37,7 @@ public class DistributionSetTagAssigmentResult extends AssignmentResult { * @param distributionSetTag * the assigned or unassigned tag */ - public DistributionSetTagAssigmentResult(final int alreadyAssigned, final int assigned, final int unassigned, + public DistributionSetTagAssignmentResult(final int alreadyAssigned, final int assigned, final int unassigned, final List assignedDs, final List unassignedDs, final DistributionSetTag distributionSetTag) { super(assigned, alreadyAssigned); @@ -47,30 +47,18 @@ public class DistributionSetTagAssigmentResult extends AssignmentResult { this.distributionSetTag = distributionSetTag; } - /** - * @return the unassigned - */ public int getUnassigned() { return unassigned; } - /** - * @return the distributionSetTag - */ public DistributionSetTag getDistributionSetTag() { return distributionSetTag; } - /** - * @return the assignedDs - */ public List getAssignedDs() { return assignedDs; } - /** - * @return the unassignedDs - */ public List getUnassignedDs() { return unassignedDs; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssigmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java similarity index 82% rename from hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssigmentResult.java rename to hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java index b12b80d58..789e6adf2 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssigmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java @@ -11,13 +11,10 @@ package org.eclipse.hawkbit.repository.model; import java.util.List; /** - * Result object for {@link TargetTag} assigments. - * - * - * + * Result object for {@link TargetTag} assignments. * */ -public class TargetTagAssigmentResult extends AssignmentResult { +public class TargetTagAssignmentResult extends AssignmentResult { private final int unassigned; private final List assignedTargets; @@ -40,7 +37,7 @@ public class TargetTagAssigmentResult extends AssignmentResult { * @param targetTag * the assigned or unassigned tag */ - public TargetTagAssigmentResult(final int alreadyAssigned, final int assigned, final int unassigned, + public TargetTagAssignmentResult(final int alreadyAssigned, final int assigned, final int unassigned, final List assignedTargets, final List unassignedTargets, final TargetTag targetTag) { super(assigned, alreadyAssigned); this.unassigned = unassigned; @@ -49,23 +46,14 @@ public class TargetTagAssigmentResult extends AssignmentResult { this.targetTag = targetTag; } - /** - * @return the unassigned - */ public int getUnassigned() { return unassigned; } - /** - * @return the assignedTargets - */ public List getAssignedTargets() { return assignedTargets; } - /** - * @return the unassignedTargets - */ public List getUnassignedTargets() { return unassignedTargets; } 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 befcd6a8a..b2fa1f735 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -143,7 +143,7 @@ public class TestDataUtil { } public static List generateDistributionSetTags(final int number) { - final List result = new ArrayList(); + final List result = new ArrayList<>(); for (int i = 0; i < number; i++) { result.add(new DistributionSetTag("tag" + i, "tagdesc" + i, "" + i)); 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 a3913da2b..ebe57d2b1 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 @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; -import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; @@ -43,7 +42,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { distributionSetManagement); Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); assertThat(savedTarget.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.UNKNOWN); @@ -74,8 +73,8 @@ public class ControllerManagementTest extends AbstractIntegrationTest { .isEqualTo(3); } - @Test - @Description("Register a controller which not exist") + @Test(expected = ConstraintViolationException.class) + @Description("Register a controller which does not exist") public void testfindOrRegisterTargetIfItDoesNotexist() { final Target target = controllerManagament.findOrRegisterTargetIfItDoesNotexist("AA", null); assertThat(target).as("target should not be null").isNotNull(); @@ -84,12 +83,8 @@ public class ControllerManagementTest extends AbstractIntegrationTest { assertThat(target).as("Target should be the equals").isEqualTo(sameTarget); assertThat(targetRepository.count()).as("Only 1 target should be registred").isEqualTo(1L); - try { - controllerManagament.findOrRegisterTargetIfItDoesNotexist("", null); - fail("target with empty controller id should not be registred"); - } catch (final ConstraintViolationException e) { - // ok - } + // throws exception + controllerManagament.findOrRegisterTargetIfItDoesNotexist("", null); } @Test @@ -101,7 +96,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedTargets().iterator().next(); Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); @@ -124,7 +119,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { final ActionStatus actionStatusMessage3 = new ActionStatus(savedAction, Action.Status.FINISHED, System.currentTimeMillis()); actionStatusMessage3.addMessage("finish"); - savedAction = controllerManagament.addUpdateActionStatus(actionStatusMessage3, savedAction); + controllerManagament.addUpdateActionStatus(actionStatusMessage3, savedAction); targetManagement.findTargetByControllerID("Rabbit").getTargetInfo().getUpdateStatus(); diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementForDSTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java similarity index 99% rename from hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementForDSTest.java rename to hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java index 30f4a8cb0..352d28e15 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/SoftwareManagementForDSTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/DistributionSetManagementTest.java @@ -44,15 +44,12 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * {@link SoftwareManagement} test focused on {@link DistributionSet} and - * {@link DistributionSetType} related stuff. - * - * + * {@link DistributionSetManagement} tests. * */ @Features("Component Tests - Repository") -@Stories("Software Management") -public class SoftwareManagementForDSTest extends AbstractIntegrationTest { +@Stories("DistributionSet Management") +public class DistributionSetManagementTest extends AbstractIntegrationTest { @Test @Description("Tests the successfull module update of unused distribution set type which is in fact allowed.") @@ -159,8 +156,6 @@ public class SoftwareManagementForDSTest extends AbstractIntegrationTest { assertThat(distributionSetManagement.findDistributionSetTypeByKey("softdeleted").isDeleted()).isEqualTo(true); } - // TODO: kzimmerm: test N+1 - @Test(expected = EntityAlreadyExistsException.class) @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() { 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 eb263b242..69ad50f02 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 @@ -10,9 +10,11 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.TestDataUtil; @@ -20,9 +22,11 @@ import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilte 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.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.junit.Before; import org.junit.Test; import org.slf4j.LoggerFactory; @@ -158,6 +162,98 @@ public class TagManagementTest extends AbstractIntegrationTest { return new DistributionSetFilterBuilder(); } + @Test + @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 DistributionSetTag tag = tagManagement + .createDistributionSetTag(new DistributionSetTag("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.getAssignedDs()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + groupA.stream().map(set -> set.getId()).collect(Collectors.toList()))); + assertThat(result.getUnassigned()).isEqualTo(0); + assertThat(result.getUnassignedDs()).isEmpty(); + assertThat(result.getDistributionSetTag()).isEqualTo(tag); + + // toggle A+B -> A is still assigned and B is assigned as well + result = distributionSetManagement.toggleTagAssignment(concat(groupA, groupB), tag); + assertThat(result.getAlreadyAssigned()).isEqualTo(20); + assertThat(result.getAssigned()).isEqualTo(20); + assertThat(result.getAssignedDs()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + groupB.stream().map(set -> set.getId()).collect(Collectors.toList()))); + assertThat(result.getUnassigned()).isEqualTo(0); + assertThat(result.getUnassignedDs()).isEmpty(); + assertThat(result.getDistributionSetTag()).isEqualTo(tag); + + // toggle A+B -> both unassigned + result = distributionSetManagement.toggleTagAssignment(concat(groupA, groupB), tag); + assertThat(result.getAlreadyAssigned()).isEqualTo(0); + assertThat(result.getAssigned()).isEqualTo(0); + assertThat(result.getAssignedDs()).isEmpty(); + assertThat(result.getUnassigned()).isEqualTo(40); + assertThat(result.getUnassignedDs()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + concat(groupB, groupA).stream().map(set -> set.getId()).collect(Collectors.toList()))); + assertThat(result.getDistributionSetTag()).isEqualTo(tag); + + } + + @Test + @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 TargetTag tag = tagManagement.createTargetTag(new TargetTag("tag1", "tagdesc1", "")); + + // toggle A only -> A is now assigned + TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(groupA, tag); + assertThat(result.getAlreadyAssigned()).isEqualTo(0); + assertThat(result.getAssigned()).isEqualTo(20); + assertThat(result.getAssignedTargets()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( + groupA.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))); + assertThat(result.getUnassigned()).isEqualTo(0); + assertThat(result.getUnassignedTargets()).isEmpty(); + assertThat(result.getTargetTag()).isEqualTo(tag); + + // toggle A+B -> A is still assigned and B is assigned as well + result = targetManagement.toggleTagAssignment(concat(groupA, groupB), tag); + assertThat(result.getAlreadyAssigned()).isEqualTo(20); + assertThat(result.getAssigned()).isEqualTo(20); + assertThat(result.getAssignedTargets()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( + groupB.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))); + assertThat(result.getUnassigned()).isEqualTo(0); + assertThat(result.getUnassignedTargets()).isEmpty(); + assertThat(result.getTargetTag()).isEqualTo(tag); + + // toggle A+B -> both unassigned + result = targetManagement.toggleTagAssignment(concat(groupA, groupB), tag); + assertThat(result.getAlreadyAssigned()).isEqualTo(0); + assertThat(result.getAssigned()).isEqualTo(0); + assertThat(result.getAssignedTargets()).isEmpty(); + assertThat(result.getUnassigned()).isEqualTo(40); + assertThat(result.getUnassignedTargets()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( + concat(groupB, groupA).stream().map(target -> target.getControllerId()).collect(Collectors.toList()))); + assertThat(result.getTargetTag()).isEqualTo(tag); + + } + + @SafeVarargs + private final List concat(final List... targets) { + final List result = new ArrayList<>(); + Arrays.asList(targets).forEach(result::addAll); + return result; + } + @Test @Description("Ensures that all tags are retrieved through repository.") public void findAllTargetTags() { @@ -266,48 +362,38 @@ public class TagManagementTest extends AbstractIntegrationTest { } } + @Test(expected = EntityAlreadyExistsException.class) @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")); - try { - tagManagement.createTargetTag(new TargetTag("A")); - fail("Expected EntityAlreadyExistsException"); - } catch (final EntityAlreadyExistsException e) { - } + tagManagement.createTargetTag(new TargetTag("A")); } + @Test(expected = EntityAlreadyExistsException.class) @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")); tag.setName("A"); - try { - tagManagement.updateTargetTag(tag); - fail("Expected EntityAlreadyExistsException"); - } catch (final EntityAlreadyExistsException e) { - } + + tagManagement.updateTargetTag(tag); } + @Test(expected = EntityAlreadyExistsException.class) @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")); - try { - tagManagement.createDistributionSetTag(new DistributionSetTag("A")); - fail("Expected EntityAlreadyExistsException"); - } catch (final EntityAlreadyExistsException e) { - } + tagManagement.createDistributionSetTag(new DistributionSetTag("A")); } + @Test(expected = EntityAlreadyExistsException.class) @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")); tag.setName("A"); - try { - tagManagement.updateDistributionSetTag(tag); - fail("Expected EntityAlreadyExistsException"); - } catch (final EntityAlreadyExistsException e) { - } + + tagManagement.updateDistributionSetTag(tag); } @Test 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 63b864758..96a45aa6e 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 @@ -17,7 +17,7 @@ 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.DistributionSetTagAssigmentResult; +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.distributionset.DistributionSetRest; @@ -135,7 +135,7 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { final DistributionSetTag tag = findDistributionTagById(distributionsetTagId); - final DistributionSetTagAssigmentResult assigmentResult = this.distributionSetManagement + final DistributionSetTagAssignmentResult assigmentResult = this.distributionSetManagement .toggleTagAssignment(findDistributionSetIds(assignedDSRequestBodies), tag.getName()); final DistributionSetTagAssigmentResultRest tagAssigmentResultRest = new DistributionSetTagAssigmentResultRest(); 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 0e4bf9ec9..7ef9489ca 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 @@ -17,7 +17,7 @@ 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.TargetTagAssigmentResult; +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.tag.AssignedTargetRequestBody; @@ -130,7 +130,7 @@ public class TargetTagResource implements TargetTagRestApi { LOG.debug("Toggle Target assignment {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId); final TargetTag targetTag = findTargetTagById(targetTagId); - final TargetTagAssigmentResult assigmentResult = this.targetManagement + final TargetTagAssignmentResult assigmentResult = this.targetManagement .toggleTagAssignment(findTargetControllerIds(assignedTargetRequestBodies), targetTag.getName()); final TargetTagAssigmentResultRest tagAssigmentResultRest = new TargetTagAssigmentResultRest(); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java index 09ae7978f..1d2222c9a 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/SoftwareModuleResourceTest.java @@ -169,7 +169,7 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo artifactManagement .loadLocalArtifactBinary((LocalArtifact) softwareManagement .findSoftwareModuleWithDetails(sm.getId()).getArtifacts().get(0)) - .getFileInputStream())); + .getFileInputStream())); // hashes assertThat(artifactManagement.findLocalArtifactByFilename("origFilename").get(0).getSha1Hash()) @@ -773,12 +773,12 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .andExpect(jsonPath("[2].createdBy", equalTo("uploadTester"))) .andExpect(jsonPath("[2].createdAt", not(equalTo(0)))).andReturn(); - final SoftwareModule osCreated = softwareManagement.findSoftwareModuleByNameAndVersion("name1", "version1") - .get(0); - final SoftwareModule jvmCreated = softwareManagement.findSoftwareModuleByNameAndVersion("name2", "version1") - .get(0); - final SoftwareModule ahCreated = softwareManagement.findSoftwareModuleByNameAndVersion("name3", "version1") - .get(0); + final SoftwareModule osCreated = softwareManagement.findSoftwareModuleByNameAndVersion("name1", "version1", + osType); + final SoftwareModule jvmCreated = softwareManagement.findSoftwareModuleByNameAndVersion("name2", "version1", + runtimeType); + final SoftwareModule ahCreated = softwareManagement.findSoftwareModuleByNameAndVersion("name3", "version1", + appType); assertThat( JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString()) @@ -930,8 +930,10 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .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(new SwMetadataCompositeKey(sm, knownKey1)); + final SoftwareModuleMetadata metaKey2 = softwareManagement + .findSoftwareModuleMetadata(new SwMetadataCompositeKey(sm, knownKey2)); assertThat(metaKey1.getValue()).as("Metadata key is wrong").isEqualTo(knownValue1); assertThat(metaKey2.getValue()).as("Metadata key is wrong").isEqualTo(knownValue2); @@ -957,7 +959,8 @@ public class SoftwareModuleResourceTest extends AbstractIntegrationTestWithMongo .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(new SwMetadataCompositeKey(sm, knownKey)); assertThat(assertDS.getValue()).as("Metadata is wrong").isEqualTo(updateValue); } 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 3cc5c8dc1..7e05e8c63 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 @@ -28,8 +28,6 @@ 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.event.FieldEvents.TextChangeListener; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -245,27 +243,21 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { } private void addDescriptionTextChangeListener() { - descTextArea.addTextChangeListener(new TextChangeListener() { - @Override - public void textChange(final TextChangeEvent event) { - if (event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)) { - saveSoftware.setEnabled(false); - } else { - saveSoftware.setEnabled(true); - } + descTextArea.addTextChangeListener(event -> { + if (event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue)) { + saveSoftware.setEnabled(false); + } else { + saveSoftware.setEnabled(true); } }); } private void addVendorTextChangeListener() { - vendorTextField.addTextChangeListener(new TextChangeListener() { - @Override - public void textChange(final TextChangeEvent event) { - if (event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)) { - saveSoftware.setEnabled(false); - } else { - saveSoftware.setEnabled(true); - } + vendorTextField.addTextChangeListener(event -> { + if (event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue)) { + saveSoftware.setEnabled(false); + } else { + saveSoftware.setEnabled(true); } }); } @@ -280,7 +272,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { 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)) { + if (HawkbitCommonUtil.isDuplicate(name, version, type)) { uiNotifcation.displayValidationError( i18n.get("message.duplicate.softwaremodule", new Object[] { name, version })); } else { 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 c8824e455..d6d37d5c0 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 @@ -26,7 +26,7 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; 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.DistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -100,7 +100,7 @@ public class DistributionTagToken extends AbstractTagToken { @Override protected void assignTag(final String tagNameSelected) { if (tagNameSelected != null) { - final DistributionSetTagAssigmentResult result = toggleAssignment(tagNameSelected); + final DistributionSetTagAssignmentResult result = toggleAssignment(tagNameSelected); if (result.getAssigned() >= 1 && NOTAGS_SELECTED) { eventBus.publish(this, ManagementUIEvent.ASSIGN_DISTRIBUTION_TAG); } @@ -109,10 +109,10 @@ public class DistributionTagToken extends AbstractTagToken { } } - private DistributionSetTagAssigmentResult toggleAssignment(final String tagNameSelected) { + private DistributionSetTagAssignmentResult toggleAssignment(final String tagNameSelected) { final Set distributionList = new HashSet<>(); distributionList.add(selectedDS.getId()); - final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, + final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, tagNameSelected); uinotification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(tagNameSelected, result, i18n)); return result; @@ -120,7 +120,7 @@ public class DistributionTagToken extends AbstractTagToken { @Override protected void unassignTag(final String tagName) { - final DistributionSetTagAssigmentResult result = toggleAssignment(tagName); + final DistributionSetTagAssignmentResult result = toggleAssignment(tagName); if (result.getUnassigned() >= 1 && (isClickedTagListEmpty() || getClickedTagList().contains(tagName))) { eventBus.publish(this, ManagementUIEvent.UNASSIGN_DISTRIBUTION_TAG); } @@ -202,7 +202,7 @@ public class DistributionTagToken extends AbstractTagToken { @EventBusListenerMethod(scope = EventScope.SESSION) void onTargetTagAssigmentResultEvent(final DistributionSetTagAssigmentResultEvent event) { - final DistributionSetTagAssigmentResult assignmentResult = event.getAssigmentResult(); + final DistributionSetTagAssignmentResult assignmentResult = event.getAssigmentResult(); final DistributionSetTag tag = assignmentResult.getDistributionSetTag(); if (isAssign(assignmentResult)) { addNewToken(tag.getId()); @@ -212,7 +212,7 @@ public class DistributionTagToken extends AbstractTagToken { } - protected boolean isAssign(final DistributionSetTagAssigmentResult assignmentResult) { + protected boolean isAssign(final DistributionSetTagAssignmentResult assignmentResult) { if (assignmentResult.getAssigned() > 0) { final List assignedDsNames = assignmentResult.getAssignedDs().stream().map(t -> t.getId()) .collect(Collectors.toList()); @@ -223,7 +223,7 @@ public class DistributionTagToken extends AbstractTagToken { return false; } - protected boolean isUnassign(final DistributionSetTagAssigmentResult assignmentResult) { + protected boolean isUnassign(final DistributionSetTagAssignmentResult assignmentResult) { if (assignmentResult.getUnassigned() > 0) { final List assignedDsNames = assignmentResult.getUnassignedDs().stream().map(t -> t.getId()) .collect(Collectors.toList()); 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 8982be759..b21b8f075 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 @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; 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.TargetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; @@ -68,7 +68,7 @@ public class TargetTagToken extends AbstractTargetTagToken { @Override protected void assignTag(final String tagNameSelected) { if (tagNameSelected != null) { - final TargetTagAssigmentResult result = toggleAssignment(tagNameSelected); + final TargetTagAssignmentResult result = toggleAssignment(tagNameSelected); if (result.getAssigned() >= 1 && NOTAGS_SELECTED) { eventBus.publish(this, ManagementUIEvent.ASSIGN_TARGET_TAG); } @@ -77,17 +77,17 @@ public class TargetTagToken extends AbstractTargetTagToken { } } - private TargetTagAssigmentResult toggleAssignment(final String tagNameSelected) { + private TargetTagAssignmentResult toggleAssignment(final String tagNameSelected) { final Set targetList = new HashSet<>(); targetList.add(selectedTarget.getControllerId()); - final TargetTagAssigmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected); + final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected); uinotification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(tagNameSelected, result, i18n)); return result; } @Override protected void unassignTag(final String tagName) { - final TargetTagAssigmentResult result = toggleAssignment(tagName); + final TargetTagAssignmentResult result = toggleAssignment(tagName); if (result.getUnassigned() >= 1 && (isClickedTagListEmpty() || getClickedTagList().contains(tagName))) { eventBus.publish(this, ManagementUIEvent.UNASSIGN_TARGET_TAG); } @@ -139,7 +139,7 @@ public class TargetTagToken extends AbstractTargetTagToken { @EventBusListenerMethod(scope = EventScope.SESSION) void onTargetTagAssigmentResultEvent(final TargetTagAssigmentResultEvent event) { - final TargetTagAssigmentResult assignmentResult = event.getAssigmentResult(); + final TargetTagAssignmentResult assignmentResult = event.getAssigmentResult(); final TargetTag targetTag = assignmentResult.getTargetTag(); if (isAssign(assignmentResult)) { addNewToken(targetTag.getId()); @@ -149,7 +149,7 @@ public class TargetTagToken extends AbstractTargetTagToken { } - protected boolean isAssign(final TargetTagAssigmentResult assignmentResult) { + protected boolean isAssign(final TargetTagAssignmentResult assignmentResult) { if (assignmentResult.getAssigned() > 0) { final List assignedTargetNames = assignmentResult.getAssignedTargets().stream() .map(t -> t.getControllerId()).collect(Collectors.toList()); @@ -160,7 +160,7 @@ public class TargetTagToken extends AbstractTargetTagToken { return false; } - protected boolean isUnassign(final TargetTagAssigmentResult assignmentResult) { + protected boolean isUnassign(final TargetTagAssignmentResult assignmentResult) { if (assignmentResult.getUnassigned() > 0) { final List unassignedTargetNamesList = assignmentResult.getUnassignedTargets().stream() .map(t -> t.getControllerId()).collect(Collectors.toList()); 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 4f4aa8b2f..0cc857c30 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 @@ -25,7 +25,7 @@ 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.DistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.table.AbstractTable; @@ -360,7 +360,7 @@ public class DistributionTable extends AbstractTable { final String distTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); - final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distList, + final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distList, distTagName); notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n)); @@ -564,7 +564,7 @@ public class DistributionTable extends AbstractTable { .getItemProperty(SPUILabelDefinitions.VAR_DIST_ID_NAME).getValue(); final Button pinBtn = getPinBtn(itemId, dist.getName(), dist.getVersion()); saveDistributionPinnedBtn(pinBtn); - pinBtn.addClickListener(event -> addPinClickListener(event)); + pinBtn.addClickListener(this::addPinClickListener); rePinDistribution(pinBtn, dist.getId()); return pinBtn; } diff --git a/hawkbit-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 index 21013a55e..f8d53bdef 100644 --- a/hawkbit-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 @@ -16,7 +16,7 @@ import java.util.stream.Collectors; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; -import org.eclipse.hawkbit.repository.model.DistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.ui.management.state.DistributionTableFilters; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; @@ -147,7 +147,7 @@ public class DistributionTagDropEvent implements DropHandler { SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); final List tagsClickedList = distFilterParameters.getDistSetTags(); - final DistributionSetTagAssigmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, + final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, distTagName); notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n)); 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 88d82bd9d..3a1051eac 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 @@ -32,7 +32,7 @@ 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.TargetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.filter.FilterExpression; @@ -656,7 +656,7 @@ public class TargetTable extends AbstractTable implements Handler { } final String targTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); - final TargetTagAssigmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); + final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); notification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(targTagName, result, i18n)); 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 9d93962da..30f036432 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 @@ -23,7 +23,7 @@ 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; -import org.eclipse.hawkbit.repository.model.TargetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtons; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -248,7 +248,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); - final TargetTagAssigmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); + final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); notification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(targTagName, result, i18n)); if (result.getAssigned() >= 1 && managementUIState.getTargetTableFilters().isNoTagSelected()) { 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 e697e220e..67e71ba4f 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 @@ -25,13 +25,13 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.im.authentication.UserPrincipal; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; -import org.eclipse.hawkbit.repository.model.DistributionSetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; 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.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetInfo.PollStatus; -import org.eclipse.hawkbit.repository.model.TargetTagAssigmentResult; +import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; @@ -802,13 +802,16 @@ public final class HawkbitCommonUtil { * as string * @param version * as string + * @param type + * key as string * @return boolean as flag */ - public static boolean isDuplicate(final String name, final String version) { + public static boolean isDuplicate(final String name, final String version, final String type) { final SoftwareManagement swMgmtService = SpringContextHelper.getBean(SoftwareManagement.class); - final List swModulesList = swMgmtService.findSoftwareModuleByNameAndVersion(name, version); + final SoftwareModule swModule = swMgmtService.findSoftwareModuleByNameAndVersion(name, version, + swMgmtService.findSoftwareModuleTypeByKey(type)); boolean duplicate = false; - if (swModulesList != null && !swModulesList.isEmpty()) { + if (swModule != null) { duplicate = true; } return duplicate; @@ -875,7 +878,7 @@ public final class HawkbitCommonUtil { * I18N * @return message */ - public static String getTargetTagAssigmentMsg(final String targTagName, final TargetTagAssigmentResult result, + public static String getTargetTagAssigmentMsg(final String targTagName, final TargetTagAssignmentResult result, final I18N i18n) { final StringBuilder formMsg = new StringBuilder(); final int assignedCount = result.getAssigned(); @@ -922,7 +925,7 @@ public final class HawkbitCommonUtil { * @return message */ public static String getDistributionTagAssignmentMsg(final String targTagName, - final DistributionSetTagAssigmentResult result, final I18N i18n) { + final DistributionSetTagAssignmentResult result, final I18N i18n) { final StringBuilder formMsg = new StringBuilder(); final int assignedCount = result.getAssigned(); final int alreadyAssignedCount = result.getAlreadyAssigned(); @@ -1359,12 +1362,12 @@ public final class HawkbitCommonUtil { * details of status and count * @return String */ - public static String getFormattedString(Map details) { - StringBuilder val = new StringBuilder(); + public static String getFormattedString(final Map details) { + final StringBuilder val = new StringBuilder(); if (details == null || details.isEmpty()) { return null; } - for (Entry entry : details.entrySet()) { + for (final Entry entry : details.entrySet()) { val.append(entry.getKey()).append(":").append(entry.getValue()).append(","); } return val.substring(0, val.length() - 1); @@ -1382,8 +1385,8 @@ public final class HawkbitCommonUtil { * label id * @return */ - public static String getStatusLabelDetailsInString(String value, String style, String id) { - StringBuilder val = new StringBuilder(); + public static String getStatusLabelDetailsInString(final String value, final String style, final String id) { + final StringBuilder val = new StringBuilder(); if (!Strings.isNullOrEmpty(value)) { val.append("value:").append(value).append(","); } From a2a0a5697e89dc8b772944b2dc571930d60e9125 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sun, 27 Mar 2016 17:18:32 +0200 Subject: [PATCH 029/344] Added tests for DS management. Removed boilerplate. --- .../repository/DistributionSetManagement.java | 12 ++- .../TenantConfigurationManagement.java | 2 +- .../repository/model/DistributionSet.java | 14 ++-- .../repository/model/DistributionSetType.java | 8 +- .../model/DistributionSetTypeElement.java | 49 +++++++++--- ...istributionSetTypeElementCompositeKey.java | 60 ++++++++------ .../DistributionSetManagementTest.java | 78 ++++++++++--------- 7 files changed, 138 insertions(+), 85 deletions(-) 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 890333697..410021664 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 @@ -188,11 +188,12 @@ public class DistributionSetManagement { toBeChangedDSs.add(set); } } - result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), 0, toBeChangedDSs.size(), - Collections.emptyList(), distributionSetRepository.save(toBeChangedDSs), myTag); + 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); + result = new DistributionSetTagAssignmentResult(dsIds.size() - toBeChangedDSs.size(), toBeChangedDSs.size(), + 0, distributionSetRepository.save(toBeChangedDSs), Collections.emptyList(), myTag); } final DistributionSetTagAssignmentResult resultAssignment = result; @@ -348,6 +349,9 @@ public class DistributionSetManagement { 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); } 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 f6b6afcfc..e311cf288 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 @@ -150,7 +150,7 @@ public class TenantConfigurationManagement implements EnvironmentAware { * @param configurationKey * the key of the configuration * @return the converted configuration value either from the tenant specific - * configuration stored or from the fallback default values or + * 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 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 e0444bc28..c3eb49a2d 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 @@ -67,14 +67,14 @@ public class DistributionSet extends NamedVersionedEntity { @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") ) }) + @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") ) }) + @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") @@ -95,7 +95,7 @@ public class DistributionSet extends NamedVersionedEntity { 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") ) + @JoinColumn(name = "ds_id", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_dstype_ds")) private DistributionSetType type; @Column(name = "complete") @@ -130,7 +130,9 @@ public class DistributionSet extends NamedVersionedEntity { if (moduleList != null) { moduleList.forEach(this::addModule); } - complete = type.checkComplete(this); + if (this.type != null) { + complete = this.type.checkComplete(this); + } } public Set getTags() { 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 30fb73365..1d565f6ac 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 @@ -27,9 +27,6 @@ import javax.persistence.UniqueConstraint; * A distribution set type defines which software module types can or have to be * {@link DistributionSet}. * - * - * - * */ @Entity @Table(name = "sp_distribution_set_type", indexes = { @@ -55,7 +52,7 @@ public class DistributionSetType extends NamedEntity { private boolean deleted = false; public DistributionSetType() { - // default public constructor + // default public constructor for JPA } /** @@ -307,7 +304,7 @@ public class DistributionSetType extends NamedEntity { if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof DistributionSetType)) { return false; } final DistributionSetType other = (DistributionSetType) obj; @@ -337,4 +334,5 @@ public class DistributionSetType extends NamedEntity { } return true; } + } 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/model/DistributionSetTypeElement.java index 0d892f6da..38baf52c7 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java @@ -25,17 +25,10 @@ import javax.persistence.Table; * Relation element between a {@link DistributionSetType} and its * {@link SoftwareModuleType} elements. * - * - * - * */ @Entity @Table(name = "sp_ds_type_element") public class DistributionSetTypeElement implements Serializable { - - /** - * - */ private static final long serialVersionUID = 1L; @EmbeddedId @@ -46,18 +39,16 @@ 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") ) + @JoinColumn(name = "distribution_set_type", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_dstype")) private DistributionSetType 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") ) + @JoinColumn(name = "software_module_type", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_smtype")) private SoftwareModuleType smType; - /** - * Default constructor. - */ public DistributionSetTypeElement() { + // Default constructor for JPA } /** @@ -108,4 +99,38 @@ public class DistributionSetTypeElement implements Serializable { return key; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + (mandatory ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof DistributionSetTypeElement)) { + return false; + } + final DistributionSetTypeElement other = (DistributionSetTypeElement) obj; + if (key == null) { + if (other.key != null) { + return false; + } + } else if (!key.equals(other.key)) { + return false; + } + if (mandatory != other.mandatory) { + return false; + } + return true; + } + } 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/model/DistributionSetTypeElementCompositeKey.java index c819d4e52..1f71d007e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java @@ -15,17 +15,9 @@ import javax.persistence.Embeddable; /** * Composite key for {@link DistributionSetTypeElement}. - * - * - * - * */ @Embeddable public class DistributionSetTypeElementCompositeKey implements Serializable { - - /** - * - */ private static final long serialVersionUID = 1L; @Column(name = "distribution_set_type", nullable = false) @@ -54,34 +46,58 @@ public class DistributionSetTypeElementCompositeKey implements Serializable { this.smType = smType.getId(); } - /** - * @return the dsType - */ public Long getDsType() { return dsType; } - /** - * @param dsType - * the dsType to set - */ public void setDsType(final Long dsType) { this.dsType = dsType; } - /** - * @return the smType - */ public Long getSmType() { return smType; } - /** - * @param smType - * the smType to set - */ public void setSmType(final Long smType) { this.smType = smType; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((dsType == null) ? 0 : dsType.hashCode()); + result = prime * result + ((smType == null) ? 0 : smType.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof DistributionSetTypeElementCompositeKey)) { + return false; + } + final DistributionSetTypeElementCompositeKey other = (DistributionSetTypeElementCompositeKey) obj; + if (dsType == null) { + if (other.dsType != null) { + return false; + } + } else if (!dsType.equals(other.dsType)) { + return false; + } + if (smType == null) { + if (other.smType != null) { + return false; + } + } else if (!smType.equals(other.smType)) { + return false; + } + return true; + } + } 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 352d28e15..62dc21a3b 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 @@ -33,6 +33,7 @@ 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.fest.assertions.core.Condition; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -149,8 +150,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .createDistributionSetType(new DistributionSetType("softdeleted", "to be deletd", "")); assertThat(distributionSetTypeRepository.findAll()).contains(softDelete); - final DistributionSet dsNewType = distributionSetManagement - .createDistributionSet(new DistributionSet("newtypesoft", "1", "", softDelete, null)); + distributionSetManagement.createDistributionSet(new DistributionSet("newtypesoft", "1", "", softDelete, null)); distributionSetManagement.deleteDistributionSetType(softDelete); assertThat(distributionSetManagement.findDistributionSetTypeByKey("softdeleted").isDeleted()).isEqualTo(true); @@ -165,6 +165,46 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { } + @Test + @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)); + + assertThat(set.getType()).as("Type should be equal to default type of tenant") + .isEqualTo(systemManagement.getTenantMetadata().getDefaultDsType()); + + } + + @Test + @Description("Verfies that multiple DS are of default type if not specified explicitly at creation time.") + public void createMultipleDistributionSetsWithImplicitType() { + + List sets = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + sets.add(new DistributionSet("another DS" + i, "X" + i, "", null, null)); + } + + sets = distributionSetManagement.createDistributionSets(sets); + + assertThat(sets).as("Type should be equal to default type of tenant").are(new Condition() { + @Override + public boolean matches(final DistributionSet value) { + return value.getType().equals(systemManagement.getTenantMetadata().getDefaultDsType()); + } + }); + + } + + @Test(expected = EntityAlreadyExistsException.class) + @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)); + distributionSetManagement.createDistributionSet(set); + + } + @Test @Description("Checks that metadata for a distribution set can be created.") public void createDistributionSetMetadata() { @@ -725,7 +765,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { dsAssigned.getVersion()); final Target target = new Target("4712"); final Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList(); + final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); deploymentManagement.assignDistributionSet(dsAssigned, toAssign); @@ -739,38 +779,6 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .getTotalElements()).isEqualTo(2); } - /** - * helper method which re-orders a list as expected. Re-orders the given - * distribution set in the order as given and returns a new list with the - * new order. - * - * @param dsThree - * @param buildDistributionSets - * @return - */ - private List reOrderDSList(final Iterable buildDistributionSets, - final DistributionSet... ds) { - final List reOrderedList = new ArrayList<>(); - - final Iterator iterator = buildDistributionSets.iterator(); - while (iterator.hasNext()) { - final DistributionSet next = iterator.next(); - int reorder = -1; - for (int index = 0; index < ds.length; index++) { - if (next.equals(ds[index])) { - reorder = index; - } - } - if (reorder >= 0) { - reOrderedList.add(reorder, next); - } else { - reOrderedList.add(next); - } - } - - return reOrderedList; - } - private Target sendUpdateActionStatusToTarget(final Status status, final Action updActA, final Target t, final String... msgs) { updActA.setStatus(status); From 9849205beaab397972bd13c09d3b11136b3347c2 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 28 Mar 2016 09:59:24 +0200 Subject: [PATCH 030/344] Re-applied base entity based equals hashcode policy --- .../hawkbit/repository/model/Action.java | 86 +------------ .../repository/model/ActionStatus.java | 37 +----- .../model/ActionWithStatusCount.java | 23 ++-- .../hawkbit/repository/model/Artifact.java | 29 +---- .../repository/model/AssignmentResult.java | 14 +-- .../model/CustomSoftwareModule.java | 13 +- .../repository/model/DistributionSet.java | 15 --- .../model/DistributionSetIdName.java | 27 +--- .../model/DistributionSetMetadata.java | 75 +++++++---- .../repository/model/DistributionSetTag.java | 17 +-- .../repository/model/DistributionSetType.java | 33 +---- .../model/DistributionSetTypeElement.java | 36 +----- ...istributionSetTypeElementCompositeKey.java | 39 ------ .../model/DsMetadataCompositeKey.java | 37 +----- .../repository/model/ExternalArtifact.java | 14 +-- .../model/ExternalArtifactProvider.java | 31 +---- .../repository/model/LocalArtifact.java | 25 +--- .../hawkbit/repository/model/NamedEntity.java | 41 +----- .../model/NamedVersionedEntity.java | 30 ++++- .../hawkbit/repository/model/Rollout.java | 108 ++++------------ .../repository/model/RolloutGroup.java | 30 ++++- .../repository/model/SoftwareModule.java | 4 +- .../model/SoftwareModuleIdName.java | 18 --- .../model/SoftwareModuleMetadata.java | 10 +- .../repository/model/SoftwareModuleType.java | 50 ++++---- .../model/SwMetadataCompositeKey.java | 14 +-- .../eclipse/hawkbit/repository/model/Tag.java | 34 +++-- .../hawkbit/repository/model/Target.java | 25 +--- .../repository/model/TargetFilterQuery.java | 41 +++--- .../repository/model/TargetIdName.java | 33 +---- .../hawkbit/repository/model/TargetInfo.java | 117 +++++------------- .../hawkbit/repository/model/TargetTag.java | 15 +-- .../repository/model/TargetUpdateStatus.java | 5 - .../model/TenantAwareBaseEntity.java | 8 +- .../repository/model/TenantConfiguration.java | 16 +-- .../repository/model/TenantMetaData.java | 23 +--- .../org/eclipse/hawkbit/TestDataUtil.java | 2 +- .../hawkbit/repository/ActionTest.java | 2 - 38 files changed, 289 insertions(+), 888 deletions(-) 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 bca57efa5..aeb4e64d8 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 @@ -127,55 +127,30 @@ public class Action extends TenantAwareBaseEntity implements Comparable return status == Status.CANCELING || status == Status.CANCELED; } - /** - * @param active - * the active to set - */ public void setActive(final boolean active) { this.active = active; } - /** - * @return the status - */ public Status getStatus() { return status; } - /** - * @param status - * the status to set - */ public void setStatus(final Status status) { this.status = status; } - /** - * @return the downloadProgressPercent - */ public int getDownloadProgressPercent() { return downloadProgressPercent; } - /** - * @param downloadProgressPercent - * the downloadProgressPercent to set - */ public void setDownloadProgressPercent(final int downloadProgressPercent) { this.downloadProgressPercent = downloadProgressPercent; } - /** - * @return the active - */ public boolean isActive() { return active; } - /** - * @param actionType - * the actionType to set - */ public void setActionType(final ActionType actionType) { this.actionType = actionType; } @@ -187,69 +162,38 @@ public class Action extends TenantAwareBaseEntity implements Comparable return actionType; } - /** - * @return the actionStatus - */ public List getActionStatus() { return actionStatus; } - /** - * @param target - * the target to set - */ public void setTarget(final Target target) { this.target = target; } - /** - * @return the target - */ public Target getTarget() { return target; } - /** - * @return the forcedTime - */ public long getForcedTime() { return forcedTime; } - /** - * @param forcedTime - * the forcedTime to set - */ public void setForcedTime(final long forcedTime) { this.forcedTime = forcedTime; } - /** - * @return the rolloutGroup - */ public RolloutGroup getRolloutGroup() { return rolloutGroup; } - /** - * @param rolloutGroup - * the rolloutGroup to set - */ public void setRolloutGroup(final RolloutGroup rolloutGroup) { this.rolloutGroup = rolloutGroup; } - /** - * @return the rollout - */ public Rollout getRollout() { return rollout; } - /** - * @param rollout - * the rollout to set - */ public void setRollout(final Rollout rollout) { this.rollout = rollout; } @@ -311,42 +255,25 @@ public class Action extends TenantAwareBaseEntity implements Comparable } @Override - public int hashCode() { // NOSONAR - as this is generated + public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((actionType == null) ? 0 : actionType.hashCode()); - result = prime * result + (active ? 1231 : 1237); - result = prime * result + (int) (forcedTime ^ (forcedTime >>> 32)); - result = prime * result + ((status == null) ? 0 : status.hashCode()); - result = prime * result + (isHitAutoForceTime(System.currentTimeMillis()) ? 1231 : 1237); + result = prime * result + this.getClass().getName().hashCode(); return result; } @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated - + public boolean equals(final Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { - return false; - } - final Action other = (Action) obj; - if (actionType != other.actionType) { - return false; - } - if (active != other.active) { - return false; - } - if (forcedTime != other.forcedTime) { - return false; - } - if (status != other.status) { + if (!(obj instanceof Action)) { return false; } + return true; } @@ -409,9 +336,6 @@ public class Action extends TenantAwareBaseEntity implements Comparable /** * The action type for this action relation. * - * - * - * */ public enum ActionType { FORCED, SOFT, 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 6409dc209..8493acfad 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 @@ -60,7 +60,7 @@ public class ActionStatus extends TenantAwareBaseEntity { /** * Creates a new {@link ActionStatus} object. - * + * * @param action * the action for this action status * @param status @@ -76,7 +76,7 @@ public class ActionStatus extends TenantAwareBaseEntity { /** * Creates a new {@link ActionStatus} object. - * + * * @param action * the action for this action status * @param status @@ -144,10 +144,7 @@ public class ActionStatus extends TenantAwareBaseEntity { public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((action == null) ? 0 : action.hashCode()); - result = prime * result + ((messages == null) ? 0 : messages.hashCode()); - result = prime * result + ((occurredAt == null) ? 0 : occurredAt.hashCode()); - result = prime * result + ((status == null) ? 0 : status.hashCode()); + result = prime * result + this.getClass().getName().hashCode(); return result; } @@ -159,34 +156,10 @@ public class ActionStatus extends TenantAwareBaseEntity { if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { - return false; - } - final ActionStatus other = (ActionStatus) obj; - if (action == null) { - if (other.action != null) { - return false; - } - } else if (!action.equals(other.action)) { - return false; - } - if (messages == null) { - if (other.messages != null) { - return false; - } - } else if (!messages.equals(other.messages)) { - return false; - } - if (occurredAt == null) { - if (other.occurredAt != null) { - return false; - } - } else if (!occurredAt.equals(other.occurredAt)) { - return false; - } - if (status != other.status) { + if (!(obj instanceof ActionStatus)) { return false; } + return true; } 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 7d01b9dd2..44beb194a 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 @@ -15,9 +15,6 @@ import org.eclipse.hawkbit.repository.model.Action.Status; * Custom JPA Model for querying {@link Action} include the count of the * action's {@link ActionStatus}. * - * - * - * */ public class ActionWithStatusCount { private final Long actionStatusCount; @@ -37,7 +34,7 @@ public class ActionWithStatusCount { /** * JPA constructor, the parameter are the result set columns of the custom * query. - * + * * @param actionId * the ID of the action * @param actionType @@ -70,9 +67,9 @@ public class ActionWithStatusCount { final String rolloutName) { this.actionId = actionId; this.actionType = actionType; - this.actionActive = active; - this.actionForceTime = forcedTime; - this.actionStatus = status; + actionActive = active; + actionForceTime = forcedTime; + actionStatus = status; this.actionCreatedAt = actionCreatedAt; this.actionLastModifiedAt = actionLastModifiedAt; this.dsId = dsId; @@ -81,12 +78,12 @@ public class ActionWithStatusCount { this.actionStatusCount = actionStatusCount; this.rolloutName = rolloutName; - this.action = new Action(); - this.action.setActionType(actionType); - this.action.setActive(actionActive); - this.action.setForcedTime(actionForceTime); - this.action.setStatus(actionStatus); - this.action.setId(actionId); + action = new Action(); + action.setActionType(actionType); + action.setActive(actionActive); + action.setForcedTime(actionForceTime); + action.setStatus(actionStatus); + action.setId(actionId); } /** 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 23c5de34f..c63974cbb 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 @@ -58,9 +58,7 @@ public abstract class Artifact extends TenantAwareBaseEntity { public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((md5Hash == null) ? 0 : md5Hash.hashCode()); - result = prime * result + ((sha1Hash == null) ? 0 : sha1Hash.hashCode()); - result = prime * result + ((size == null) ? 0 : size.hashCode()); + result = prime * result + this.getClass().getName().hashCode(); return result; } @@ -72,31 +70,10 @@ public abstract class Artifact extends TenantAwareBaseEntity { if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { - return false; - } - final Artifact other = (Artifact) obj; - if (md5Hash == null) { - if (other.md5Hash != null) { - return false; - } - } else if (!md5Hash.equals(other.md5Hash)) { - return false; - } - if (sha1Hash == null) { - if (other.sha1Hash != null) { - return false; - } - } else if (!sha1Hash.equals(other.sha1Hash)) { - return false; - } - if (size == null) { - if (other.size != null) { - return false; - } - } else if (!size.equals(other.size)) { + if (!(obj instanceof Artifact)) { return false; } + return true; } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java index 05f812b06..eda0bb9bd 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java @@ -9,10 +9,7 @@ package org.eclipse.hawkbit.repository.model; /** - * Generic assigment result bean. - * - * - * + * Generic assignment result bean. * */ public class AssignmentResult { @@ -36,23 +33,14 @@ public class AssignmentResult { total = assigned + alreadyAssigned; } - /** - * @return the assignedTargets - */ public int getAssigned() { return assigned; } - /** - * @return the total - */ public int getTotal() { return total; } - /** - * @return the alreadyAssigned - */ public int getAlreadyAssigned() { return alreadyAssigned; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java index b68f9df49..34aa8345a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/CustomSoftwareModule.java @@ -13,9 +13,6 @@ import java.io.Serializable; /** * Use to display software modules for the selected distribution. * - * - * - * */ public class CustomSoftwareModule implements Serializable { @@ -39,16 +36,10 @@ public class CustomSoftwareModule implements Serializable { this.assigned = assigned; } - /** - * @return the softwareModule - */ public SoftwareModule getSoftwareModule() { return softwareModule; } - /** - * @return the assigned - */ public boolean isAssigned() { return assigned; } @@ -63,7 +54,7 @@ public class CustomSoftwareModule implements Serializable { final int prime = 31; int result = 1; result = prime * result + (assigned ? 1231 : 1237); - result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); + result = prime * result + (softwareModule == null ? 0 : softwareModule.hashCode()); return result; } @@ -75,7 +66,7 @@ public class CustomSoftwareModule implements Serializable { if (obj == null) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof CustomSoftwareModule)) { return false; } final CustomSoftwareModule other = (CustomSoftwareModule) obj; 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 c3eb49a2d..390421bf8 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 @@ -160,11 +160,6 @@ public class DistributionSet extends NamedVersionedEntity { return actions; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; @@ -173,11 +168,6 @@ public class DistributionSet extends NamedVersionedEntity { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { if (this == obj) { @@ -234,11 +224,6 @@ public class DistributionSet extends NamedVersionedEntity { return installedAtTargets; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "DistributionSet [getName()=" + getName() + ", getOptLockRevision()=" + getOptLockRevision() diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java index a7eb8e517..fd90e9d04 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java @@ -39,9 +39,6 @@ public class DistributionSetIdName implements Serializable { this.version = version; } - /** - * @return the id - */ public Long getId() { return id; } @@ -50,40 +47,27 @@ public class DistributionSetIdName implements Serializable { return version; } - /** - * @return the name - */ public String getName() { return name; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override - public int hashCode() { // NOSONAR - as this is generated + public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (id == null ? 0 : id.hashCode()); return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated + public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof DistributionSetIdName)) { return false; } final DistributionSetIdName other = (DistributionSetIdName) obj; @@ -97,11 +81,6 @@ public class DistributionSetIdName implements Serializable { return true; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { // only return the ID because it's used in vaadin for setting the item 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 b0627f0db..e9597f60b 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 @@ -33,10 +33,6 @@ import javax.persistence.Table; @Entity @Table(name = "sp_ds_metadata") public class DistributionSetMetadata implements Serializable { - - /** - * - */ private static final long serialVersionUID = 1L; @Id @@ -49,11 +45,11 @@ public class DistributionSetMetadata implements Serializable { @Id @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_ds") ) + @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_ds")) private DistributionSet distributionSet; public DistributionSetMetadata() { - + // Default constructor for JPA. } /** @@ -73,49 +69,74 @@ public class DistributionSetMetadata implements Serializable { return new DsMetadataCompositeKey(distributionSet, key); } - /** - * @return the key - */ public String getKey() { return key; } - /** - * @param key - * the key to set - */ public void setKey(final String key) { this.key = key; } - /** - * @param distributionSet - * the distributionSet to set - */ public void setDistributionSet(final DistributionSet distributionSet) { this.distributionSet = distributionSet; } - /** - * @return the value - */ public String getValue() { return value; } - /** - * @param value - * the value to set - */ public void setValue(final String value) { this.value = value; } - /** - * @return the distributionSet - */ public DistributionSet getDistributionSet() { return distributionSet; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (distributionSet == null ? 0 : distributionSet.hashCode()); + 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 (!(obj instanceof DistributionSetMetadata)) { + return false; + } + final DistributionSetMetadata other = (DistributionSetMetadata) obj; + if (distributionSet == null) { + if (other.distributionSet != null) { + return false; + } + } else if (!distributionSet.equals(other.distributionSet)) { + return false; + } + 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/model/DistributionSetTag.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTag.java index 63a858a7d..bdfc73f9d 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 @@ -21,16 +21,11 @@ import javax.persistence.UniqueConstraint; * 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") ) + "name", "tenant" }, name = "uk_ds_tag")) public class DistributionSetTag extends Tag { private static final long serialVersionUID = 1L; @@ -69,11 +64,6 @@ public class DistributionSetTag extends Tag { return assignedToDistributionSet; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; @@ -82,11 +72,6 @@ public class DistributionSetTag extends Tag { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated if (this == obj) { 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 1d565f6ac..56fed270f 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 @@ -84,7 +84,7 @@ public class DistributionSetType extends NamedEntity { public DistributionSetType(final String key, final String name, final String description, final String color) { super(name, description); this.key = key; - this.colour = color; + colour = color; } /** @@ -289,10 +289,7 @@ public class DistributionSetType extends NamedEntity { public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((colour == null) ? 0 : colour.hashCode()); - result = prime * result + (deleted ? 1231 : 1237); - result = prime * result + ((elements == null) ? 0 : elements.hashCode()); - result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + this.getClass().getName().hashCode(); return result; } @@ -307,31 +304,7 @@ public class DistributionSetType extends NamedEntity { if (!(obj instanceof DistributionSetType)) { return false; } - final DistributionSetType other = (DistributionSetType) obj; - if (colour == null) { - if (other.colour != null) { - return false; - } - } else if (!colour.equals(other.colour)) { - return false; - } - if (deleted != other.deleted) { - return false; - } - if (elements == null) { - if (other.elements != null) { - return false; - } - } else if (!elements.equals(other.elements)) { - return false; - } - if (key == null) { - if (other.key != null) { - return false; - } - } else if (!key.equals(other.key)) { - return false; - } + return true; } 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/model/DistributionSetTypeElement.java index 38baf52c7..ce8501fec 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java @@ -65,7 +65,7 @@ public class DistributionSetTypeElement implements Serializable { public DistributionSetTypeElement(final DistributionSetType dsType, final SoftwareModuleType smType, final boolean mandatory) { super(); - this.key = new DistributionSetTypeElementCompositeKey(dsType, smType); + key = new DistributionSetTypeElementCompositeKey(dsType, smType); this.dsType = dsType; this.smType = smType; this.mandatory = mandatory; @@ -100,37 +100,7 @@ public class DistributionSetTypeElement implements Serializable { } @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); - result = prime * result + (mandatory ? 1231 : 1237); - return result; + public String toString() { + return "DistributionSetTypeElement [mandatory=" + mandatory + ", dsType=" + dsType + ", smType=" + smType + "]"; } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof DistributionSetTypeElement)) { - return false; - } - final DistributionSetTypeElement other = (DistributionSetTypeElement) obj; - if (key == null) { - if (other.key != null) { - return false; - } - } else if (!key.equals(other.key)) { - return false; - } - if (mandatory != other.mandatory) { - return false; - } - return true; - } - } 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/model/DistributionSetTypeElementCompositeKey.java index 1f71d007e..2ee1aba0d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElementCompositeKey.java @@ -61,43 +61,4 @@ public class DistributionSetTypeElementCompositeKey implements Serializable { public void setSmType(final Long smType) { this.smType = smType; } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((dsType == null) ? 0 : dsType.hashCode()); - result = prime * result + ((smType == null) ? 0 : smType.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof DistributionSetTypeElementCompositeKey)) { - return false; - } - final DistributionSetTypeElementCompositeKey other = (DistributionSetTypeElementCompositeKey) obj; - if (dsType == null) { - if (other.dsType != null) { - return false; - } - } else if (!dsType.equals(other.dsType)) { - return false; - } - if (smType == null) { - if (other.smType != null) { - return false; - } - } else if (!smType.equals(other.smType)) { - return false; - } - return true; - } - } 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/model/DsMetadataCompositeKey.java index f26a66ab9..a23595679 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java @@ -13,24 +13,19 @@ import java.io.Serializable; /** * The DistributionSet Metadata composite key which contains the meta data key * and the ID of the DistributionSet itself. - * + * * * */ public final class DsMetadataCompositeKey implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private String key; private Long distributionSet; - /** - * - */ public DsMetadataCompositeKey() { + // Default constructor for JPA. } /** @@ -44,55 +39,31 @@ public final class DsMetadataCompositeKey implements Serializable { this.key = key; } - /** - * @return the key - */ public String getKey() { return key; } - /** - * @param key - * the key to set - */ public void setKey(final String key) { this.key = key; } - /** - * @return the distributionSet - */ public Long getDistributionSet() { return distributionSet; } - /** - * @param distributionSet - * the distributionSet to set - */ public void setDistributionSet(final Long distributionSet) { this.distributionSet = distributionSet; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((distributionSet == null) ? 0 : distributionSet.hashCode()); - result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + (distributionSet == null ? 0 : distributionSet.hashCode()); + result = prime * result + (key == null ? 0 : key.hashCode()); return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated // code 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 35e0c4e99..2369d000b 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 @@ -36,7 +36,7 @@ public class ExternalArtifact extends Artifact { 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") ) + @JoinColumn(name = "provider", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_art_to_ext_provider")) private ExternalArtifactProvider externalArtifactProvider; @Column(name = "url_suffix", length = 512) @@ -44,7 +44,7 @@ public class ExternalArtifact extends Artifact { // 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") ) + @JoinColumn(name = "software_module", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_external_assigned_sm")) private SoftwareModule softwareModule; /** @@ -127,11 +127,6 @@ public class ExternalArtifact extends Artifact { this.urlSuffix = urlSuffix; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { // NOSONAR - as this is generated final int prime = 31; @@ -140,11 +135,6 @@ public class ExternalArtifact extends Artifact { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated if (this == obj) { 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 56d92c8e1..6733074c6 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 @@ -15,11 +15,8 @@ import javax.persistence.Table; /** * External repositories for artifact storage. The SP server provides URLs for - * the targets to download rom these external ressources but does not access - * thenm itself. - * - * - * + * the targets to download from these external resources but does not access + * them itself. * */ @Table(name = "sp_external_provider", indexes = { @@ -60,41 +57,22 @@ public class ExternalArtifactProvider extends NamedEntity { basePath = ""; } - /** - * @return the basePath - */ public String getBasePath() { return basePath; } - /** - * @return the defaultSuffix - */ public String getDefaultSuffix() { return defaultSuffix; } - /** - * @param basePath - * the basePath to set - */ public void setBasePath(final String basePath) { this.basePath = basePath; } - /** - * @param defaultSuffix - * the defaultSuffix to set - */ public void setDefaultSuffix(final String defaultSuffix) { this.defaultSuffix = defaultSuffix; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { // NOSONAR - as this is generated final int prime = 31; @@ -103,11 +81,6 @@ public class ExternalArtifactProvider extends NamedEntity { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated if (this == obj) { 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 baa4ee1f0..b8f5d3369 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 @@ -46,7 +46,7 @@ public class LocalArtifact extends Artifact { 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") ) + @JoinColumn(name = "software_module", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_assigned_sm")) private SoftwareModule softwareModule; /** @@ -73,11 +73,6 @@ public class LocalArtifact extends Artifact { this.filename = filename; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { // NOSONAR - as this is generated final int prime = 31; @@ -86,11 +81,6 @@ public class LocalArtifact extends Artifact { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated if (this == obj) { @@ -106,33 +96,20 @@ public class LocalArtifact extends Artifact { return true; } - /** - * @return the softwareModule - */ @Override public SoftwareModule getSoftwareModule() { return softwareModule; } - /** - * @param softwareModule - * the softwareModule to set - */ public final void setSoftwareModule(final SoftwareModule softwareModule) { this.softwareModule = softwareModule; this.softwareModule.addArtifact(this); } - /** - * @return the gridFsFileName - */ public String getGridFsFileName() { return gridFsFileName; } - /** - * @return the filename - */ public String getFilename() { return filename; } 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 3ee2387ed..e14d88161 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 @@ -34,7 +34,7 @@ public abstract class NamedEntity extends TenantAwareBaseEntity { /** * Parameterized constructor. - * + * * @param name * of the {@link NamedEntity} * @param description @@ -60,43 +60,4 @@ public abstract class NamedEntity extends TenantAwareBaseEntity { public void setName(final String name) { this.name = name; } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((description == null) ? 0 : description.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (!super.equals(obj)) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final NamedEntity other = (NamedEntity) obj; - if (description == null) { - if (other.description != null) { - return false; - } - } else if (!description.equals(other.description)) { - return false; - } - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - return false; - } - return true; - } - } 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 77819ed46..0806f19e6 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 @@ -14,11 +14,6 @@ import javax.persistence.MappedSuperclass; /** * Extension for {@link NamedEntity} that are versioned. * - * - * - * - * - * */ @MappedSuperclass public abstract class NamedVersionedEntity extends NamedEntity { @@ -29,7 +24,7 @@ public abstract class NamedVersionedEntity extends NamedEntity { /** * parameterized constructor. - * + * * @param name * of the entity * @param version @@ -53,4 +48,27 @@ public abstract class NamedVersionedEntity extends NamedEntity { this.version = version; } + @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 (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof NamedVersionedEntity)) { + return false; + } + + return true; + } + } 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 83e541ed5..6001af86b 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 @@ -36,20 +36,20 @@ import org.eclipse.hawkbit.repository.model.Action.ActionType; @Entity @Table(name = "sp_rollout", indexes = { @Index(name = "sp_idx_rollout_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "tenant" }, name = "uk_rollout") ) + "name", "tenant" }, name = "uk_rollout")) public class Rollout extends NamedEntity { private static final long serialVersionUID = 1L; @OneToMany(targetEntity = RolloutGroup.class) - @JoinColumn(name = "rollout", insertable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rollout_rolloutgroup") ) + @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") ) + @JoinColumn(name = "distribution_set", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolltout_ds")) private DistributionSet distributionSet; @Column(name = "status") @@ -79,159 +79,86 @@ public class Rollout extends NamedEntity { @Transient private transient TotalTargetCountStatus totalTargetCountStatus; - /** - * @return the distributionSet - */ public DistributionSet getDistributionSet() { return distributionSet; } - /** - * @param distributionSet - * the distributionSet to set - */ public void setDistributionSet(final DistributionSet distributionSet) { this.distributionSet = distributionSet; } - /** - * @return the rolloutGroups - */ public List getRolloutGroups() { return rolloutGroups; } - /** - * @param rolloutGroups - * the rolloutGroups to set - */ public void setRolloutGroups(final List rolloutGroups) { this.rolloutGroups = rolloutGroups; } - /** - * @return the targetFilterQuery - */ public String getTargetFilterQuery() { return targetFilterQuery; } - /** - * @param targetFilterQuery - * the targetFilterQuery to set - */ public void setTargetFilterQuery(final String targetFilterQuery) { this.targetFilterQuery = targetFilterQuery; } - /** - * @return the status - */ public RolloutStatus getStatus() { return status; } - /** - * @param status - * the status to set - */ public void setStatus(final RolloutStatus status) { this.status = status; } - /** - * @return the lastCheck - */ public long getLastCheck() { return lastCheck; } - /** - * @param lastCheck - * the lastCheck to set - */ public void setLastCheck(final long lastCheck) { this.lastCheck = lastCheck; } - /** - * @return the actionType - */ public ActionType getActionType() { return actionType; } - /** - * @param actionType - * the actionType to set - */ public void setActionType(final ActionType actionType) { this.actionType = actionType; } - /** - * @return the forcedTime - */ public long getForcedTime() { return forcedTime; } - /** - * @param forcedTime - * the forcedTime to set - */ public void setForcedTime(final long forcedTime) { this.forcedTime = forcedTime; } - /** - * @return the totalTargets - */ public long getTotalTargets() { return totalTargets; } - /** - * @param totalTargets - * the totalTargets to set - */ public void setTotalTargets(final long totalTargets) { this.totalTargets = totalTargets; } - /** - * @return the rolloutGroupsTotal - */ public int getRolloutGroupsTotal() { return rolloutGroupsTotal; } - /** - * @param rolloutGroupsTotal - * the rolloutGroupsTotal to set - */ public void setRolloutGroupsTotal(final int rolloutGroupsTotal) { this.rolloutGroupsTotal = rolloutGroupsTotal; } - /** - * @return the rolloutGroupsCreated - */ public int getRolloutGroupsCreated() { return rolloutGroupsCreated; } - /** - * @param rolloutGroupsCreated - * the rolloutGroupsCreated to set - */ public void setRolloutGroupsCreated(final int rolloutGroupsCreated) { this.rolloutGroupsCreated = rolloutGroupsCreated; } - /** - * @return the totalTargetCountStatus - */ public TotalTargetCountStatus getTotalTargetCountStatus() { if (totalTargetCountStatus == null) { totalTargetCountStatus = new TotalTargetCountStatus(totalTargets); @@ -239,10 +166,6 @@ public class Rollout extends NamedEntity { return totalTargetCountStatus; } - /** - * @param totalTargetCountStatus - * the totalTargetCountStatus to set - */ public void setTotalTargetCountStatus(final TotalTargetCountStatus totalTargetCountStatus) { this.totalTargetCountStatus = totalTargetCountStatus; } @@ -256,7 +179,7 @@ public class Rollout extends NamedEntity { /** * - * @author Michael Hirsch + * State machine for rollout. * */ public enum RolloutStatus { @@ -308,4 +231,27 @@ public class Rollout extends NamedEntity { */ ERROR_STARTING; } + + @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 (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof Rollout)) { + return false; + } + + return true; + } } 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 dcb95b254..2a57e48d3 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 @@ -34,13 +34,13 @@ import javax.persistence.UniqueConstraint; @Entity @Table(name = "sp_rolloutgroup", indexes = { @Index(name = "sp_idx_rolloutgroup_01", columnList = "tenant,name") }, uniqueConstraints = @UniqueConstraint(columnNames = { - "name", "rollout", "tenant" }, name = "uk_rolloutgroup") ) + "name", "rollout", "tenant" }, name = "uk_rolloutgroup")) public class RolloutGroup extends NamedEntity { private static final long serialVersionUID = 1L; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolloutgroup_rollout") ) + @JoinColumn(name = "rollout", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_rolloutgroup_rollout")) private Rollout rollout; @Column(name = "status") @@ -210,8 +210,7 @@ public class RolloutGroup extends NamedEntity { } /** - * - * @author Michael Hirsch + * Rollout goup state machine. * */ public enum RolloutGroupStatus { @@ -478,4 +477,27 @@ public class RolloutGroup extends NamedEntity { } } + @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 (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof RolloutGroup)) { + return false; + } + + return true; + } + } 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 7b0c03c0e..99a57a2c4 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 @@ -241,8 +241,8 @@ public class SoftwareModule extends NamedVersionedEntity { @Override public String toString() { - return "SoftwareModule [deleted=" + deleted + ", getVersion()=" + getVersion() + ", getOptLockRevision()=" - + getOptLockRevision() + ", getId()=" + getId() + ", getType()=" + getType().getName() + "]"; + return "SoftwareModule [deleted=" + deleted + ", name=" + getName() + ", version=" + getVersion() + + ", revision=" + getOptLockRevision() + ", Id=" + getId() + ", type=" + getType().getName() + "]"; } @Override diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java index 8658de3c8..c59d42c5f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SoftwareModuleIdName.java @@ -13,8 +13,6 @@ import java.io.Serializable; /** * To hold software module name and Id. * - * - * */ public class SoftwareModuleIdName implements Serializable { @@ -35,25 +33,14 @@ public class SoftwareModuleIdName implements Serializable { this.name = name; } - /** - * @return the id - */ public Long getId() { return id; } - /** - * @return the name - */ public String getName() { return name; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() {// NOSONAR - as this is generated final int prime = 31; @@ -62,11 +49,6 @@ public class SoftwareModuleIdName implements Serializable { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) {// NOSONAR - as this is generated if (this == obj) { 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 4ffbd2c10..b314edbe6 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 @@ -29,10 +29,6 @@ import javax.persistence.Table; @Entity @Table(name = "sp_sw_metadata") public class SoftwareModuleMetadata implements Serializable { - - /** - * - */ private static final long serialVersionUID = 1L; @Id @@ -106,9 +102,9 @@ public class SoftwareModuleMetadata implements Serializable { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); - result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); - result = prime * result + ((value == null) ? 0 : value.hashCode()); + result = prime * result + (key == null ? 0 : key.hashCode()); + result = prime * result + (softwareModule == null ? 0 : softwareModule.hashCode()); + result = prime * result + (value == null ? 0 : value.hashCode()); return result; } 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 49427b9ea..bf34a6f33 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 @@ -17,9 +17,6 @@ import javax.persistence.UniqueConstraint; /** * Type of a software modules. * - * - * - * */ @Entity @Table(name = "sp_software_module_type", indexes = { @@ -28,9 +25,6 @@ import javax.persistence.UniqueConstraint; @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; @Column(name = "type_key", nullable = false, length = 64) @@ -92,48 +86,26 @@ public class SoftwareModuleType extends NamedEntity { super(); } - /** - * @return the key - */ public String getKey() { return key; } - /** - * @return the max - */ public int getMaxAssignments() { return maxAssignments; } - /** - * @return the deleted - */ public boolean isDeleted() { return deleted; } - /** - * @param deleted - * the deleted to set - */ public void setDeleted(final boolean deleted) { this.deleted = deleted; } - /** - * - * @return the software type color - */ public String getColour() { return colour; } - /** - * - * @param colour - * the col - */ public void setColour(final String colour) { this.colour = colour; } @@ -143,4 +115,26 @@ public class SoftwareModuleType extends NamedEntity { return "SoftwareModuleType [key=" + key + ", getName()=" + getName() + ", getId()=" + getId() + "]"; } + @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 (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof SoftwareModuleType)) { + return false; + } + + return true; + } } 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/model/SwMetadataCompositeKey.java index f76cac155..90b3779a1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/SwMetadataCompositeKey.java @@ -69,25 +69,15 @@ public final class SwMetadataCompositeKey implements Serializable { this.softwareModule = softwareModule; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); - result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); + result = prime * result + (key == null ? 0 : key.hashCode()); + result = prime * result + (softwareModule == null ? 0 : softwareModule.hashCode()); return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated // code 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 c03a02f3e..8775ef458 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 @@ -14,14 +14,9 @@ import javax.persistence.MappedSuperclass; import org.springframework.hateoas.Identifiable; /** - * A Tag can be used as describing and organisational meta information for any + * 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 { @@ -57,14 +52,31 @@ public abstract class Tag extends NamedEntity implements Identifiable { this.colour = colour; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Tag [getOptLockRevision()=" + getOptLockRevision() + ", getId()=" + getId() + "]"; } + @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 (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof Tag)) { + return false; + } + + return true; + } } 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 07a97ebcf..62713dc3f 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 @@ -56,11 +56,6 @@ import org.springframework.data.domain.Persistable; * {@link TargetStatus#REGISTERED}, i.e. a target {@link DistributionSet} . *

* - * - * - * - * - * */ @Entity @Table(name = "sp_target", indexes = { @@ -117,7 +112,7 @@ public class Target extends NamedEntity implements Persistable { /** * Constructor. - * + * * @param controllerId * controller ID of the {@link Target} */ @@ -182,25 +177,14 @@ public class Target extends NamedEntity implements Persistable { this.assignedDistributionSet = assignedDistributionSet; } - /** - * @param controllerId - * the controllerId to set - */ public void setControllerId(final String controllerId) { this.controllerId = controllerId; } - /** - * @param tags - * the tags to set - */ public void setTags(final Set tags) { this.tags = tags; } - /** - * @return the actions - */ public List getActions() { return actions; } @@ -209,11 +193,6 @@ public class Target extends NamedEntity implements Persistable { return new TargetIdName(getId(), getControllerId(), getName()); } - /* - * (non-Javadoc) - * - * @see org.springframework.data.domain.Persistable#isNew() - */ @Override @Transient public boolean isNew() { @@ -263,7 +242,7 @@ public class Target extends NamedEntity implements Persistable { /* * (non-Javadoc) - * + * * @see java.lang.Object#toString() */ @Override 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 80721a3d2..7f01e0b59 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 @@ -57,32 +57,25 @@ public class TargetFilterQuery extends TenantAwareBaseEntity { } @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 TargetFilterQuery other = (TargetFilterQuery) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - return false; - } - return true; + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + this.getClass().getName().hashCode(); + return result; } @Override - public int hashCode() { // NOSONAR - as this is generated - final int prime = 31; - int result = 1; - result = prime * result + (name == null ? 0 : name.hashCode()); - return result; + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof TargetFilterQuery)) { + return false; + } + + return true; } } 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 f06fa8cf0..91542a422 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 @@ -39,61 +39,39 @@ public class TargetIdName implements Serializable { this.name = name; } - /** - * @return the controller id - */ public String getControllerId() { return controllerId; } - /** - * @return the name - */ public String getName() { return name; } - /** - * @param id - * the id to set - */ public void setControllerId(final String id) { - this.controllerId = id; + controllerId = id; } - /** - * @param name - * the name to set - */ public void setName(final String name) { this.name = name; } - /** - * @return the targetId - */ public long getTargetId() { return targetId; } /* * (non-Javadoc) - * + * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + (int) (targetId ^ (targetId >>> 32)); + result = prime * result + (int) (targetId ^ targetId >>> 32); return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { if (this == obj) { @@ -112,11 +90,6 @@ public class TargetIdName implements Serializable { return true; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { // only return the ID because it's used in vaadin for setting the item 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 09d9fed28..2eb7cc385 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 @@ -54,19 +54,11 @@ import org.springframework.data.domain.Persistable; * 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 -// @DynamicUpdate public class TargetInfo implements Persistable, Serializable { - - /** - * - */ private static final long serialVersionUID = 1L; private static final Logger LOG = LoggerFactory.getLogger(TargetInfo.class); @@ -81,9 +73,6 @@ public class TargetInfo implements Persistable, Serializable { @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 - // use deprecated annotation until HHH-8862 is fixed - // @SuppressWarnings( "deprecation" ) - // @org.hibernate.annotations.ForeignKey( name = "fk_targ_stat_targ" ) private Target target; @Column(name = "address", length = 512) @@ -111,9 +100,7 @@ public class TargetInfo implements Persistable, Serializable { @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")) - // use deprecated annotation until HHH-8862 is fixed - // @org.hibernate.annotations.ForeignKey( name = "fk_targ_attrib_target" ) private final Map controllerAttributes = Collections.synchronizedMap(new HashMap()); // set default request controller attributes to true, because we want to @@ -124,7 +111,7 @@ public class TargetInfo implements Persistable, Serializable { /** * Constructor for {@link TargetStatus}. - * + * * @param target * related to this status. */ @@ -138,21 +125,11 @@ public class TargetInfo implements Persistable, Serializable { targetId = null; } - /* - * (non-Javadoc) - * - * @see org.springframework.data.domain.Persistable#getId() - */ @Override public Long getId() { return targetId; } - /* - * (non-Javadoc) - * - * @see org.springframework.data.domain.Persistable#isNew() - */ @Override @Transient public boolean isNew() { @@ -198,114 +175,62 @@ public class TargetInfo implements Persistable, Serializable { this.address = address; } - /** - * @return the targetId - */ public Long getTargetId() { return targetId; } - /** - * @param targetId - * the targetId to set - */ public void setTargetId(final Long targetId) { this.targetId = targetId; } - /** - * @return the target - */ public Target getTarget() { return target; } - /** - * @param target - * the target to set - */ public void setTarget(final Target target) { this.target = target; } - /** - * @return the lastTargetQuery - */ public Long getLastTargetQuery() { return lastTargetQuery; } - /** - * @param lastTargetQuery - * the lastTargetQuery to set - */ public void setLastTargetQuery(final Long lastTargetQuery) { this.lastTargetQuery = lastTargetQuery; } - /** - * @param requestControllerAttributes - * the requestControllerAttributes to set - */ public void setRequestControllerAttributes(final boolean requestControllerAttributes) { this.requestControllerAttributes = requestControllerAttributes; } - /** - * @return the controllerAttributes - */ public Map getControllerAttributes() { return controllerAttributes; } - /** - * @return the requestControllerAttributes - */ public boolean isRequestControllerAttributes() { return requestControllerAttributes; } - /** - * @return the installationDate - */ public Long getInstallationDate() { return installationDate; } - /** - * @param installationDate - * the installationDate to set - */ public void setInstallationDate(final Long installationDate) { this.installationDate = installationDate; } - /** - * @return the updateStatus - */ public TargetUpdateStatus getUpdateStatus() { return updateStatus; } - /** - * @param updateStatus - * the updateStatus to set - */ public void setUpdateStatus(final TargetUpdateStatus updateStatus) { this.updateStatus = updateStatus; } - /** - * @return the installedDistributionSet - */ public DistributionSet getInstalledDistributionSet() { return installedDistributionSet; } - /** - * @param installedDistributionSet - * the installedDistributionSet to set - */ public void setInstalledDistributionSet(final DistributionSet installedDistributionSet) { this.installedDistributionSet = installedDistributionSet; } @@ -338,8 +263,6 @@ public class TargetInfo implements Persistable, Serializable { * 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 { @@ -359,7 +282,7 @@ public class TargetInfo implements Persistable, Serializable { /** * 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}. */ @@ -386,15 +309,41 @@ public class TargetInfo implements Persistable, Serializable { return currentDate; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @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()); + 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; + } + return true; + } + } 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 781bf9d16..90a246b61 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 @@ -30,7 +30,7 @@ import javax.persistence.UniqueConstraint; @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") ) + "name", "tenant" }, name = "uk_targ_tag")) public class TargetTag extends Tag { private static final long serialVersionUID = 1L; @@ -65,18 +65,10 @@ public class TargetTag extends Tag { super(); } - /** - * @return the assignedToTargets - */ public List getAssignedToTargets() { return assignedToTargets; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; @@ -85,11 +77,6 @@ public class TargetTag extends Tag { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { if (this == obj) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java index cecbf8339..7721dabda 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetUpdateStatus.java @@ -13,11 +13,6 @@ package org.eclipse.hawkbit.repository.model; * status. A {@link Target} can have only one status. independent of the number * of {@link UpdateAction}s that have to be applied. * - * - * - * - * - * */ public enum TargetUpdateStatus { 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 755ab793e..ea223e2d7 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 @@ -76,22 +76,22 @@ public abstract class TenantAwareBaseEntity extends BaseEntity { } @Override - public int hashCode() { // NOSONAR - as this is generated + public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((tenant == null) ? 0 : tenant.hashCode()); + result = prime * result + (tenant == null ? 0 : tenant.hashCode()); return result; } @Override - public boolean equals(final Object obj) { // NOSONAR - as this is generated + public boolean equals(final Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof TenantAwareBaseEntity)) { return false; } final TenantAwareBaseEntity other = (TenantAwareBaseEntity) obj; 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 972ea1ffe..c35cea1c7 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 @@ -27,10 +27,6 @@ import javax.persistence.UniqueConstraint; @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; @Column(name = "conf_key", length = 128) @@ -89,24 +85,14 @@ public class TenantConfiguration extends TenantAwareBaseEntity implements Serial this.value = value; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + (key == null ? 0 : key.hashCode()); return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated // code 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 35c7466be..e347a855c 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 @@ -24,7 +24,7 @@ import javax.persistence.UniqueConstraint; * 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}. * */ @@ -82,8 +82,7 @@ public class TenantMetaData extends BaseEntity { public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((defaultDsType == null) ? 0 : defaultDsType.hashCode()); - result = prime * result + ((tenant == null) ? 0 : tenant.hashCode()); + result = prime * result + this.getClass().getName().hashCode(); return result; } @@ -95,24 +94,10 @@ public class TenantMetaData extends BaseEntity { if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { - return false; - } - final TenantMetaData other = (TenantMetaData) obj; - if (defaultDsType == null) { - if (other.defaultDsType != null) { - return false; - } - } else if (!defaultDsType.equals(other.defaultDsType)) { - return false; - } - if (tenant == null) { - if (other.tenant != null) { - return false; - } - } else if (!tenant.equals(other.tenant)) { + if (!(obj instanceof TenantMetaData)) { return false; } + return true; } } 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 b2fa1f735..1787d29e4 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestDataUtil.java @@ -95,7 +95,7 @@ public class TestDataUtil { return distributionSetManagement.createDistributionSet( buildDistributionSet(suffix != null && suffix.length() > 0 ? suffix : "DS", version, findOrCreateDistributionSetType(distributionSetManagement, "ecl_os_app_jvm", - "OC mandatory App/JVM optional", mand, opt), + "OS mandatory App/JVM optional", mand, opt), os, jvm, ah).setRequiredMigrationStep(isRequiredMigrationStep)); } 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 9bd532b5e..937a544a7 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 @@ -33,12 +33,10 @@ public class ActionTest { final Action timeforcedAction = new Action(); timeforcedAction.setActionType(ActionType.TIMEFORCED); timeforcedAction.setForcedTime(timeForceTimeAt); - final int knownHashCode = timeforcedAction.hashCode(); assertThat(timeforcedAction.isForce()).isFalse(); // wait until timeforce time is hit Thread.sleep(sleepTime + 100); assertThat(timeforcedAction.isForce()).isTrue(); - assertThat(timeforcedAction.hashCode()).isNotEqualTo(knownHashCode); } } From 1146e6a80817a28e7c382f91f5786c6ee66bd212 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 28 Mar 2016 10:25:07 +0200 Subject: [PATCH 031/344] Found an even better name --- .../org/eclipse/hawkbit/repository/SoftwareManagement.java | 6 +++--- .../eclipse/hawkbit/repository/SoftwareManagementTest.java | 6 +++--- .../hawkbit/ui/distributions/smtable/SwModuleBeanQuery.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) 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 ec1954b35..c6eab402a 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 @@ -508,13 +508,13 @@ public class SoftwareManagement { * @param orderByDistributionId * the ID of distribution set to be ordered on top * @param searchText - * to be filtered as "like" on {@link SoftwareModule#getName()} + * filtered as "like" on {@link SoftwareModule#getName()} * @param type - * to be filtered as "like" on {@link SoftwareModule#getType()} + * filtered as "equal" on {@link SoftwareModule#getType()} * @return the page of found {@link SoftwareModule} */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY) - public Slice findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc( + public Slice findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( @NotNull final Pageable pageable, @NotNull final Long orderByDistributionId, final String searchText, final SoftwareModuleType type) { 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 c295c57ce..b227568e8 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 @@ -638,14 +638,14 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { softwareManagement.deleteSoftwareModule(deleted); // with filter on name, version and module type - assertThat(softwareManagement.findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc(pageReq, + assertThat(softwareManagement.findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc(pageReq, set.getId(), "found", testType).getContent()) .as("Found modules with given name, given module type and the assigned ones first") .containsExactly(new CustomSoftwareModule(one, true), new CustomSoftwareModule(two, true), new CustomSoftwareModule(unassigned, false)); // with filter on module type only - assertThat(softwareManagement.findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc(pageReq, + assertThat(softwareManagement.findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc(pageReq, set.getId(), null, testType).getContent()) .as("Found modules with given module type and the assigned ones first").containsExactly( new CustomSoftwareModule(differentName, true), new CustomSoftwareModule(one, true), @@ -653,7 +653,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { // without any filter assertThat(softwareManagement - .findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc(pageReq, set.getId(), null, null) + .findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc(pageReq, set.getId(), null, null) .getContent()).as("Found modules with the assigned ones first").containsExactly( new CustomSoftwareModule(differentName, true), new CustomSoftwareModule(one, true), new CustomSoftwareModule(two, true), new CustomSoftwareModule(four, true), 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 9aae5ca5c..5419cc1bf 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 @@ -77,7 +77,7 @@ public class SwModuleBeanQuery extends AbstractBeanQuery final Slice swModuleBeans; final List proxyBeans = new ArrayList<>(); - swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderByDistributionModuleNameAscModuleVersionAsc( + swModuleBeans = getSoftwareManagement().findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc( new OffsetBasedPageRequest(startIndex, count), orderByDistId, searchText, type); for (final CustomSoftwareModule swModule : swModuleBeans) { From a950fa033792cd79164f969b96292418ec619ac0 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 28 Mar 2016 11:17:06 +0200 Subject: [PATCH 032/344] Documented equals dashcode policy --- .../hawkbit/repository/model/BaseEntity.java | 14 +++++++++++ .../repository/model/DistributionSet.java | 4 ---- .../model/DistributionSetIdName.java | 3 --- .../model/DistributionSetMetadata.java | 5 +--- .../model/DsMetadataCompositeKey.java | 2 -- .../repository/model/ExternalArtifact.java | 5 +--- .../hawkbit/repository/model/NamedEntity.java | 23 +++++++++++++++++++ .../repository/model/SoftwareModule.java | 7 +----- .../hawkbit/repository/model/Target.java | 6 +++++ .../hawkbit/repository/model/TargetTag.java | 5 ---- .../model/TenantAwareBaseEntity.java | 16 +++++++++++++ .../repository/model/TenantConfiguration.java | 23 +++++-------------- 12 files changed, 68 insertions(+), 45 deletions(-) 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 964cbb728..09cfc3953 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 @@ -122,6 +122,13 @@ public abstract class BaseEntity implements Serializable, Identifiable { 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; @@ -131,6 +138,13 @@ public abstract class BaseEntity implements Serializable, Identifiable { 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 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 390421bf8..58303340e 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 @@ -46,10 +46,6 @@ import org.eclipse.persistence.annotations.CascadeOnDelete; * A {@link Target} has exactly one target {@link DistributionSet} assigned. *

* - * - * - * - * */ @Entity @Table(name = "sp_distribution_set", uniqueConstraints = { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java index fd90e9d04..f8662567a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetIdName.java @@ -15,9 +15,6 @@ import java.io.Serializable; * */ public class DistributionSetIdName implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private final Long id; 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 e9597f60b..4303ffd96 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 @@ -23,10 +23,7 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; /** - * Metadata for {@link DistributionSet}. - * - * - * + * Meta data for {@link DistributionSet}. * */ @IdClass(DsMetadataCompositeKey.class) 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/model/DsMetadataCompositeKey.java index a23595679..adc37d65a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DsMetadataCompositeKey.java @@ -14,8 +14,6 @@ import java.io.Serializable; * The DistributionSet Metadata composite key which contains the meta data key * and the ID of the DistributionSet itself. * - * - * */ public final class DsMetadataCompositeKey implements Serializable { private static final long serialVersionUID = 1L; 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 2369d000b..f3d1f9bb9 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 @@ -22,12 +22,9 @@ import javax.persistence.Table; import javax.validation.constraints.NotNull; /** - * External artifact representation with all the necessray informattion to + * 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") }) 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..ebf3d8939 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 @@ -60,4 +60,27 @@ public abstract class NamedEntity extends TenantAwareBaseEntity { public void setName(final String name) { this.name = name; } + + @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 (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof NamedEntity)) { + return false; + } + + return true; + } } 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 99a57a2c4..a86c0b864 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 @@ -33,12 +33,7 @@ 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 - * - * - * - * - * + * the edge controller, e.g. OS, JVM, AgentHub. * */ @Entity 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 62713dc3f..973c7382a 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 @@ -131,6 +131,12 @@ public class Target extends NamedEntity implements Persistable { securityToken = null; } + /** + * Note: For Target we extended the general strategy by adding controllerId + * as well. + * + * @see org.eclipse.hawkbit.repository.model.BaseEntity#equals(java.lang.Object) + */ @Override public boolean equals(final Object obj) {// NOSONAR - as this is generated if (this == obj) { 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 90a246b61..5b7f03713 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 @@ -21,11 +21,6 @@ import javax.persistence.UniqueConstraint; * 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 = { 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 ea223e2d7..d4f03c973 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 @@ -75,6 +75,14 @@ public abstract class TenantAwareBaseEntity extends BaseEntity { 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; @@ -83,6 +91,14 @@ public abstract class TenantAwareBaseEntity extends BaseEntity { 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 (this == obj) { 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 c35cea1c7..de5398e5b 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 @@ -19,9 +19,6 @@ import javax.persistence.UniqueConstraint; /** * A JPA entity which stores the tenant specific configuration. * - * - * - * */ @Entity @Table(name = "sp_tenant_configuration", uniqueConstraints = @UniqueConstraint(columnNames = { "conf_key", @@ -88,31 +85,23 @@ public class TenantConfiguration extends TenantAwareBaseEntity implements Serial @Override public int hashCode() { final int prime = 31; - int result = 1; - result = prime * result + (key == null ? 0 : key.hashCode()); + 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 - // code + public boolean equals(final Object obj) { if (this == obj) { return true; } - if (obj == null) { + if (!super.equals(obj)) { return false; } - if (getClass() != obj.getClass()) { - return false; - } - final TenantConfiguration other = (TenantConfiguration) obj; - if (key == null) { - if (other.key != null) { - return false; - } - } else if (!key.equals(other.key)) { + if (!(obj instanceof TenantConfiguration)) { return false; } + return true; } From e033e8718ceba8bbb35b676fa0935c011b0db425 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 29 Mar 2016 11:12:42 +0200 Subject: [PATCH 033/344] unit tests for ControllerPreAuthenticatedAnonymousDownloadTest Signed-off-by: Michael Hirsch --- hawkbit-security-integration/pom.xml | 42 +++++++++---- ...PreAuthenticatedAnonymousDownloadTest.java | 61 +++++++++++++++++++ 2 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 hawkbit-security-integration/src/test/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownloadTest.java diff --git a/hawkbit-security-integration/pom.xml b/hawkbit-security-integration/pom.xml index 9d89c1806..591552997 100644 --- a/hawkbit-security-integration/pom.xml +++ b/hawkbit-security-integration/pom.xml @@ -1,13 +1,6 @@ - + 4.0.0 @@ -35,7 +28,32 @@ org.springframework.security spring-security-web + + + + junit + junit + test + + + org.easytesting + fest-assert-core + test + + + org.easytesting + fest-assert + test + + + org.mockito + mockito-core + test + + + ru.yandex.qatools.allure + allure-junit-adaptor + test + - - diff --git a/hawkbit-security-integration/src/test/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownloadTest.java b/hawkbit-security-integration/src/test/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownloadTest.java new file mode 100644 index 000000000..b8195d023 --- /dev/null +++ b/hawkbit-security-integration/src/test/java/org/eclipse/hawkbit/security/ControllerPreAuthenticatedAnonymousDownloadTest.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.security; + +import static org.fest.assertions.Assertions.assertThat; + +import org.eclipse.hawkbit.im.authentication.SpPermission.SpringEvalExpressions; +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.tenancy.TenantAware; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + +/** + * @author Michael Hirsch + * + */ +@Features("Unit Tests - Security") +@Stories("Exclude path aware shallow ETag filter") +@RunWith(MockitoJUnitRunner.class) +public class ControllerPreAuthenticatedAnonymousDownloadTest { + + private ControllerPreAuthenticatedAnonymousDownload underTest; + + @Mock + private TenantConfigurationManagement tenantConfigurationManagementMock; + + @Mock + private TenantAware tenantAwareMock; + + @Before + public void before() { + underTest = new ControllerPreAuthenticatedAnonymousDownload(tenantConfigurationManagementMock, tenantAwareMock, + new SystemSecurityContext(tenantAwareMock)); + } + + @Test + public void useCorrectTenantConfiguationKey() { + assertThat(underTest.getTenantConfigurationKey()).as("Should be using the correct tenant configuration key") + .isEqualTo(underTest.getTenantConfigurationKey()); + } + + @Test + public void successfulAuthenticationAdditionalAuthoritiesForDownload() { + assertThat(underTest.getSuccessfulAuthenticationAuthorities()) + .as("Additional authorities should be containing the download anonymous role") + .contains(new SimpleGrantedAuthority(SpringEvalExpressions.CONTROLLER_DOWNLOAD_ROLE)); + } +} From 83818462b698bbf7b7a998ea8627a5a6b50ad65b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 29 Mar 2016 11:25:15 +0200 Subject: [PATCH 034/344] Forgot to delete 3 more PageList classes --- .../model/TenantAwareBaseEntity.java | 5 --- .../resource/api/DistributionSetRestApi.java | 3 +- .../api/DistributionSetTagRestApi.java | 4 +- .../rest/resource/api/RolloutRestApi.java | 3 +- .../resource/api/SoftwareModuleRestAPI.java | 3 +- .../rest/resource/api/TargetTagRestApi.java | 4 +- .../resource/model/MetadataRestPageList.java | 38 ---------------- .../model/rollout/RolloutPagedList.java | 36 ---------------- .../rest/resource/model/tag/TagPagedList.java | 43 ------------------- .../resource/DistributionSetResource.java | 7 ++- .../resource/DistributionSetTagResource.java | 8 ++-- .../rest/resource/RolloutResource.java | 7 ++- .../rest/resource/SoftwareModuleResource.java | 5 +-- .../rest/resource/TargetTagResource.java | 6 +-- 14 files changed, 22 insertions(+), 150 deletions(-) delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRestPageList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutPagedList.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagPagedList.java 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 755ab793e..82b7fa353 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 @@ -9,26 +9,21 @@ package org.eclipse.hawkbit.repository.model; import javax.persistence.Column; -import javax.persistence.EntityListeners; import javax.persistence.MappedSuperclass; import javax.persistence.PrePersist; -import org.eclipse.hawkbit.eventbus.CacheFieldEntityListener; -import org.eclipse.hawkbit.eventbus.EntityPropertyChangeListener; 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; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; /** * Holder of the base attributes common to all tenant aware entities. * */ @MappedSuperclass -@EntityListeners({ AuditingEntityListener.class, CacheFieldEntityListener.class, EntityPropertyChangeListener.class }) @TenantDiscriminatorColumn(name = "tenant", length = 40) @Multitenant(MultitenantType.SINGLE_TABLE) public abstract class TenantAwareBaseEntity extends BaseEntity { diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java index f7e7a35b7..80caefc94 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetRestApi.java @@ -13,7 +13,6 @@ 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.MetadataRestPageList; 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; @@ -227,7 +226,7 @@ public interface DistributionSetRestApi { */ @RequestMapping(method = RequestMethod.GET, value = "/{distributionSetId}/metadata", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity getMetadata( + 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java index d86b90d6a..f33379011 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java @@ -11,10 +11,10 @@ package org.eclipse.hawkbit.rest.resource.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.TagPagedList; 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.TagsRest; @@ -53,7 +53,7 @@ public interface DistributionSetTagRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getDistributionSetTags( + 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java index 5fcfd3b56..9f76b6bce 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/RolloutRestApi.java @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.rest.resource.api; import org.eclipse.hawkbit.rest.resource.RestConstants; import org.eclipse.hawkbit.rest.resource.model.PagedList; -import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutPagedList; 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; @@ -50,7 +49,7 @@ public interface RolloutRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity getRollouts( + 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java index b68ea6086..0eb874489 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/SoftwareModuleRestAPI.java @@ -12,7 +12,6 @@ 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.MetadataRestPageList; 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; @@ -218,7 +217,7 @@ public interface SoftwareModuleRestAPI { */ @RequestMapping(method = RequestMethod.GET, value = "/{softwareModuleId}/metadata", produces = { MediaType.APPLICATION_JSON_VALUE, "application/hal+json" }) - public ResponseEntity getMetadata( + 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java index ac82fbd5c..e3c994900 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java @@ -11,8 +11,8 @@ package org.eclipse.hawkbit.rest.resource.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.TagPagedList; 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.TagsRest; @@ -53,7 +53,7 @@ public interface TargetTagRestApi { * JsonResponseExceptionHandler is handling the response. */ @RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json", MediaType.APPLICATION_JSON_VALUE }) - public ResponseEntity getTargetTags( + 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, diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRestPageList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRestPageList.java deleted file mode 100644 index 0d375c582..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/MetadataRestPageList.java +++ /dev/null @@ -1,38 +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.model; - -import java.util.List; - -/** - * The rest model for a paged meta data list. - * - */ -public class MetadataRestPageList extends PagedList { - - private final List content; - - /** - * @param content - * the meta data rest model list as content - * @param total - * the total number of the meta data - */ - public MetadataRestPageList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of this paged list - */ - public List getContent() { - return content; - } -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutPagedList.java deleted file mode 100644 index ea1544991..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/rollout/RolloutPagedList.java +++ /dev/null @@ -1,36 +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.model.rollout; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -/** - * Paged list for Rollout. - * - * - */ -public class RolloutPagedList extends PagedList { - - private final List content; - - public RolloutPagedList(final List content, final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagPagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagPagedList.java deleted file mode 100644 index d549a9efa..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagPagedList.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.rest.resource.model.tag; - -import java.util.List; - -import org.eclipse.hawkbit.rest.resource.model.PagedList; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * Paged list for tags. - * - */ -public class TagPagedList extends PagedList { - - private final List content; - - /** - * @param content - * @param total - */ - @JsonCreator - public TagPagedList(@JsonProperty("content") final List content, @JsonProperty("total") final long total) { - super(content, total); - this.content = content; - } - - /** - * @return the content of the paged list. Never {@code null}. - */ - public List getContent() { - return content; - } - -} 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 4d5f47612..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 @@ -33,7 +33,6 @@ 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.MetadataRestPageList; 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; @@ -218,8 +217,8 @@ public class DistributionSetResource implements DistributionSetRestApi { } @Override - public ResponseEntity getMetadata(final Long distributionSetId, final int pagingOffsetParam, - final int pagingLimitParam, final String sortParam, final String rsqlParam) { + public ResponseEntity> getMetadata(final Long distributionSetId, + final int pagingOffsetParam, final int pagingLimitParam, final String sortParam, final String rsqlParam) { // check if distribution set exists otherwise throw exception // immediately @@ -241,7 +240,7 @@ public class DistributionSetResource implements DistributionSetRestApi { } return new ResponseEntity<>( - new MetadataRestPageList(DistributionSetMapper.toResponseDsMetadata(metaDataPage.getContent()), + new PagedList<>(DistributionSetMapper.toResponseDsMetadata(metaDataPage.getContent()), metaDataPage.getTotalElements()), HttpStatus.OK); 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 63b864758..51afbef41 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 @@ -20,10 +20,10 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssigmentResult; 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.TagPagedList; 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.TagsRest; @@ -53,8 +53,8 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity getDistributionSetTags(final int pagingOffsetParam, final int pagingLimitParam, - final String sortParam, final String rsqlParam) { + public ResponseEntity> getDistributionSetTags(final int pagingOffsetParam, + final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -76,7 +76,7 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } final List rest = TagMapper.toResponseDistributionSetTag(findTargetsAll.getContent()); - return new ResponseEntity<>(new TagPagedList(rest, countTargetsAll), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, countTargetsAll), HttpStatus.OK); } @Override 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 2267cb836..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 @@ -29,7 +29,6 @@ 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.RolloutPagedList; 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; @@ -63,8 +62,8 @@ public class RolloutResource implements RolloutRestApi { private DistributionSetManagement distributionSetManagement; @Override - public ResponseEntity getRollouts(final int pagingOffsetParam, final int pagingLimitParam, - final String sortParam, final String rsqlParam) { + public ResponseEntity> getRollouts(final int pagingOffsetParam, + final int pagingLimitParam, final String sortParam, final String rsqlParam) { final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam); final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam); @@ -81,7 +80,7 @@ public class RolloutResource implements RolloutRestApi { } final List rest = RolloutMapper.toResponseRollout(findModulesAll.getContent()); - return new ResponseEntity<>(new RolloutPagedList(rest, findModulesAll.getTotalElements()), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, findModulesAll.getTotalElements()), HttpStatus.OK); } @Override 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 e165fca20..8746a1585 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 @@ -23,7 +23,6 @@ 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.MetadataRestPageList; 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; @@ -191,7 +190,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } @Override - public ResponseEntity getMetadata(@PathVariable final Long softwareModuleId, + 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, @@ -215,7 +214,7 @@ public class SoftwareModuleResource implements SoftwareModuleRestAPI { } return new ResponseEntity<>( - new MetadataRestPageList(SoftwareModuleMapper.toResponseSwMetadata(metaDataPage.getContent()), + new PagedList<>(SoftwareModuleMapper.toResponseSwMetadata(metaDataPage.getContent()), metaDataPage.getTotalElements()), HttpStatus.OK); } 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 0e4bf9ec9..83a95dbb8 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 @@ -20,8 +20,8 @@ import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssigmentResult; 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.TagPagedList; 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.TagsRest; @@ -54,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); @@ -77,7 +77,7 @@ public class TargetTagResource implements TargetTagRestApi { } final List rest = TagMapper.toResponse(findTargetsAll.getContent()); - return new ResponseEntity<>(new TagPagedList(rest, countTargetsAll), HttpStatus.OK); + return new ResponseEntity<>(new PagedList<>(rest, countTargetsAll), HttpStatus.OK); } @Override From d23a1aecb41aa17f8ea88d0aa12999dba7c543cf Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 29 Mar 2016 12:01:27 +0200 Subject: [PATCH 035/344] - Add fixed size for hashset - Use 1 static block Signed-off-by: SirWayne --- .../java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) 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 f026378b9..12bcaacbc 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 @@ -27,7 +27,8 @@ import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; */ public class HawkbitEventProvider implements UIEventProvider { - private static final Set> SINGLE_EVENTS = new HashSet<>(); + private static final Set> SINGLE_EVENTS = new HashSet<>(6); + private static final Set> BULK_EVENTS = new HashSet<>(3); static { SINGLE_EVENTS.add(TargetTagCreatedBulkEvent.class); @@ -36,11 +37,7 @@ public class HawkbitEventProvider implements UIEventProvider { SINGLE_EVENTS.add(DistributionSetTagUpdateEvent.class); SINGLE_EVENTS.add(RolloutGroupChangeEvent.class); SINGLE_EVENTS.add(RolloutChangeEvent.class); - } - private static final Set> BULK_EVENTS = new HashSet<>(); - - static { BULK_EVENTS.add(TargetCreatedEvent.class); BULK_EVENTS.add(TargetInfoUpdateEvent.class); BULK_EVENTS.add(TargetDeletedEvent.class); From f33a8c37e8220d06552d86e428fa47a5fb2d32bd Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 29 Mar 2016 13:43:18 +0200 Subject: [PATCH 036/344] Corrected expected exception checks in tests --- ...SourceTrustAuthenticationProviderTest.java | 55 ++++++------ .../ArtifactManagementNoMongoDbTest.java | 11 ++- .../repository/ArtifactManagementTest.java | 9 +- .../repository/ControllerManagementTest.java | 10 ++- .../DistributionSetManagementTest.java | 67 +++++++++++---- .../repository/SoftwareManagementTest.java | 86 ++++++++++++++----- .../hawkbit/repository/TagManagementTest.java | 38 ++++++-- .../TargetFilterQueryManagenmentTest.java | 12 ++- .../repository/TargetManagementTest.java | 9 +- .../TenantConfigurationManagementTest.java | 56 +++++++++--- .../rest/resource/model/PagedListTest.java | 9 +- 11 files changed, 263 insertions(+), 99 deletions(-) diff --git a/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java b/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java index fb961f9b2..30307aee8 100644 --- a/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java +++ b/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.security; import static org.fest.assertions.Assertions.assertThat; +import static org.junit.Assert.fail; import static org.mockito.Mockito.when; import org.junit.Test; @@ -20,6 +21,7 @@ import org.springframework.security.authentication.InsufficientAuthenticationExc import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -38,11 +40,8 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { @Mock private TenantAwareWebAuthenticationDetails webAuthenticationDetailsMock; - /** - * Testing in case the containing controllerId in the URI request path does - * not accord with the controllerId in the request header. - */ - @Test(expected = BadCredentialsException.class) + @Test + @Description("Testing in case the containing controllerId in the URI request path does not accord with the controllerId in the request header.") public void principalAndCredentialsNotTheSameThrowsAuthenticationException() { final String principal = "controllerIdURL"; final String credentials = "controllerIdHeader"; @@ -51,15 +50,17 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { token.setDetails(webAuthenticationDetailsMock); // test, should throw authentication exception - underTestWithoutSourceIpCheck.authenticate(token); + try { + underTestWithoutSourceIpCheck.authenticate(token); + fail("Should not work with wrong credentials"); + } catch (final BadCredentialsException e) { + + } + } - /** - * Testing that the controllerId within the URI request path is the same - * with the controllerId within the request header and no source IP check is - * in place. - */ @Test + @Description("Testing that the controllerId within the URI request path is the same with the controllerId within the request header and no source IP check is in place.") public void principalAndCredentialsAreTheSameWithNoSourceIpCheckIsSuccessful() { final String principal = "controllerId"; final String credentials = "controllerId"; @@ -71,12 +72,8 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { assertThat(authenticate.isAuthenticated()).isTrue(); } - /** - * Testing that the controllerId in the URI request match with the - * controllerId in the request header but the request are not coming from a - * trustful source. - */ - @Test(expected = InsufficientAuthenticationException.class) + @Test + @Description("Testing that the controllerId in the URI request match with the controllerId in the request header but the request are not coming from a trustful source.") public void priniciapAndCredentialsAreTheSameButSourceIpRequestNotMatching() { final String remoteAddress = "192.168.1.1"; final String principal = "controllerId"; @@ -89,15 +86,16 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { // test, should throw authentication exception final Authentication authenticate = underTestWithSourceIpCheck.authenticate(token); - assertThat(authenticate.isAuthenticated()).isTrue(); + try { + assertThat(authenticate.isAuthenticated()).isTrue(); + fail("as source is not trusted."); + } catch (final InsufficientAuthenticationException e) { + + } } - /** - * Testing that the controllerId in the URI request match with the - * controllerId in the request header and the source Ip is matching the - * allowed remote IP address. - */ - @Test() + @Test + @Description("Testing that the controllerId in the URI request match with the controllerId in the request header and the source Ip is matching the allowed remote IP address.") public void priniciapAndCredentialsAreTheSameAndSourceIpIsTrusted() { final String principal = "controllerId"; final String credentials = "controllerId"; @@ -112,7 +110,7 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { assertThat(authenticate.isAuthenticated()).isTrue(); } - @Test() + @Test public void priniciapAndCredentialsAreTheSameAndSourceIpIsWithinList() { final String[] trustedIPAddresses = new String[] { "192.168.1.1", "192.168.1.2", REQUEST_SOURCE_IP, "192.168.1.3" }; @@ -148,6 +146,11 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { // test, should throw authentication exception final Authentication authenticate = underTestWithList.authenticate(token); - assertThat(authenticate.isAuthenticated()).isTrue(); + try { + assertThat(authenticate.isAuthenticated()).isTrue(); + fail("as source is not trusted."); + } catch (final InsufficientAuthenticationException e) { + + } } } 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 dd1e171ca..30f4093c2 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 @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.repository; +import static org.junit.Assert.fail; + import java.io.ByteArrayInputStream; import java.io.IOException; @@ -37,7 +39,7 @@ public class ArtifactManagementNoMongoDbTest extends AbstractIntegrationTest { System.setProperty("spring.data.mongodb.port", "1020"); } - @Test(expected = ArtifactUploadFailedException.class) + @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", @@ -46,7 +48,12 @@ public class ArtifactManagementNoMongoDbTest extends AbstractIntegrationTest { final byte random[] = RandomStringUtils.random(5 * 1024).getBytes(); - artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); + try { + artifactManagement.createLocalArtifact(new ByteArrayInputStream(random), sm.getId(), "file1", false); + fail("Should not have worked with MongoDb down."); + } catch (final ArtifactUploadFailedException e) { + + } } } 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 2929110dd..7c801a571 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 @@ -352,11 +352,16 @@ public class ArtifactManagementTest extends AbstractIntegrationTestWithMongoDB { artifactManagement.loadLocalArtifactBinary(result).getFileInputStream())); } - @Test(expected = InsufficientPermissionException.class) + @Test @WithUser(allSpPermissions = true, removeFromAllPermission = { SpPermission.DOWNLOAD_REPOSITORY_ARTIFACT }) @Description("Trys and fails to load an artifact without required permission. Checks if expected InsufficientPermissionException is thrown.") public void loadLocalArtifactBinaryWithoutDownloadArtifactThrowsPermissionDenied() { - artifactManagement.loadLocalArtifactBinary(new LocalArtifact()); + try { + artifactManagement.loadLocalArtifactBinary(new LocalArtifact()); + fail("Should not have worked with missing permission."); + } catch (final InsufficientPermissionException e) { + + } } @Test 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 ebe57d2b1..d77c137b1 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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; @@ -73,7 +74,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { .isEqualTo(3); } - @Test(expected = ConstraintViolationException.class) + @Test @Description("Register a controller which does not exist") public void testfindOrRegisterTargetIfItDoesNotexist() { final Target target = controllerManagament.findOrRegisterTargetIfItDoesNotexist("AA", null); @@ -84,7 +85,12 @@ public class ControllerManagementTest extends AbstractIntegrationTest { assertThat(targetRepository.count()).as("Only 1 target should be registred").isEqualTo(1L); // throws exception - controllerManagament.findOrRegisterTargetIfItDoesNotexist("", null); + try { + controllerManagament.findOrRegisterTargetIfItDoesNotexist("", null); + fail("should fail as target does not exist"); + } catch (final ConstraintViolationException e) { + + } } @Test 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 62dc21a3b..90cecfc14 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 @@ -100,7 +100,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .isEqualTo("test123"); } - @Test(expected = EntityReadOnlyException.class) + @Test @Description("Tests the unsuccessfull update of used distribution set type (module addition).") public void addModuleToAssignedDistributionSetTypeFails() { final DistributionSetType nonUpdatableType = distributionSetManagement @@ -111,10 +111,17 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .createDistributionSet(new DistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); nonUpdatableType.addMandatoryModuleType(osType); - distributionSetManagement.updateDistributionSetType(nonUpdatableType); + + try { + distributionSetManagement.updateDistributionSetType(nonUpdatableType); + fail("Should not have worked as DS is in use."); + } catch (final EntityReadOnlyException e) { + + } + } - @Test(expected = EntityReadOnlyException.class) + @Test @Description("Tests the unsuccessfull update of used distribution set type (module removal).") public void removeModuleToAssignedDistributionSetTypeFails() { DistributionSetType nonUpdatableType = distributionSetManagement @@ -128,7 +135,12 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .createDistributionSet(new DistributionSet("newtypesoft", "1", "", nonUpdatableType, null)); nonUpdatableType.removeModuleType(osType.getId()); - nonUpdatableType = distributionSetManagement.updateDistributionSetType(nonUpdatableType); + try { + distributionSetManagement.updateDistributionSetType(nonUpdatableType); + fail("Should not have worked as DS is in use."); + } catch (final EntityReadOnlyException e) { + + } } @Test @@ -156,13 +168,17 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { assertThat(distributionSetManagement.findDistributionSetTypeByKey("softdeleted").isDeleted()).isEqualTo(true); } - @Test(expected = EntityAlreadyExistsException.class) + @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); - TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); + try { + TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); + fail("Should not have worked as DS with same UK already exists."); + } catch (final EntityAlreadyExistsException e) { + } } @Test @@ -196,13 +212,18 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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)); - distributionSetManagement.createDistributionSet(set); + try { + distributionSetManagement.createDistributionSet(set); + fail("Should not have worked to create based on a persisted entity."); + } catch (final EntityAlreadyExistsException e) { + + } } @Test @@ -279,17 +300,22 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { } } - @Test(expected = DistributionSetTypeUndefinedException.class) + @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, ""); // update data - testSet.addModule(module); + try { + testSet.addModule(module); + fail("Should not have worked as DS type is undefined."); + } catch (final DistributionSetTypeUndefinedException e) { + + } } - @Test(expected = UnsupportedSoftwareModuleForThisDistributionSetException.class) + @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", @@ -297,7 +323,12 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { final SoftwareModule module = new SoftwareModule(appType, "agent-hub2", "1.0.5", null, ""); // update data - set.addModule(module); + try { + set.addModule(module); + fail("Should not have worked as module type is not in DS type."); + } catch (final UnsupportedSoftwareModuleForThisDistributionSetException e) { + + } } @Test @@ -596,7 +627,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .findDistributionSetsByFilters(pageReq, distributionSetFilterBuilder.build()).getContent()).hasSize(0); // combine deleted and complete and type - expected = new ArrayList(); + expected = new ArrayList<>(); expected.addAll(ds100Group1); expected.addAll(ds100Group2); distributionSetFilterBuilder = getDistributionSetFilterBuilder().setIsDeleted(Boolean.FALSE) @@ -605,7 +636,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .findDistributionSetsByFilters(pageReq, distributionSetFilterBuilder.build()).getContent()).hasSize(200) .containsOnly(expected.toArray(new DistributionSet[0])); - expected = new ArrayList(); + expected = new ArrayList<>(); expected.add(dsDeleted); distributionSetFilterBuilder = getDistributionSetFilterBuilder().setIsComplete(Boolean.TRUE) .setType(standardDsType).setIsDeleted(Boolean.TRUE); @@ -618,7 +649,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { assertThat(distributionSetManagement .findDistributionSetsByFilters(pageReq, distributionSetFilterBuilder.build()).getContent()).hasSize(0); - expected = new ArrayList(); + expected = new ArrayList<>(); expected.add(dsNewType); distributionSetFilterBuilder = getDistributionSetFilterBuilder().setIsComplete(Boolean.TRUE).setType(newType); assertThat(distributionSetManagement @@ -626,7 +657,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .containsOnly(expected.toArray(new DistributionSet[0])); // combine deleted and complete and type and text - expected = new ArrayList(); + expected = new ArrayList<>(); expected.addAll(ds100Group2); distributionSetFilterBuilder = getDistributionSetFilterBuilder().setIsComplete(Boolean.TRUE) .setType(standardDsType).setSearchText("%test2"); @@ -650,7 +681,7 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { .findDistributionSetsByFilters(pageReq, distributionSetFilterBuilder.build()).getContent()).hasSize(0); // combine deleted and complete and type and text and tag - expected = new ArrayList(); + expected = new ArrayList<>(); expected.addAll(ds100Group2); distributionSetFilterBuilder = getDistributionSetFilterBuilder().setIsComplete(true).setType(standardDsType) .setSearchText("%test2").setTagNames(Lists.newArrayList(dsTagA.getName())); @@ -672,7 +703,7 @@ public class DistributionSetManagementTest 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); for (final Action action : findByTarget) { 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 b227568e8..849cf8e30 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 @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -141,38 +142,60 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(updated.getVendor()).as("Updated vendor is").isEqualTo("changed"); } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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")); - softwareManagement.createSoftwareModule(ah); + try { + softwareManagement.createSoftwareModule(ah); + fail("Should not have worked as module already exists."); + } catch (final EntityAlreadyExistsException e) { + + } } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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"))); - softwareManagement.createSoftwareModule(modules); + try { + softwareManagement.createSoftwareModule(modules); + fail("Should not have worked as module already exists."); + } catch (final EntityAlreadyExistsException e) { + + } } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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)); - softwareManagement.createSoftwareModuleType(created); + + try { + softwareManagement.createSoftwareModuleType(created); + fail("Should not have worked as module already exists."); + } catch (final EntityAlreadyExistsException e) { + + } } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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", "test-name", "test-desc", 1), - new SoftwareModuleType("test-key2", "test-name", "test-desc", 1))); - softwareManagement.createSoftwareModuleType(created); + Lists.newArrayList(new SoftwareModuleType("test-key-bumlux", "test-name", "test-desc", 1), + new SoftwareModuleType("test-key-bumlux2", "test-name2", "test-desc", 1))); + + try { + softwareManagement.createSoftwareModuleType(created); + fail("Should not have worked as module already exists."); + } catch (final EntityAlreadyExistsException e) { + + } } @Test @@ -652,9 +675,8 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { new CustomSoftwareModule(two, true), new CustomSoftwareModule(unassigned, false)); // without any filter - assertThat(softwareManagement - .findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc(pageReq, set.getId(), null, null) - .getContent()).as("Found modules with the assigned ones first").containsExactly( + assertThat(softwareManagement.findSoftwareModuleOrderBySetAssignmentAndModuleNameAscModuleVersionAsc(pageReq, + set.getId(), null, null).getContent()).as("Found modules with the assigned ones first").containsExactly( new CustomSoftwareModule(differentName, true), new CustomSoftwareModule(one, true), new CustomSoftwareModule(two, true), new CustomSoftwareModule(four, true), new CustomSoftwareModule(unassigned, false)); @@ -731,21 +753,32 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { .isEqualTo(found); } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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)); - softwareManagement.createSoftwareModuleType(created); + try { + softwareManagement.createSoftwareModuleType(created); + fail("should not have worked as module type already exists"); + } catch (final EntityAlreadyExistsException e) { + + } + } - @Test(expected = EntityAlreadyExistsException.class) + @Test @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)); - softwareManagement.createSoftwareModuleType( - Lists.newArrayList(created, new SoftwareModuleType("anothertype", "anothername", "desc", 100))); + try { + softwareManagement.createSoftwareModuleType( + Lists.newArrayList(created, new SoftwareModuleType("anothertype", "anothername", "desc", 100))); + fail("should not have worked as module type already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } @Test @@ -819,7 +852,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { assertThat(softwareModuleMetadata.get(0).getSoftwareModule().getId()).isEqualTo(ah.getId()); } - @Test(expected = EntityAlreadyExistsException.class) + @Test @Description("Checks that metadata for a software module cannot be created for an existing key.") public void createSoftwareModuleMetadataFailsIfKeyExists() { @@ -832,7 +865,12 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)); - softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue2)); + try { + softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue2)); + fail("should not have worked as module metadata already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } @Test @@ -902,7 +940,7 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { .isEmpty(); } - @Test(expected = EntityNotFoundException.class) + @Test @Description("Verfies that non existing metadata find results in exception.") public void findSoftwareModuleMetadataFailsIfEntryDoesNotExist() { final String knownKey1 = "myKnownKey1"; @@ -914,8 +952,12 @@ public class SoftwareManagementTest extends AbstractIntegrationTestWithMongoDB { ah = softwareManagement.createSoftwareModuleMetadata(new SoftwareModuleMetadata(knownKey1, ah, knownValue1)) .getSoftwareModule(); - softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(ah, "doesnotexist")); + try { + softwareManagement.findSoftwareModuleMetadata(new SwMetadataCompositeKey(ah, "doesnotexist")); + fail("should not have worked as module metadata with that key does not exist"); + } catch (final EntityNotFoundException e) { + } } @Test 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 69ad50f02..73244871f 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 @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; @@ -362,38 +363,59 @@ public class TagManagementTest extends AbstractIntegrationTest { } } - @Test(expected = EntityAlreadyExistsException.class) + @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 TargetTag("A")); + + try { + tagManagement.createTargetTag(new TargetTag("A")); + fail("should not have worked as tag already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } - @Test(expected = EntityAlreadyExistsException.class) + @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")); tag.setName("A"); - tagManagement.updateTargetTag(tag); + try { + tagManagement.updateTargetTag(tag); + fail("should not have worked as tag already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } - @Test(expected = EntityAlreadyExistsException.class) + @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 DistributionSetTag("A")); + try { + tagManagement.createDistributionSetTag(new DistributionSetTag("A")); + fail("should not have worked as tag already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } - @Test(expected = EntityAlreadyExistsException.class) + @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")); tag.setName("A"); - tagManagement.updateDistributionSetTag(tag); + try { + tagManagement.updateDistributionSetTag(tag); + fail("should not have worked as tag already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } @Test 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 87fdff253..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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import org.eclipse.hawkbit.AbstractIntegrationTest; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; @@ -37,15 +38,20 @@ public class TargetFilterQueryManagenmentTest extends AbstractIntegrationTest { targetFilterQueryManagement.findTargetFilterQueryByName(filterName)); } - @Test(expected = EntityAlreadyExistsException.class) + @Test @Description("Checks if the EntityAlreadyExistsException is thrown if a targetfilterquery with the same name are created more than once.") public void createDuplicateTargetFilterQuery() { final String filterName = "new target filter duplicate"; targetFilterQueryManagement .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); - targetFilterQueryManagement - .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + try { + targetFilterQueryManagement + .createTargetFilterQuery(new TargetFilterQuery(filterName, "name==PendingTargets001")); + fail("should not have worked as query already exists"); + } catch (final EntityAlreadyExistsException e) { + + } } @Test 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 4a664f5b8..36fd2754b 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 @@ -54,11 +54,16 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Target Management") public class TargetManagementTest extends AbstractIntegrationTest { - @Test(expected = TenantNotExistException.class) + @Test @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists.") @WithUser(tenantId = "tenantWhichDoesNotExists", allSpPermissions = true, autoCreateTenant = false) public void createTargetForTenantWhichDoesNotExistThrowsTenantNotExistException() { - targetManagement.createTarget(new Target("targetId123")); + try { + targetManagement.createTarget(new Target("targetId123")); + fail("should not be possible as the tenant does not exist"); + } catch (final TenantNotExistException e) { + // ok + } } @Test diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java index 3425c6479..1427df25b 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/TenantConfigurationManagementTest.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.repository; import static org.fest.assertions.api.Assertions.assertThat; +import static org.junit.Assert.fail; import java.time.Duration; import java.util.Arrays; @@ -91,13 +92,19 @@ public class TenantConfigurationManagementTest extends AbstractIntegrationTestWi .isEqualTo(value2); } - @Test(expected = TenantConfigurationValidatorException.class) + @Test @Description("Tests that the get configuration throws exception in case the value cannot be automatically converted from String to Boolean") public void wrongTenantConfigurationValueTypeThrowsException() { final TenantConfigurationKey configKey = TenantConfigurationKey.AUTHENTICATION_MODE_HEADER_ENABLED; final String value1 = "thisIsNotABoolean"; + // add value as String - tenantConfigurationManagement.addOrUpdateConfiguration(configKey, value1); + try { + tenantConfigurationManagement.addOrUpdateConfiguration(configKey, value1); + fail("should not have worked as string is not a boolean"); + } catch (final TenantConfigurationValidatorException e) { + + } } @Test @@ -128,46 +135,71 @@ public class TenantConfigurationManagementTest extends AbstractIntegrationTestWi assertThat(tenantConfigurationManagement.getConfigurationValue(configKey, String.class).getValue()).isNull(); } - @Test(expected = TenantConfigurationValidatorException.class) + @Test @Description("Test that an Exception is thrown, when an integer is stored but a string expected.") public void storesIntegerWhenStringIsExpected() { final TenantConfigurationKey configKey = TenantConfigurationKey.AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_NAME; final Integer wrongDataype = 123; - tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongDataype); + try { + tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongDataype); + fail("should not have worked as integer is not a string"); + } catch (final TenantConfigurationValidatorException e) { + + } } - @Test(expected = TenantConfigurationValidatorException.class) + @Test @Description("Test that an Exception is thrown, when an integer is stored but a boolean expected.") public void storesIntegerWhenBooleanIsExpected() { final TenantConfigurationKey configKey = TenantConfigurationKey.AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_ENABLED; final Integer wrongDataype = 123; - tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongDataype); + try { + tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongDataype); + fail("should not have worked as integer is not a boolean"); + } catch (final TenantConfigurationValidatorException e) { + + } } - @Test(expected = TenantConfigurationValidatorException.class) + @Test @Description("Test that an Exception is thrown, when an integer is stored as PollingTime.") public void storesIntegerWhenPollingIntervalIsExpected() { final TenantConfigurationKey configKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; final Integer wrongDataype = 123; - tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongDataype); + try { + tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongDataype); + fail("should not have worked as integer is not a time field"); + } catch (final TenantConfigurationValidatorException e) { + + } } - @Test(expected = TenantConfigurationValidatorException.class) + @Test @Description("Test that an Exception is thrown, when an invalid formatted string is stored as PollingTime.") public void storesWrongFormattedStringAsPollingInterval() { final TenantConfigurationKey configKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; final String wrongFormatted = "wrongFormatted"; - tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongFormatted); + try { + tenantConfigurationManagement.addOrUpdateConfiguration(configKey, wrongFormatted); + fail("should not have worked as string is not a time field"); + } catch (final TenantConfigurationValidatorException e) { + + } } - @Test(expected = TenantConfigurationValidatorException.class) + @Test @Description("Test that an Exception is thrown, when an invalid formatted string is stored as PollingTime.") public void storesTooSmallDurationAsPollingInterval() { final TenantConfigurationKey configKey = TenantConfigurationKey.POLLING_TIME_INTERVAL; final String tooSmallDuration = DurationHelper .durationToFormattedString(DurationHelper.getDurationByTimeValues(0, 0, 1)); - tenantConfigurationManagement.addOrUpdateConfiguration(configKey, tooSmallDuration); + try { + tenantConfigurationManagement.addOrUpdateConfiguration(configKey, tooSmallDuration); + fail("should not have worked as string has an invalid format"); + } catch (final TenantConfigurationValidatorException e) { + + } } @Test diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java index 49e13c0b4..68ce570a1 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/rest/resource/model/PagedListTest.java @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.rest.resource.model; import static org.fest.assertions.Assertions.assertThat; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; @@ -23,10 +24,14 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Paged List Handling") public class PagedListTest { - @Test(expected = NullPointerException.class) + @Test @Description("Ensures that a null payload entitiy throws an exception.") public void createListWithNullContentThrowsException() { - new PagedList<>(null, 0); + try { + new PagedList<>(null, 0); + fail("as content is null"); + } catch (final NullPointerException e) { + } } @Test From db12385d8d81dfa908d9d0f54ccc364f527cbe87 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 29 Mar 2016 13:49:34 +0200 Subject: [PATCH 037/344] Removed generated but unnecessary comments --- .../RepositoryApplicationConfiguration.java | 14 +----- .../ExceptionMappingAspectHandler.java | 5 --- .../EntityPropertyChangeListener.java | 45 +++++-------------- .../event/AbstractBaseEntityEvent.java | 22 ++------- .../repository/NoCountPagingRepository.java | 12 ----- .../hawkbit/repository/ReportManagement.java | 36 --------------- .../hawkbit/repository/SystemManagement.java | 10 ----- .../TenantConfigurationRepository.java | 8 ---- .../repository/TenantKeyGenerator.java | 10 ----- .../hawkbit/repository/model/Target.java | 5 --- .../repository/model/TargetIdName.java | 5 --- .../hawkbit/repository/rsql/RSQLUtility.java | 8 ---- 12 files changed, 16 insertions(+), 164 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 bf805f3dd..8ef427dcf 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -13,8 +13,8 @@ import java.util.Map; import org.eclipse.hawkbit.aspects.ExceptionMappingAspectHandler; import org.eclipse.hawkbit.repository.SystemManagement; -import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecutorHolder; 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; @@ -127,23 +127,11 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { return new ExceptionMappingAspectHandler(); } - /* - * (non-Javadoc) - * - * @see org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration# - * createJpaVendorAdapter() - */ @Override protected AbstractJpaVendorAdapter createJpaVendorAdapter() { return new EclipseLinkJpaVendorAdapter(); } - /* - * (non-Javadoc) - * - * @see org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration# - * getVendorProperties() - */ @Override protected Map getVendorProperties() { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java index 75145778e..3824ae80f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java @@ -167,11 +167,6 @@ public class ExceptionMappingAspectHandler implements Ordered { return null; } - /* - * (non-Javadoc) - * - * @see org.springframework.core.Ordered#getOrder() - */ @Override public int getOrder() { return 1; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java index 5fd4ba27d..28b5e677c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/EntityPropertyChangeListener.java @@ -18,9 +18,9 @@ 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.model.Action; -import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; 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; @@ -36,13 +36,7 @@ import com.google.common.eventbus.EventBus; * */ public class EntityPropertyChangeListener extends DescriptorEventAdapter { - /* - * (non-Javadoc) - * - * @see - * org.eclipse.persistence.descriptors.DescriptorEventAdapter#postInsert - * (org.eclipse.persistence.descriptors.DescriptorEvent) - */ + @Override public void postInsert(final DescriptorEvent event) { if (event.getObject().getClass().equals(Action.class)) { @@ -56,30 +50,18 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.persistence.descriptors.DescriptorEventAdapter#postUpdate - * (org.eclipse.persistence.descriptors.DescriptorEvent) - */ @Override public void postUpdate(final DescriptorEvent event) { if (event.getObject().getClass().equals(Action.class)) { - getAfterTransactionCommmitExecutor().afterCommit( - () -> getEventBus() - .post(new ActionPropertyChangeEvent((Action) event.getObject(), getChangeSet(Action.class, - event)))); + getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus().post( + new ActionPropertyChangeEvent((Action) event.getObject(), getChangeSet(Action.class, event)))); } else if (event.getObject().getClass().equals(Rollout.class)) { - getAfterTransactionCommmitExecutor().afterCommit( - () -> getEventBus().post( - new RolloutPropertyChangeEvent((Rollout) event.getObject(), getChangeSet(Rollout.class, - event)))); + getAfterTransactionCommmitExecutor().afterCommit(() -> getEventBus().post( + new RolloutPropertyChangeEvent((Rollout) event.getObject(), getChangeSet(Rollout.class, event)))); } else if (event.getObject().getClass().equals(RolloutGroup.class)) { getAfterTransactionCommmitExecutor().afterCommit( - () -> getEventBus().post( - new RolloutGroupPropertyChangeEvent((RolloutGroup) event.getObject(), getChangeSet( - RolloutGroup.class, event)))); + () -> getEventBus().post(new RolloutGroupPropertyChangeEvent((RolloutGroup) event.getObject(), + getChangeSet(RolloutGroup.class, event)))); } } @@ -87,14 +69,11 @@ public class EntityPropertyChangeListener extends DescriptorEventAdapter { final Class clazz, final DescriptorEvent event) { final T rolloutGroup = clazz.cast(event.getObject()); final ObjectChangeSet changeSet = ((UpdateObjectQuery) event.getQuery()).getObjectChangeSet(); - return changeSet - .getChanges() - .stream() - .filter(record -> record instanceof DirectToFieldChangeRecord) + return changeSet.getChanges().stream().filter(record -> record instanceof DirectToFieldChangeRecord) .map(record -> (DirectToFieldChangeRecord) record) - .collect( - Collectors.toMap(record -> record.getAttribute(), record -> new AbstractPropertyChangeEvent( - rolloutGroup, null).new Values(record.getOldValue(), record.getNewValue()))); + .collect(Collectors.toMap(record -> record.getAttribute(), + record -> new AbstractPropertyChangeEvent(rolloutGroup, null).new Values( + record.getOldValue(), record.getNewValue()))); } private AfterTransactionCommitExecutor getAfterTransactionCommmitExecutor() { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java index 15864eb8f..d27669ade 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/AbstractBaseEntityEvent.java @@ -11,8 +11,9 @@ package org.eclipse.hawkbit.eventbus.event; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** - * An abstract definition class for {@link EntityEvent} for {@link TenantAwareBaseEntity}s, - * which holds the {@link TenantAwareBaseEntity}. + * An abstract definition class for {@link EntityEvent} for + * {@link TenantAwareBaseEntity}s, which holds the {@link TenantAwareBaseEntity} + * . * * * @@ -37,33 +38,16 @@ public abstract class AbstractBaseEntityEvent e this.entity = baseEntity; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.eventbus.event.EntityEvent#getEntity() - */ @Override public E getEntity() { return entity; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.eventbus.event.EntityEvent#getEntity(java.lang - * .Class) - */ @Override public T getEntity(final Class entityClass) { return entityClass.cast(entity); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.eventbus.event.EntityEvent#getTenant() - */ @Override public String getTenant() { return entity.getTenant(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java index 79f54a3f0..0624f269a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/NoCountPagingRepository.java @@ -29,9 +29,6 @@ import org.springframework.stereotype.Repository; * Workaround as spring data does not provide a {@link Slice} based * {@link JpaRepository#findAll()}. * - * - * - * */ @Repository public class NoCountPagingRepository { @@ -104,15 +101,6 @@ public class NoCountPagingRepository { super(domainClass, em); } - /* - * (non-Javadoc) - * - * @see - * org.springframework.data.jpa.repository.support.SimpleJpaRepository# - * readPage(javax.persistence .TypedQuery, - * org.springframework.data.domain.Pageable, - * org.springframework.data.jpa.domain.Specification) - */ @Override protected Page readPage(final TypedQuery query, final Pageable pageable, final Specification spec) { query.setFirstResult(pageable.getOffset()); 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 eab926b4b..b95664d8f 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 @@ -458,11 +458,6 @@ public class ReportManagement { return name; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; @@ -471,11 +466,6 @@ public class ReportManagement { return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { // NOSONAR - as this is // generated @@ -499,11 +489,6 @@ public class ReportManagement { return true; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "DSName [name=" + name + "]"; @@ -523,9 +508,6 @@ public class ReportManagement { /** * Return DateTypes. - * - * - * */ public static final class DateTypes implements Serializable { /** @@ -585,12 +567,6 @@ public class ReportManagement { private static final long serialVersionUID = 1L; private static final String DATE_PATTERN = "yyyy-MM"; - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.repository.ReportManagement.DateType# - * format(java. lang.String) - */ @Override public LocalDate format(final String s) { final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_PATTERN); @@ -598,23 +574,11 @@ public class ReportManagement { return ym.atDay(1); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.repository.ReportManagement.DateType# - * h2Format() - */ @Override public String h2Format() { return DATE_PATTERN; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.repository.ReportManagement.DateType# - * mySqlFormat( ) - */ @Override public String mySqlFormat() { return "%Y-%m"; 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 31f5f1c18..5577e1d61 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 @@ -339,18 +339,8 @@ public class SystemManagement { * default types we need to use the tenant the current tenant which is * currently created and not the one currently in the {@link TenantAware}. * - * - * */ private class CurrentTenantKeyGenerator implements KeyGenerator { - - /* - * (non-Javadoc) - * - * @see - * org.springframework.cache.interceptor.KeyGenerator#generate(java.lang - * .Object, java.lang.reflect.Method, java.lang.Object[]) - */ @Override public Object generate(final Object target, final Method method, final Object... params) { final String initialTenantCreation = createInitialTenant.get(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java index d8973f275..dd741697b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java @@ -16,9 +16,6 @@ import org.springframework.transaction.annotation.Transactional; /** * The spring-data repository for the entity {@link TenantConfiguration}. * - * - * - * */ @Transactional(readOnly = true) public interface TenantConfigurationRepository extends BaseEntityRepository { @@ -32,11 +29,6 @@ public interface TenantConfigurationRepository extends BaseEntityRepository findAll(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java index d0a2b4ea7..3265b622c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantKeyGenerator.java @@ -18,9 +18,6 @@ import org.springframework.stereotype.Service; /** * {@link KeyGenerator} for tenant related caches. * - * - * - * */ @Service public class TenantKeyGenerator implements KeyGenerator { @@ -28,13 +25,6 @@ public class TenantKeyGenerator implements KeyGenerator { @Autowired private TenantAware tenantAware; - /* - * (non-Javadoc) - * - * @see - * org.springframework.cache.interceptor.KeyGenerator#generate(java.lang. - * Object, java.lang.reflect.Method, java.lang.Object[]) - */ @Override public Object generate(final Object target, final Method method, final Object... params) { return tenantAware.getCurrentTenant().toUpperCase(); 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 973c7382a..4121aa4ec 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 @@ -246,11 +246,6 @@ public class Target extends NamedEntity implements Persistable { this.securityToken = securityToken; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { return "Target [controllerId=" + controllerId + ", getId()=" + getId() + "]"; 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 91542a422..26a74e9bb 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 @@ -59,11 +59,6 @@ public class TargetIdName implements Serializable { return targetId; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java index 03f213fef..c2ed5f900 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java @@ -139,14 +139,6 @@ public final class RSQLUtility { this.enumType = enumType; } - /* - * (non-Javadoc) - * - * @see - * org.springframework.data.jpa.domain.Specification#toPredicate(javax. - * persistence.criteria .Root, javax.persistence.criteria.CriteriaQuery, - * javax.persistence.criteria.CriteriaBuilder) - */ @Override public Predicate toPredicate(final Root root, final CriteriaQuery query, final CriteriaBuilder cb) { From 4a52936a3c4f2b06ce168925913a3b2a72f5cb50 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 29 Mar 2016 15:03:58 +0200 Subject: [PATCH 038/344] allow to set the filename and software module id Signed-off-by: Michael Hirsch --- .../hawkbit/dmf/json/model/TenantSecurityToken.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java index 154ad5158..ccc3a5b42 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java @@ -186,9 +186,9 @@ public class TenantSecurityToken { @JsonIgnoreProperties(ignoreUnknown = true) public static class SoftwareModuleFilenameResource { @JsonProperty(required = false) - private final Long softwareModuleId; + private Long softwareModuleId; @JsonProperty(required = false) - private final String filename; + private String filename; /** * Constructor. @@ -213,6 +213,14 @@ public class TenantSecurityToken { public String getFilename() { return filename; } + + public void setSoftwareModuleId(final Long softwareModuleId) { + this.softwareModuleId = softwareModuleId; + } + + public void setFilename(final String filename) { + this.filename = filename; + } } } } From 7d3d4f1fd4b3ec55532ec5fff9cdadc336dc5326 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 29 Mar 2016 15:37:07 +0200 Subject: [PATCH 039/344] Fixed broken test. --- .../PreAuthTokenSourceTrustAuthenticationProviderTest.java | 4 ++-- .../org/eclipse/hawkbit/repository/ControllerManagement.java | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java b/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java index 30307aee8..eb4cacf33 100644 --- a/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java +++ b/hawkbit-http-security/src/test/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProviderTest.java @@ -85,9 +85,9 @@ public class PreAuthTokenSourceTrustAuthenticationProviderTest { when(webAuthenticationDetailsMock.getRemoteAddress()).thenReturn(remoteAddress); // test, should throw authentication exception - final Authentication authenticate = underTestWithSourceIpCheck.authenticate(token); + try { - assertThat(authenticate.isAuthenticated()).isTrue(); + underTestWithSourceIpCheck.authenticate(token); fail("as source is not trusted."); } catch (final InsufficientAuthenticationException e) { 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 271221e4a..0bb94bd72 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 @@ -379,7 +379,6 @@ public class ControllerManagement { handleErrorOnAction(mergedAction, mergedTarget); break; case FINISHED: - handleFinishedAndStoreInTargetStatus(mergedTarget, mergedAction); break; case CANCELED: @@ -399,7 +398,6 @@ public class ControllerManagement { } private void handleErrorOnAction(final Action mergedAction, final Target mergedTarget) { - // set action inactive mergedAction.setActive(false); mergedAction.setStatus(Status.ERROR); mergedTarget.setAssignedDistributionSet(null); From f002eede43fcd86b481e5c300686552acab738c2 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 29 Mar 2016 17:07:54 +0200 Subject: [PATCH 040/344] Found two more classes to remove --- .../api/DistributionSetTagRestApi.java | 3 +- .../rest/resource/api/TargetTagRestApi.java | 3 +- .../resource/model/action/ActionRest.java | 3 - .../resource/model/action/ActionsRest.java | 276 ------------------ .../rest/resource/model/tag/TagsRest.java | 275 ----------------- .../resource/DistributionSetTagResource.java | 3 +- .../hawkbit/rest/resource/TagMapper.java | 11 +- .../hawkbit/rest/resource/TargetMapper.java | 5 +- .../rest/resource/TargetTagResource.java | 3 +- 9 files changed, 10 insertions(+), 572 deletions(-) delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionsRest.java delete mode 100644 hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagsRest.java diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java index d86b90d6a..e362351aa 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/DistributionSetTagRestApi.java @@ -17,7 +17,6 @@ import org.eclipse.hawkbit.rest.resource.model.tag.DistributionSetTagAssigmentRe import org.eclipse.hawkbit.rest.resource.model.tag.TagPagedList; 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.TagsRest; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; @@ -87,7 +86,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); + public ResponseEntity> createDistributionSetTags(@RequestBody final List tags); /** * diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java index ac82fbd5c..6bc8b10db 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/api/TargetTagRestApi.java @@ -15,7 +15,6 @@ import org.eclipse.hawkbit.rest.resource.model.tag.AssignedTargetRequestBody; import org.eclipse.hawkbit.rest.resource.model.tag.TagPagedList; 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.TagsRest; import org.eclipse.hawkbit.rest.resource.model.tag.TargetTagAssigmentResultRest; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.springframework.http.MediaType; @@ -85,7 +84,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); + public ResponseEntity> createTargetTags(@RequestBody final List tags); /** * diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java index 3bd57ab20..630bcb993 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionRest.java @@ -18,9 +18,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * A json annotated rest model for Action to RESTful API representation. * - * - * - * */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionsRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionsRest.java deleted file mode 100644 index 9c3659f30..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/action/ActionsRest.java +++ /dev/null @@ -1,276 +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.model.action; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * A json annotated rest model for Actions to RESTful API representation. - * - * - * - * - */ -public class ActionsRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final ActionRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public ActionRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public ActionRest set(final int index, final ActionRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final ActionRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public ActionRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagsRest.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagsRest.java deleted file mode 100644 index df0638358..000000000 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/tag/TagsRest.java +++ /dev/null @@ -1,275 +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.model.tag; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.springframework.hateoas.ResourceSupport; - -/** - * List representation of the {@link TagRest} because Spring MVC cannot handle - * plain lists interfaces as request body. - * - * - */ -public class TagsRest extends ResourceSupport implements List { - - private final List delegate = new ArrayList<>(); - - /** - * @return - * @see java.util.List#size() - */ - @Override - public int size() { - return delegate.size(); - } - - /** - * @return - * @see java.util.List#isEmpty() - */ - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - /** - * @param o - * @return - * @see java.util.List#contains(java.lang.Object) - */ - @Override - public boolean contains(final Object o) { - return delegate.contains(o); - } - - /** - * @return - * @see java.util.List#iterator() - */ - @Override - public Iterator iterator() { - return delegate.iterator(); - } - - /** - * @return - * @see java.util.List#toArray() - */ - @Override - public Object[] toArray() { - return delegate.toArray(); - } - - /** - * @param a - * @return - * @see java.util.List#toArray(java.lang.Object[]) - */ - @Override - public T[] toArray(final T[] a) { - return delegate.toArray(a); - } - - /** - * @param e - * @return - * @see java.util.List#add(java.lang.Object) - */ - @Override - public boolean add(final TagRest e) { - return delegate.add(e); - } - - /** - * @param o - * @return - * @see java.util.List#remove(java.lang.Object) - */ - @Override - public boolean remove(final Object o) { - return delegate.remove(o); - } - - /** - * @param c - * @return - * @see java.util.List#containsAll(java.util.Collection) - */ - @Override - public boolean containsAll(final Collection c) { - return delegate.containsAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#addAll(java.util.Collection) - */ - @Override - public boolean addAll(final Collection c) { - return delegate.addAll(c); - } - - /** - * @param index - * @param c - * @return - * @see java.util.List#addAll(int, java.util.Collection) - */ - @Override - public boolean addAll(final int index, final Collection c) { - return delegate.addAll(index, c); - } - - /** - * @param c - * @return - * @see java.util.List#removeAll(java.util.Collection) - */ - @Override - public boolean removeAll(final Collection c) { - return delegate.removeAll(c); - } - - /** - * @param c - * @return - * @see java.util.List#retainAll(java.util.Collection) - */ - @Override - public boolean retainAll(final Collection c) { - return delegate.retainAll(c); - } - - /** - * - * @see java.util.List#clear() - */ - @Override - public void clear() { - delegate.clear(); - } - - /** - * @param o - * @return - * @see java.util.List#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object o) { - return delegate.equals(o); - } - - /** - * @return - * @see java.util.List#hashCode() - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * @param index - * @return - * @see java.util.List#get(int) - */ - @Override - public TagRest get(final int index) { - return delegate.get(index); - } - - /** - * @param index - * @param element - * @return - * @see java.util.List#set(int, java.lang.Object) - */ - @Override - public TagRest set(final int index, final TagRest element) { - return delegate.set(index, element); - } - - /** - * @param index - * @param element - * @see java.util.List#add(int, java.lang.Object) - */ - @Override - public void add(final int index, final TagRest element) { - delegate.add(index, element); - } - - /** - * @param index - * @return - * @see java.util.List#remove(int) - */ - @Override - public TagRest remove(final int index) { - return delegate.remove(index); - } - - /** - * @param o - * @return - * @see java.util.List#indexOf(java.lang.Object) - */ - @Override - public int indexOf(final Object o) { - return delegate.indexOf(o); - } - - /** - * @param o - * @return - * @see java.util.List#lastIndexOf(java.lang.Object) - */ - @Override - public int lastIndexOf(final Object o) { - return delegate.lastIndexOf(o); - } - - /** - * @return - * @see java.util.List#listIterator() - */ - @Override - public ListIterator listIterator() { - return delegate.listIterator(); - } - - /** - * @param index - * @return - * @see java.util.List#listIterator(int) - */ - @Override - public ListIterator listIterator(final int index) { - return delegate.listIterator(index); - } - - /** - * @param fromIndex - * @param toIndex - * @return - * @see java.util.List#subList(int, int) - */ - @Override - public List subList(final int fromIndex, final int toIndex) { - return delegate.subList(fromIndex, toIndex); - } - -} 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 96a45aa6e..4406af311 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 @@ -26,7 +26,6 @@ import org.eclipse.hawkbit.rest.resource.model.tag.DistributionSetTagAssigmentRe import org.eclipse.hawkbit.rest.resource.model.tag.TagPagedList; 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.TagsRest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -86,7 +85,7 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { } @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 diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java index b5e84abe8..f9f0caba0 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TagMapper.java @@ -21,7 +21,6 @@ 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; -import org.eclipse.hawkbit.rest.resource.model.tag.TagsRest; /** * A mapper which maps repository model to RESTful model representation and @@ -33,8 +32,8 @@ final class TagMapper { // Utility class } - static TagsRest toResponse(final List targetTags) { - final TagsRest tagsRest = new TagsRest(); + static List toResponse(final List targetTags) { + final List tagsRest = new ArrayList<>(); if (targetTags == null) { return tagsRest; } @@ -63,8 +62,8 @@ final class TagMapper { return response; } - static TagsRest toResponseDistributionSetTag(final List distributionSetTags) { - final TagsRest tagsRest = new TagsRest(); + static List toResponseDistributionSetTag(final List distributionSetTags) { + final List tagsRest = new ArrayList<>(); if (distributionSetTags == null) { return tagsRest; } @@ -131,7 +130,5 @@ final class TagMapper { if (response.getName() != null) { tag.setName(response.getName()); } - } - } diff --git a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java index 0cb3c72a3..c8a39a2f3 100644 --- a/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java +++ b/hawkbit-rest-resource/src/main/java/org/eclipse/hawkbit/rest/resource/TargetMapper.java @@ -27,7 +27,6 @@ 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.action.ActionsRest; import org.eclipse.hawkbit.rest.resource.model.target.TargetRequestBody; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; @@ -214,8 +213,8 @@ public final class TargetMapper { return result; } - static ActionsRest toResponse(final String targetId, final List actions) { - final ActionsRest mappedList = new ActionsRest(); + 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()); 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 7ef9489ca..110cbc840 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 @@ -24,7 +24,6 @@ import org.eclipse.hawkbit.rest.resource.model.tag.AssignedTargetRequestBody; import org.eclipse.hawkbit.rest.resource.model.tag.TagPagedList; 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.TagsRest; import org.eclipse.hawkbit.rest.resource.model.tag.TargetTagAssigmentResultRest; import org.eclipse.hawkbit.rest.resource.model.target.TargetRest; import org.slf4j.Logger; @@ -87,7 +86,7 @@ public class TargetTagResource implements TargetTagRestApi { } @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)); From 292ca31768637609902733a924e5264486abc727 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 09:03:09 +0200 Subject: [PATCH 041/344] Found even more code that could be deleted --- .../hawkbit/repository/model/Action.java | 3 -- .../repository/model/ActionStatus.java | 3 -- .../model/ActionWithStatusCount.java | 39 ------------------- .../hawkbit/repository/model/Artifact.java | 3 -- .../hawkbit/repository/model/BaseEntity.java | 2 +- .../repository/model/DistributionSet.java | 12 ------ .../repository/model/DistributionSetTag.java | 3 -- .../repository/model/DistributionSetType.java | 3 -- .../model/DistributionSetTypeElement.java | 12 ------ .../repository/model/ExternalArtifact.java | 17 -------- .../model/ExternalArtifactProvider.java | 3 -- .../repository/model/LocalArtifact.java | 3 -- .../hawkbit/repository/model/NamedEntity.java | 3 -- .../model/NamedVersionedEntity.java | 3 -- .../hawkbit/repository/model/Rollout.java | 3 -- .../repository/model/RolloutGroup.java | 3 -- .../model/RolloutTargetGroupId.java | 5 --- .../repository/model/SoftwareModule.java | 13 ------- .../repository/model/SoftwareModuleType.java | 3 -- .../eclipse/hawkbit/repository/model/Tag.java | 3 -- .../hawkbit/repository/model/Target.java | 5 +-- .../repository/model/TargetFilterQuery.java | 3 -- .../hawkbit/repository/model/TargetTag.java | 3 -- .../model/TargetWithActionStatus.java | 14 ------- .../model/TenantAwareBaseEntity.java | 3 -- .../repository/model/TenantConfiguration.java | 3 -- .../repository/model/TenantMetaData.java | 3 -- 27 files changed, 2 insertions(+), 171 deletions(-) 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 aeb4e64d8..afc6998ad 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 @@ -264,9 +264,6 @@ public class Action extends TenantAwareBaseEntity implements Comparable @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 8493acfad..f67229b69 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 @@ -150,9 +150,6 @@ public class ActionStatus extends TenantAwareBaseEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 44beb194a..73eab32f9 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 @@ -86,93 +86,54 @@ public class ActionWithStatusCount { action.setId(actionId); } - /** - * @return the action - */ public Action getAction() { return action; } - /** - * @return the actionId - */ public Long getActionId() { return actionId; } - /** - * @return the actionType - */ public ActionType getActionType() { return actionType; } - /** - * @return the actionActive - */ public boolean isActionActive() { return actionActive; } - /** - * @return the actionForceTime - */ public long getActionForceTime() { return actionForceTime; } - /** - * @return the actionStatus - */ public Status getActionStatus() { return actionStatus; } - /** - * @return the actionCreatedAt - */ public Long getActionCreatedAt() { return actionCreatedAt; } - /** - * @return the actionLastModifiedAt - */ public Long getActionLastModifiedAt() { return actionLastModifiedAt; } - /** - * @return the dsId - */ public Long getDsId() { return dsId; } - /** - * @return the dsName - */ public String getDsName() { return dsName; } - /** - * @return the dsVersion - */ public String getDsVersion() { return dsVersion; } - /** - * @return the actionStatusCount - */ public Long getActionStatusCount() { return actionStatusCount; } - /** - * @return the rolloutName - */ public String getRolloutName() { return rolloutName; } 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 c63974cbb..709635095 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 @@ -64,9 +64,6 @@ public abstract class Artifact extends TenantAwareBaseEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 09cfc3953..d0289acee 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 @@ -154,7 +154,7 @@ public abstract class BaseEntity implements Serializable, Identifiable { if (obj == null) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof BaseEntity)) { return false; } final BaseEntity other = (BaseEntity) obj; 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 58303340e..6882441e8 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 @@ -135,23 +135,14 @@ public class DistributionSet extends NamedVersionedEntity { return tags; } - /** - * @return the deleted - */ public boolean isDeleted() { return deleted; } - /** - * @return the metadata - */ public List getMetadata() { return metadata; } - /** - * @return the actions - */ public List getActions() { return actions; } @@ -166,9 +157,6 @@ public class DistributionSet extends NamedVersionedEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 bdfc73f9d..137fde5b9 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 @@ -74,9 +74,6 @@ public class DistributionSetTag extends Tag { @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 56fed270f..f7dc791a4 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 @@ -295,9 +295,6 @@ public class DistributionSetType extends NamedEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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/model/DistributionSetTypeElement.java index ce8501fec..8414a6f1a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTypeElement.java @@ -71,30 +71,18 @@ public class DistributionSetTypeElement implements Serializable { this.mandatory = mandatory; } - /** - * @return the mandatory - */ public boolean isMandatory() { return mandatory; } - /** - * @return the dsType - */ public DistributionSetType getDsType() { return dsType; } - /** - * @return the smType - */ public SoftwareModuleType getSmType() { return smType; } - /** - * @return the key - */ public DistributionSetTypeElementCompositeKey getKey() { return key; } 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 f3d1f9bb9..898c685a5 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 @@ -81,18 +81,11 @@ public class ExternalArtifact extends Artifact { return softwareModule; } - /** - * @param softwareModule - * the softwareModule to set - */ public final void setSoftwareModule(final SoftwareModule softwareModule) { this.softwareModule = softwareModule; this.softwareModule.addArtifact(this); } - /** - * @return the externalArtifactProvider - */ public ExternalArtifactProvider getExternalArtifactProvider() { return externalArtifactProvider; } @@ -101,17 +94,10 @@ public class ExternalArtifact extends Artifact { return new StringBuilder().append(externalArtifactProvider.getBasePath()).append(urlSuffix).toString(); } - /** - * @return the urlSuffix - */ public String getUrlSuffix() { return urlSuffix; } - /** - * @param externalArtifactProvider - * the externalArtifactProvider to set - */ public void setExternalArtifactProvider(final ExternalArtifactProvider externalArtifactProvider) { this.externalArtifactProvider = externalArtifactProvider; } @@ -134,9 +120,6 @@ public class ExternalArtifact extends Artifact { @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 6733074c6..d52e60e46 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 @@ -83,9 +83,6 @@ public class ExternalArtifactProvider extends NamedEntity { @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 b8f5d3369..8afcdc168 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 @@ -83,9 +83,6 @@ public class LocalArtifact extends Artifact { @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 ebf3d8939..d055c113e 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 @@ -71,9 +71,6 @@ public abstract class NamedEntity extends TenantAwareBaseEntity { @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 0806f19e6..2b126c72f 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 @@ -58,9 +58,6 @@ public abstract class NamedVersionedEntity extends NamedEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 6001af86b..a596d10a9 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 @@ -242,9 +242,6 @@ public class Rollout extends NamedEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 2a57e48d3..97191b4f1 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 @@ -487,9 +487,6 @@ public class RolloutGroup extends NamedEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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/model/RolloutTargetGroupId.java index 41850424b..88226142a 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroupId.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroupId.java @@ -12,14 +12,9 @@ import java.io.Serializable; /** * Combined unique key of the table {@link RolloutTargetGroup}. - * - * @author Michael Hirsch * */ public class RolloutTargetGroupId implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private Long rolloutGroup; 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 a86c0b864..d53bd3fd5 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 @@ -208,17 +208,10 @@ public class SoftwareModule extends NamedVersionedEntity { return type; } - /** - * @return the deleted - */ public boolean isDeleted() { return deleted; } - /** - * @param deleted - * the deleted to set - */ public void setDeleted(final boolean deleted) { this.deleted = deleted; } @@ -227,9 +220,6 @@ public class SoftwareModule extends NamedVersionedEntity { this.type = type; } - /** - * @return the metadata - */ public List getMetadata() { return metadata; } @@ -250,9 +240,6 @@ public class SoftwareModule extends NamedVersionedEntity { @Override public boolean equals(final Object obj) { // NOSONAR - as this is generated - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 bf34a6f33..59246d92e 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 @@ -125,9 +125,6 @@ public class SoftwareModuleType extends NamedEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 8775ef458..8d5f5b832 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 @@ -67,9 +67,6 @@ public abstract class Tag extends NamedEntity implements Identifiable { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 4121aa4ec..f9e29118f 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 @@ -139,13 +139,10 @@ public class Target extends NamedEntity implements Persistable { */ @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()) { + if (!(obj instanceof Target)) { return false; } final Target other = (Target) obj; 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 7f01e0b59..c4e6fb1fe 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 @@ -66,9 +66,6 @@ public class TargetFilterQuery extends TenantAwareBaseEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 5b7f03713..5a5a310d0 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 @@ -74,9 +74,6 @@ public class TargetTag extends Tag { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 a75141658..ec09da3d5 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 @@ -30,32 +30,18 @@ public class TargetWithActionStatus { this.target = target; } - /** - * @return the target - */ public Target getTarget() { return target; } - /** - * @return the status - */ public Status getStatus() { return status; } - /** - * @param target - * the target to set - */ public void setTarget(final Target target) { this.target = target; } - /** - * @param status - * the status to set - */ public void setStatus(final Status status) { this.status = status; } 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 d4f03c973..e0661d079 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 @@ -101,9 +101,6 @@ public abstract class TenantAwareBaseEntity extends BaseEntity { */ @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 de5398e5b..efc82747a 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 @@ -92,9 +92,6 @@ public class TenantConfiguration extends TenantAwareBaseEntity implements Serial @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } 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 e347a855c..a9572c21c 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 @@ -88,9 +88,6 @@ public class TenantMetaData extends BaseEntity { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } From d21ed450546c46cc0a98d0742cbdb39736985fc8 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 09:08:19 +0200 Subject: [PATCH 042/344] Fixed metadata equals. Value should not be in there. --- .../hawkbit/repository/model/DistributionSet.java | 13 +------------ .../repository/model/DistributionSetMetadata.java | 8 -------- 2 files changed, 1 insertion(+), 20 deletions(-) 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 6882441e8..4f2d6196c 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 @@ -293,7 +293,7 @@ public class DistributionSet extends NamedVersionedEntity { * Searches through modules for the given type. * * @param type - * to seach for + * to search for * @return SoftwareModule of given type or null if not in the * list. */ @@ -308,26 +308,15 @@ public class DistributionSet extends NamedVersionedEntity { return null; } - /** - * @return the type - */ public DistributionSetType getType() { return type; } - /** - * @param type - * the type to set - */ public void setType(final DistributionSetType type) { this.type = type; } - /** - * @return the complete - */ public boolean isComplete() { return complete; } - } 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 4303ffd96..7b2e637b9 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 @@ -96,7 +96,6 @@ public class DistributionSetMetadata implements Serializable { int result = 1; result = prime * result + (distributionSet == null ? 0 : distributionSet.hashCode()); result = prime * result + (key == null ? 0 : key.hashCode()); - result = prime * result + (value == null ? 0 : value.hashCode()); return result; } @@ -126,13 +125,6 @@ public class DistributionSetMetadata implements Serializable { } 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; } From ca17f4543a13217c9f3ad6fe4e3c6de4ee8b0111 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 09:29:09 +0200 Subject: [PATCH 043/344] Fixed wring metadata change in RSQL test --- .../repository/DistributionSetManagement.java | 2 +- .../hawkbit/repository/model/DistributionSet.java | 10 +--------- .../hawkbit/repository/model/SoftwareModule.java | 2 +- .../rsql/RSQLDistributionSetFieldTest.java | 14 +++++++------- 4 files changed, 10 insertions(+), 18 deletions(-) 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 410021664..8bee7c703 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 @@ -762,7 +762,7 @@ public class DistributionSetManagement { if (distributionSetMetadataRepository.exists(metadata.getId())) { throwMetadataKeyAlreadyExists(metadata.getId().getKey()); } - // merge base software module so optLockRevision gets updated and audit + // 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. 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 4f2d6196c..76b1ab507 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 @@ -140,7 +140,7 @@ public class DistributionSet extends NamedVersionedEntity { } public List getMetadata() { - return metadata; + return Collections.unmodifiableList(metadata); } public List getActions() { @@ -171,10 +171,6 @@ public class DistributionSet extends NamedVersionedEntity { return requiredMigrationStep; } - /** - * @param deleted - * the deleted to set - */ public DistributionSet setDeleted(final boolean deleted) { this.deleted = deleted; return this; @@ -185,10 +181,6 @@ public class DistributionSet extends NamedVersionedEntity { return this; } - /** - * @param tags - * the tags to set - */ public DistributionSet setTags(final Set tags) { this.tags = tags; return this; 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 d53bd3fd5..d4ac6d629 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 @@ -221,7 +221,7 @@ public class SoftwareModule extends NamedVersionedEntity { } public List getMetadata() { - return metadata; + return Collections.unmodifiableList(metadata); } @Override 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 ea1db0ed8..6b1682820 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 @@ -35,18 +35,18 @@ public class RSQLDistributionSetFieldTest extends AbstractIntegrationTest { @Before public void seuptBeforeTest() { - final DistributionSet ds = TestDataUtil.generateDistributionSet("DS", softwareManagement, - distributionSetManagement); + DistributionSet ds = TestDataUtil.generateDistributionSet("DS", softwareManagement, distributionSetManagement); ds.setDescription("DS"); - ds.getMetadata().add(new DistributionSetMetadata("metaKey", ds, "metaValue")); - distributionSetManagement.updateDistributionSet(ds); + ds = distributionSetManagement.updateDistributionSet(ds); + distributionSetManagement + .createDistributionSetMetadata(new DistributionSetMetadata("metaKey", ds, "metaValue")); - final DistributionSet ds2 = TestDataUtil + DistributionSet ds2 = TestDataUtil .generateDistributionSets("NewDS", 3, softwareManagement, distributionSetManagement).get(0); ds2.setDescription("DS%"); - ds2.getMetadata().add(new DistributionSetMetadata("metaKey", ds2, "value")); - distributionSetManagement.updateDistributionSet(ds2); + ds2 = distributionSetManagement.updateDistributionSet(ds2); + distributionSetManagement.createDistributionSetMetadata(new DistributionSetMetadata("metaKey", ds2, "value")); final DistributionSetTag targetTag = tagManagement.createDistributionSetTag(new DistributionSetTag("Tag1")); tagManagement.createDistributionSetTag(new DistributionSetTag("Tag2")); From c6c50c6a682ed78e4d1d3dbcce9b2956a1f1ddd3 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 09:49:25 +0200 Subject: [PATCH 044/344] Fixed broken usage of metadata addition. Fixed equals of two elements. --- .../hawkbit/repository/model/DistributionSet.java | 3 +++ .../hawkbit/repository/model/SoftwareModule.java | 3 +++ .../repository/model/SoftwareModuleMetadata.java | 14 +++----------- .../hawkbit/repository/model/TargetInfo.java | 11 +++++++++-- .../RSQLDistributionSetMetadataFieldsTest.java | 11 +++++++---- .../rsql/RSQLSoftwareModuleFieldTest.java | 8 +------- .../rsql/RSQLSoftwareModuleMetadataFieldsTest.java | 11 +++++++---- 7 files changed, 33 insertions(+), 28 deletions(-) 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 76b1ab507..51b5e8074 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 @@ -139,6 +139,9 @@ public class DistributionSet extends NamedVersionedEntity { return deleted; } + /** + * @return immutable list of meta data elements. + */ public List getMetadata() { return Collections.unmodifiableList(metadata); } 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 d4ac6d629..8b58c5e3b 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 @@ -220,6 +220,9 @@ public class SoftwareModule extends NamedVersionedEntity { this.type = type; } + /** + * @return immutable list of meta data elements. + */ public List getMetadata() { return Collections.unmodifiableList(metadata); } 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 b314edbe6..c7af1f2ae 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 @@ -102,9 +102,8 @@ public class SoftwareModuleMetadata implements Serializable { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + (key == null ? 0 : key.hashCode()); - result = prime * result + (softwareModule == null ? 0 : softwareModule.hashCode()); - result = prime * result + (value == null ? 0 : value.hashCode()); + result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); return result; } @@ -116,7 +115,7 @@ public class SoftwareModuleMetadata implements Serializable { if (obj == null) { return false; } - if (getClass() != obj.getClass()) { + if (!(obj instanceof SoftwareModuleMetadata)) { return false; } final SoftwareModuleMetadata other = (SoftwareModuleMetadata) obj; @@ -134,13 +133,6 @@ public class SoftwareModuleMetadata implements Serializable { } else if (!softwareModule.equals(other.softwareModule)) { 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/model/TargetInfo.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetInfo.java index 2eb7cc385..47f52579a 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 @@ -320,7 +320,8 @@ public class TargetInfo implements Persistable, Serializable { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + (target == null ? 0 : target.hashCode()); + result = prime * result + ((target == null) ? 0 : target.hashCode()); + result = prime * result + ((targetId == null) ? 0 : targetId.hashCode()); return result; } @@ -343,7 +344,13 @@ public class TargetInfo implements Persistable, Serializable { } 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/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/rsql/RSQLDistributionSetMetadataFieldsTest.java index 1d1e8b7f3..755e5a61f 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 @@ -10,6 +10,9 @@ package org.eclipse.hawkbit.repository.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; @@ -35,13 +38,13 @@ public class RSQLDistributionSetMetadataFieldsTest extends AbstractIntegrationTe final DistributionSet distributionSet = TestDataUtil.generateDistributionSet("DS", softwareManagement, distributionSetManagement); distributionSetId = distributionSet.getId(); + + final List metadata = new ArrayList<>(); for (int i = 0; i < 5; i++) { - final DistributionSetMetadata distributionSetMetadata = new DistributionSetMetadata("" + i, distributionSet, - "" + i); - distributionSet.getMetadata().add(distributionSetMetadata); + metadata.add(new DistributionSetMetadata("" + i, distributionSet, "" + i)); } - distributionSetManagement.updateDistributionSet(distributionSet); + distributionSetManagement.createDistributionSetMetadata(metadata); } @Test 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 88f0817f7..0c113fd2b 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 @@ -28,8 +28,7 @@ import ru.yandex.qatools.allure.annotations.Stories; public class RSQLSoftwareModuleFieldTest extends AbstractIntegrationTest { @Before - public void seuptBeforeTest() { - + 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", "")); @@ -40,14 +39,9 @@ public class RSQLSoftwareModuleFieldTest extends AbstractIntegrationTest { final SoftwareModuleMetadata softwareModuleMetadata = new SoftwareModuleMetadata("metaKey", ah, "metaValue"); softwareManagement.createSoftwareModuleMetadata(softwareModuleMetadata); - ah.getMetadata().add(softwareModuleMetadata); - softwareManagement.updateSoftwareModule(ah); final SoftwareModuleMetadata softwareModuleMetadata2 = new SoftwareModuleMetadata("metaKey", ah2, "value"); softwareManagement.createSoftwareModuleMetadata(softwareModuleMetadata2); - ah2.getMetadata().add(softwareModuleMetadata2); - softwareManagement.updateSoftwareModule(ah2); - } @Test 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 c863c1460..44fa3e3cd 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 @@ -10,6 +10,9 @@ package org.eclipse.hawkbit.repository.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; @@ -37,13 +40,13 @@ public class RSQLSoftwareModuleMetadataFieldsTest extends AbstractIntegrationTes "application", "1.0.0", "Desc", "vendor Limited, California")); softwareModuleId = softwareModule.getId(); + final List metadata = new ArrayList<>(); for (int i = 0; i < 5; i++) { - final SoftwareModuleMetadata metadata = new SoftwareModuleMetadata("" + i, softwareModule, "" + i); - softwareModule.getMetadata().add(metadata); - softwareModuleMetadataRepository.save(metadata); + metadata.add(new SoftwareModuleMetadata("" + i, softwareModule, "" + i)); } - softwareManagement.updateSoftwareModule(softwareModule); + softwareManagement.createSoftwareModuleMetadata(metadata); + } @Test From 26466c7d6a240b5a740f1731869325c954854fbc Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 30 Mar 2016 13:05:11 +0200 Subject: [PATCH 045/344] Before sending a message check if the uri is a amqp uri. Signed-off-by: SirWayne --- .../java/org/eclipse/hawkbit/amqp/AmqpSenderService.java | 4 ++-- .../eclipse/hawkbit/amqp/DefaultAmqpSenderService.java | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java index 6cb3dd9be..f44e2e9bb 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java @@ -24,10 +24,10 @@ public interface AmqpSenderService { * * @param message * the amqp message - * @param uri + * @param replyTo * the reply to uri */ - void sendMessage(Message message, URI uri); + void sendMessage(Message message, URI replyTo); /** * Extract the exchange from the uri. Default implementation removes the 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 9586633bf..244544b64 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 @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.amqp; import java.net.URI; +import org.eclipse.hawkbit.util.IpUtil; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -33,8 +34,12 @@ public class DefaultAmqpSenderService implements AmqpSenderService { } @Override - public void sendMessage(final Message message, final URI uri) { - internalAmqpTemplate.send(extractExchange(uri), null, message); + public void sendMessage(final Message message, final URI replyTo) { + if (!IpUtil.isAmqpUri(replyTo)) { + return; + } + + internalAmqpTemplate.send(extractExchange(replyTo), null, message); } } From 2b4b715472f7c5961e557541a93a0c9e06982339 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 14:31:03 +0200 Subject: [PATCH 046/344] Created another hawkBit app example that demonstrates theme custimization. Signed-off-by: Kai Zimmermann --- .../hawkbit-custom-theme-example/README.md | 1 + examples/hawkbit-custom-theme-example/pom.xml | 112 ++++++++++++++++++ .../org/eclipse/hawkbit/app/MyLoginUI.java | 34 ++++++ .../java/org/eclipse/hawkbit/app/MyUI.java | 45 +++++++ .../java/org/eclipse/hawkbit/app/Start.java | 36 ++++++ .../VAADIN/themes/exampletheme/.gitignore | 2 + .../customstyles/examplevariables.scss | 24 ++++ .../exampletheme/images/profile-pic-57px.jpg | Bin 0 -> 1189 bytes .../themes/exampletheme/layouts/footer.html | 29 +++++ .../VAADIN/themes/exampletheme/styles.scss | 10 ++ .../src/main/resources/application.properties | 16 +++ hawkbit-repository/pom.xml | 4 + hawkbit-rest-api/pom.xml | 1 - .../hawkbit/images/profile-pic-300px.jpg | Bin 1793 -> 0 bytes pom.xml | 6 + 15 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 examples/hawkbit-custom-theme-example/README.md create mode 100644 examples/hawkbit-custom-theme-example/pom.xml create mode 100644 examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java create mode 100644 examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyUI.java create mode 100644 examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java create mode 100644 examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/.gitignore create mode 100644 examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/customstyles/examplevariables.scss create mode 100644 examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/images/profile-pic-57px.jpg create mode 100644 examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/layouts/footer.html create mode 100644 examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss create mode 100644 examples/hawkbit-custom-theme-example/src/main/resources/application.properties delete mode 100644 hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-300px.jpg diff --git a/examples/hawkbit-custom-theme-example/README.md b/examples/hawkbit-custom-theme-example/README.md new file mode 100644 index 000000000..5a6a571c8 --- /dev/null +++ b/examples/hawkbit-custom-theme-example/README.md @@ -0,0 +1 @@ +Theme customization example for Eclipse hawkBit. See wiki for the theme customization guide. \ No newline at end of file diff --git a/examples/hawkbit-custom-theme-example/pom.xml b/examples/hawkbit-custom-theme-example/pom.xml new file mode 100644 index 000000000..7caa99ba2 --- /dev/null +++ b/examples/hawkbit-custom-theme-example/pom.xml @@ -0,0 +1,112 @@ + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-examples-parent + 0.2.0-SNAPSHOT + + hawkbit-custom-theme-example + hawkBit :: Custom Theme Example App + + + + + com.vaadin + vaadin-maven-plugin + ${vaadin.plugin.version} + + src/main/resources + + + + + update-theme + compile-theme + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + ${baseDir} + false + org.eclipse.hawkbit.app.Start + JAR + + + + + + + + + + + org.eclipse.hawkbit + hawkbit-autoconfigure + ${project.version} + + + org.eclipse.hawkbit + hawkbit-ui + ${project.version} + + + org.eclipse.hawkbit + hawkbit-security-integration + ${project.version} + + + org.eclipse.hawkbit + hawkbit-http-security + ${project.version} + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + org.springframework.security + spring-security-aspects + + + com.h2database + h2 + + + + diff --git a/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java new file mode 100644 index 000000000..c31086a70 --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.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.app; + +import org.eclipse.hawkbit.ui.login.HawkbitLoginUI; +import org.eclipse.hawkbit.ui.themes.HawkbitTheme; + +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.Title; +import com.vaadin.spring.annotation.SpringUI; + +/** + * Example hawkBit login UI implementation. + * + * A {@link SpringUI} annotated class must be present in the classpath for the + * login path. The easiest way to get an hawkBit login UI running is to extend + * the {@link HawkbitLoginUI} and to annotated it with {@link SpringUI} as in + * this example to the defined {@link HawkbitTheme#LOGIN_UI_PATH}. + * + */ +@SpringUI(path = HawkbitTheme.LOGIN_UI_PATH) +@Title("hawkBit Theme example") +@Theme(value = "exampletheme") +public class MyLoginUI extends HawkbitLoginUI { + + private static final long serialVersionUID = 1L; + +} diff --git a/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyUI.java b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyUI.java new file mode 100644 index 000000000..5ef632d10 --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/MyUI.java @@ -0,0 +1,45 @@ +package org.eclipse.hawkbit.app; +/** + * 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 + */ + +import org.eclipse.hawkbit.ui.HawkbitUI; +import org.eclipse.hawkbit.ui.UIEventProvider; +import org.eclipse.hawkbit.ui.push.DelayedEventBusPushStrategy; +import org.springframework.beans.factory.annotation.Autowired; + +import com.google.common.eventbus.EventBus; +import com.vaadin.annotations.Push; +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.Title; +import com.vaadin.shared.communication.PushMode; +import com.vaadin.shared.ui.ui.Transport; +import com.vaadin.spring.annotation.SpringUI; + +/** + * Example hawkBit UI implementation. + * + * A {@link SpringUI} annotated class must be present in the classpath. The + * easiest way to get an hawkBit UI running is to extend the {@link HawkbitUI} + * and to annotated it with {@link SpringUI} as in this example. + * + */ +@SpringUI +@Push(value = PushMode.AUTOMATIC, transport = Transport.WEBSOCKET) +@Title("hawkBit Theme example") +@Theme(value = "exampletheme") +public class MyUI extends HawkbitUI { + + private static final long serialVersionUID = 1L; + + @Autowired + public MyUI(final EventBus systemEventBus, final org.vaadin.spring.events.EventBus.SessionEventBus eventBus, + final UIEventProvider provider) { + super(new DelayedEventBusPushStrategy(eventBus, systemEventBus, provider)); + } +} 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 new file mode 100644 index 000000000..1c4c5d32d --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/java/org/eclipse/hawkbit/app/Start.java @@ -0,0 +1,36 @@ +package org.eclipse.hawkbit.app; +/** + * 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 + */ + +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. + * The minimal configuration for the stand alone hawkBit server. + * + */ +@SpringBootApplication +@Import({ RepositoryApplicationConfiguration.class }) +@EnableHawkbitManagedSecurityConfiguration +public class Start { + + /** + * Main method to start the spring-boot application. + * + * @param args + * the VM arguments. + */ + public static void main(final String[] args) { + SpringApplication.run(Start.class, args); + } +} diff --git a/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/.gitignore b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/.gitignore new file mode 100644 index 000000000..1cdd02b74 --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/.gitignore @@ -0,0 +1,2 @@ +/addons.scss +/styles.css diff --git a/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/customstyles/examplevariables.scss b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/customstyles/examplevariables.scss new file mode 100644 index 000000000..6bf201f9c --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/customstyles/examplevariables.scss @@ -0,0 +1,24 @@ +/** + * 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 + */ + +$dark-gray: #848484; + +//Example color change +$hawkbit-primary-color: $dark-gray; +$hawkbit-primary-color-light: #D8D8D8; +$app-selection-item-selection-color: $dark-gray; +$app-focus-color: $dark-gray; +$app-selection-color: $dark-gray; +$tag-text-color: $dark-gray; +$tab-sheet-caption-color: $dark-gray; +$table-details-tab-font-color: $dark-gray; +$widget-caption-color: $dark-gray; +$accordion-action-history-title-color: $dark-gray; +$menu-title-bg-color: $dark-gray; +$button-icon-color: $dark-gray; \ No newline at end of file diff --git a/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/images/profile-pic-57px.jpg b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/images/profile-pic-57px.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d730cb5f67e12741e3e50df31315a81d0e1ceab6 GIT binary patch literal 1189 zcmex=3RdL56^| zgLDBA4+lF3NCj!&{{aR;4hBmGOJ+tT1|~s9W31L-*^|&n?(5RLW_pFY_v2QRTR`%g#5e%KD%Fx+cp| z%lOc~qbj~fDSorx%7U9`_q6CNmaRB%9~eFL^ZCZK>Uyb6U&+I@t4tqX*uefpZC~30 zrY;RI=AZXZ!Ed{q`PIna(@Za~%RP87|H$Vb*KEuFGsxJe$~CV)UMtf&JtV!%X@6nc zozL&*To-f@|D(U6SN+H|bD!PUI4_?1)!1Ph} z=vFUf5D9c;5D6E4biVgjU9-)!ZyQh67D{S)&E2?~@8G`VU(}!zx_ + + + + diff --git a/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss new file mode 100644 index 000000000..2407a73fb --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss @@ -0,0 +1,10 @@ +@import "../hawkbit/customstyles/hawkbitvariables"; +@import "customstyles/examplevariables"; +@import "../hawkbit/hawkbittheme"; +@import "addons"; + +// This file prefixes all rules with the theme name to avoid causing conflicts with other themes. +.exampletheme { + @include addons; + @include hawkbittheme; +} diff --git a/examples/hawkbit-custom-theme-example/src/main/resources/application.properties b/examples/hawkbit-custom-theme-example/src/main/resources/application.properties new file mode 100644 index 000000000..3ffb51bd0 --- /dev/null +++ b/examples/hawkbit-custom-theme-example/src/main/resources/application.properties @@ -0,0 +1,16 @@ +# +# 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 +# + +# UI demo account +hawkbit.server.ui.demo.password=admin +hawkbit.server.ui.demo.user=admin +hawkbit.server.ui.demo.tenant=DEFAULT + +# UI help links +hawkbit.server.ui.links.documentation.root=https://github.com/eclipse/hawkbit diff --git a/hawkbit-repository/pom.xml b/hawkbit-repository/pom.xml index 7259262de..b70e00f28 100644 --- a/hawkbit-repository/pom.xml +++ b/hawkbit-repository/pom.xml @@ -67,6 +67,10 @@ org.hibernate hibernate-validator + + javax.validation + validation-api + com.google.guava guava diff --git a/hawkbit-rest-api/pom.xml b/hawkbit-rest-api/pom.xml index be9abafac..703d6caf3 100644 --- a/hawkbit-rest-api/pom.xml +++ b/hawkbit-rest-api/pom.xml @@ -24,7 +24,6 @@ javax.validation validation-api - 1.1.0.Final org.springframework.hateoas diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-300px.jpg b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/images/profile-pic-300px.jpg deleted file mode 100644 index 664afaa35aa45a62b717447b59410f333706503d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1793 zcmb_ddoRSq&;=X}yY29#D&UApL?S_nKu{*Bl9fpm5`jQg zBU7j}I-O2bQP)tTX{gfZv=t`^8m_@$@mMULrc6+#{cDo9016H`PGgP`&9VSrnme!u^t4FHmnho3*xDW<_BE>lnq#Wi9anc%dL0sz`j z2sAI20ze-f2SyS$02@tRKwcjdI>wq%i5v(qNCWuy>j5AR1F+fS$tpxDgOGBUB-E4u zLd=o?=~^6wq>6#27;drcMl}d^Z2};FfQ{6^)cW+WKX^m@x|;~BkqWqoF#*C@&>gYT z5UH9^0$}^w8<@&s06-M~V!ml5G@-7t=T!{Vm-FEo#mNv-3Y3 zUGR6=AU0rG#<3*A#D08*P1n>dc)6gxF=RU1?M3R_ zC=Rn>bN{hg->hbGXU?G-d_@53iB}_|I6Lj7ov0?NL1OASrD-Lu-C#$o9mDavN`qo{ zA88iuo1W_0Z|;WANWAy5*sMzEppjAE8`c$u86Iubx~=6gx;XpW`QpZzicso3kF8E} zkb|3P8(3s5T|dICV>yNUzHxYFnzDADVKH3$l=H@^t=cm97SF~z+%L=LIe*$~jy5DC z2)LQDpK?VD_UDV9F@tQ3wNrmcotT|}_#-|2&SqJP$-B#i6AQ`oy#Z8Nnoev><&ZG2 zEB#gI_5Pw@R#97lvwEFX_sMG67ZOL^(ZGh-h_q_Y*li*$lBoBfkAfZEtNlWu?;k`K zI4ql|?=gruQl?^K+|8>^KW!#5mfbH*?3fe4z0T+pbL!*idsQ=MoDB4OU&QVcYgzcm zqZJ#brgPn=QxBwsL~j%fi|VjtCF~w0;tqG+Af}J*ffxV_;Mg<#JB7sEHbF zFo!%SVY(KQ10Fm@seP-ID{#&!?6h_8*-?Bq#(3~GpPG7gGLY+DR}om=IAC6MGQrFG zaqAe4$H+RNsd;I4937_}mKD__$dDG8pHuZqQLnHwDCLIES?QGT8uxOuHPzd4M)gag zbDu(qk#2FnJ)``RQa}VV=FO=tu{7-dfNSiyciEk|sO7e>zC{kH=H}g+t0}Wm+qHO= zGkR0XUhRGk+@?^;#POzMh0@N3kiH0_z4IClS1_)#yonUww$| z#M)e;@>qN3T}uLwM>DAbghv%7>HP5C&MR4JC)9gWj|KbXzVy=X)R%*!kBh9L?Uo(} z)P5b+{LR4xp{%7-A<{>5d6{ + 1.1.0.Final 1.4 2.0M10 1.4.22 @@ -419,6 +420,11 @@ + + javax.validation + validation-api + ${validation-api.version} + javax.el javax.el-api From 5ec84288af6f54556f8b7bd89575fc0873a85892 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 14:35:14 +0200 Subject: [PATCH 047/344] Added new example to overview README. Signed-off-by: Kai Zimmermann --- examples/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/README.md b/examples/README.md index 3ad5ecf66..0d6e0c18a 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,7 +1,9 @@ # Examples -Example projects that show how hawkBit can be used to create, run or access an hawkBit empowered update server. +Example projects that show how _hawkBit_ can be used to create, run or access an _hawkBit_ empowered update server. + +- `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-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. -`hawkbit-mgmt-api-client` : Example client for the hawkBit management API. From d0dff39932072e7bd275a0f7d4f6aca910b620d4 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 15:14:20 +0200 Subject: [PATCH 048/344] Added license header. Signed-off-by: Kai Zimmermann --- .../resources/VAADIN/themes/exampletheme/styles.scss | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss index 2407a73fb..4b3f29814 100644 --- a/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss +++ b/examples/hawkbit-custom-theme-example/src/main/resources/VAADIN/themes/exampletheme/styles.scss @@ -1,3 +1,12 @@ +/** + * 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 + */ + @import "../hawkbit/customstyles/hawkbitvariables"; @import "customstyles/examplevariables"; @import "../hawkbit/hawkbittheme"; From 413bb9d814961d1db2d9abe6deb68e2b8b298bda Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 30 Mar 2016 17:10:47 +0200 Subject: [PATCH 049/344] Reduced log severity of invalid incoming messages to warning. Signed-off-by: Kai Zimmermann --- .../src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8a054165b..4662c8d39 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 @@ -105,7 +105,7 @@ public class BaseAmqpService { } protected final void logAndThrowMessageError(final Message message, final String error) { - LOGGER.error("Error \"{}\" reported by message {}", error, message.getMessageProperties().getMessageId()); + LOGGER.warn("Error \"{}\" reported by message {}", error, message.getMessageProperties().getMessageId()); throw new IllegalArgumentException(error); } From 52cc957cfb7cbef93b04d9e4fd48e66fe0a76f37 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 09:31:47 +0200 Subject: [PATCH 050/344] Consolidated equals and hashcode for all BaseEntities. --- .../hawkbit/repository/model/Action.java | 30 +----- .../repository/model/ActionStatus.java | 20 ---- .../hawkbit/repository/model/Artifact.java | 20 ---- .../hawkbit/repository/model/BaseEntity.java | 8 +- .../repository/model/DistributionSet.java | 20 ---- .../repository/model/DistributionSetType.java | 20 ---- .../model/ExternalArtifactProvider.java | 20 ---- .../hawkbit/repository/model/NamedEntity.java | 20 ---- .../model/NamedVersionedEntity.java | 21 ----- .../hawkbit/repository/model/Rollout.java | 20 ---- .../repository/model/RolloutGroup.java | 21 ----- .../repository/model/SoftwareModule.java | 20 ---- .../repository/model/SoftwareModuleType.java | 20 ---- .../eclipse/hawkbit/repository/model/Tag.java | 20 ---- .../hawkbit/repository/model/Target.java | 33 ------- .../repository/model/TargetFilterQuery.java | 20 ---- .../model/TenantAwareBaseEntity.java | 3 - .../repository/model/TenantConfiguration.java | 34 ------- .../repository/DeploymentManagementTest.java | 11 ++- .../TargetManagementSearchTest.java | 36 ++++++-- .../model/ModelEqualsHashcodeTest.java | 92 +++++++++++++++++++ 21 files changed, 137 insertions(+), 372 deletions(-) create mode 100644 hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java 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 afc6998ad..eedb36037 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 @@ -52,7 +52,7 @@ 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 Action extends TenantAwareBaseEntity implements Comparable { +public class Action extends TenantAwareBaseEntity { private static final long serialVersionUID = 1L; /** @@ -198,14 +198,6 @@ public class Action extends TenantAwareBaseEntity implements Comparable this.rollout = rollout; } - @Override - public int compareTo(final Action o) { - if (super.getId() == null || o == null || o.getId() == null) { - return 0; - } - return super.getId().compareTo(o.getId()); - } - /** * checks if the {@link #forcedTime} is hit by the given * {@code hitTimeMillis}, by means if the given milliseconds are greater @@ -254,26 +246,6 @@ public class Action extends TenantAwareBaseEntity implements Comparable return "Action [distributionSet=" + distributionSet + ", getId()=" + getId() + "]"; } - @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 Action)) { - return false; - } - - return true; - } - /** * Action status as reported by the controller. * 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 f67229b69..c8d320abd 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 @@ -140,24 +140,4 @@ public class ActionStatus extends TenantAwareBaseEntity { this.status = status; } - @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 ActionStatus)) { - return false; - } - - return true; - } - } 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 709635095..b384a3100 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 @@ -53,24 +53,4 @@ public abstract class Artifact extends TenantAwareBaseEntity { public void setSize(final Long size) { this.size = size; } - - @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 Artifact)) { - return false; - } - - return true; - } } 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 d0289acee..65300c6c4 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 @@ -108,6 +108,11 @@ public abstract class BaseEntity implements Serializable, Identifiable { return optLockRevision; } + // for test purposes only + void setOptLockRevision(final long optLockRevision) { + this.optLockRevision = optLockRevision; + } + @Override public Long getId() { return id; @@ -135,6 +140,7 @@ public abstract class BaseEntity implements Serializable, Identifiable { 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; } @@ -154,7 +160,7 @@ public abstract class BaseEntity implements Serializable, Identifiable { if (obj == null) { return false; } - if (!(obj instanceof BaseEntity)) { + if (!(this.getClass().isInstance(obj))) { return false; } final BaseEntity other = (BaseEntity) obj; 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 51b5e8074..a9d390284 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 @@ -150,26 +150,6 @@ public class DistributionSet extends NamedVersionedEntity { return actions; } - @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 DistributionSet)) { - return false; - } - - return true; - } - public boolean isRequiredMigrationStep() { return requiredMigrationStep; } 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 f7dc791a4..61d2fc58c 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 @@ -285,24 +285,4 @@ public class DistributionSetType extends NamedEntity { return "DistributionSetType [key=" + key + ", isDeleted()=" + isDeleted() + ", getId()=" + getId() + "]"; } - @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 DistributionSetType)) { - return false; - } - - return true; - } - } 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 d52e60e46..9fa8714ac 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 @@ -73,24 +73,4 @@ public class ExternalArtifactProvider extends NamedEntity { this.defaultSuffix = defaultSuffix; } - @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 ExternalArtifactProvider)) { - return false; - } - - return true; - } - } 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 d055c113e..e14d88161 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 @@ -60,24 +60,4 @@ public abstract class NamedEntity extends TenantAwareBaseEntity { public void setName(final String name) { this.name = name; } - - @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 NamedEntity)) { - return false; - } - - return true; - } } 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 2b126c72f..fa56da197 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 @@ -47,25 +47,4 @@ public abstract class NamedVersionedEntity extends NamedEntity { public void setVersion(final String version) { this.version = version; } - - @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 NamedVersionedEntity)) { - return false; - } - - return true; - } - } 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 a596d10a9..a7f9b10cb 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 @@ -231,24 +231,4 @@ public class Rollout extends NamedEntity { */ ERROR_STARTING; } - - @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 Rollout)) { - return false; - } - - return true; - } } 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 97191b4f1..5aa30126c 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 @@ -476,25 +476,4 @@ public class RolloutGroup extends NamedEntity { return this; } } - - @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 RolloutGroup)) { - return false; - } - - return true; - } - } 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 8b58c5e3b..327bff3db 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 @@ -233,26 +233,6 @@ public class SoftwareModule extends NamedVersionedEntity { + ", revision=" + getOptLockRevision() + ", Id=" + getId() + ", type=" + getType().getName() + "]"; } - @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 SoftwareModule)) { - return false; - } - - return true; - } - /** * @return the assignedTo */ 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 59246d92e..f31b74ff6 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 @@ -114,24 +114,4 @@ public class SoftwareModuleType extends NamedEntity { public String toString() { return "SoftwareModuleType [key=" + key + ", getName()=" + getName() + ", getId()=" + getId() + "]"; } - - @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 SoftwareModuleType)) { - return false; - } - - return true; - } } 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 8d5f5b832..23489ea12 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 @@ -56,24 +56,4 @@ public abstract class Tag extends NamedEntity implements Identifiable { public String toString() { return "Tag [getOptLockRevision()=" + getOptLockRevision() + ", getId()=" + getId() + "]"; } - - @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 Tag)) { - return false; - } - - return true; - } } 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 f9e29118f..5f37fb653 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 @@ -131,31 +131,6 @@ public class Target extends NamedEntity implements Persistable { securityToken = null; } - /** - * Note: For Target we extended the general strategy by adding controllerId - * as well. - * - * @see org.eclipse.hawkbit.repository.model.BaseEntity#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) {// NOSONAR - as this is generated - if (obj == null) { - return false; - } - if (!(obj instanceof Target)) { - return false; - } - final Target other = (Target) obj; - if (controllerId == null) { - if (other.controllerId != null) { - return false; - } - } else if (!controllerId.equals(other.controllerId)) { - return false; - } - return true; - } - public DistributionSet getAssignedDistributionSet() { return assignedDistributionSet; } @@ -168,14 +143,6 @@ public class Target extends NamedEntity implements Persistable { return tags; } - @Override - public int hashCode() { // NOSONAR - as this is generated - final int prime = 31; - int result = 1; - result = prime * result + (controllerId == null ? 0 : controllerId.hashCode()); - return result; - } - public void setAssignedDistributionSet(final DistributionSet assignedDistributionSet) { this.assignedDistributionSet = assignedDistributionSet; } 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 c4e6fb1fe..021b9ca7f 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 @@ -55,24 +55,4 @@ public class TargetFilterQuery extends TenantAwareBaseEntity { public void setQuery(final String query) { this.query = query; } - - @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 TargetFilterQuery)) { - return false; - } - - return true; - } } 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 97d757fb5..d03a4938a 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 @@ -99,9 +99,6 @@ public abstract class TenantAwareBaseEntity extends BaseEntity { if (!super.equals(obj)) { return false; } - if (!(obj instanceof TenantAwareBaseEntity)) { - return false; - } final TenantAwareBaseEntity other = (TenantAwareBaseEntity) obj; if (tenant == null) { if (other.tenant != null) { 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 efc82747a..5a938563b 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 @@ -52,54 +52,20 @@ public class TenantConfiguration extends TenantAwareBaseEntity implements Serial } - /** - * @return the key - */ public String getKey() { return key; } - /** - * @param key - * the key to set - */ public void setKey(final String key) { this.key = key; } - /** - * @return the value - */ public String getValue() { return value; } - /** - * @param value - * the value to set - */ public void setValue(final String value) { this.value = value; } - @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 TenantConfiguration)) { - return false; - } - - return true; - } - } 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 dd674d3a3..035866ab9 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 @@ -18,6 +18,7 @@ import java.util.LinkedList; import java.util.List; 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; @@ -386,7 +387,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { .createTargets(TestDataUtil.buildTargetFixtures(10, myCtrlIDPref, "first description")); final String myDeployedCtrlIDPref = "myDeployedCtrlID"; - final List savedDeployedTargets = targetManagement + List savedDeployedTargets = targetManagement .createTargets(TestDataUtil.buildTargetFixtures(20, myDeployedCtrlIDPref, "first description")); final DistributionSet ds = TestDataUtil.generateDistributionSet("", softwareManagement, @@ -399,6 +400,10 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final Iterable allFoundTargets = targetManagement.findTargetsAll(pageReq).getContent(); + // get final updated version of targets + savedDeployedTargets = targetManagement.findTargetByControllerID( + savedDeployedTargets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); + assertThat(allFoundTargets).as("founded targets are wrong").containsAll(savedDeployedTargets) .containsAll(savedNakedTargets); assertThat(savedDeployedTargets).as("saved target are wrong") @@ -602,6 +607,10 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { .assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets()).getAssignedTargets(); actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(1); + // get final updated version of targets + final List deployResWithDsBTargets = targetManagement.findTargetByControllerID(deployResWithDsB + .getDeployedTargets().stream().map(target -> target.getControllerId()).collect(Collectors.toList())); + assertThat(deployed2DS).as("deployed ds is wrong").containsAll(deployResWithDsB.getDeployedTargets()); assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsB.getDeployedTargets()); 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 0438ac512..0c33a651f 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 @@ -109,6 +109,14 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { both.add(TargetUpdateStatus.UNKNOWN); both.add(TargetUpdateStatus.PENDING); + // get final updated version of targets + targAs = targetManagement.findTargetByControllerID( + targAs.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); + targBs = targetManagement.findTargetByControllerID( + targBs.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); + targCs = targetManagement.findTargetByControllerID( + targCs.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); + // try to find several targets with different filter settings verifyThatRepositoryContains400Targets(); verifyThat200TargetsHaveTagD(targTagW, concat(targBs, targCs)); @@ -708,11 +716,14 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final DistributionSet assignedSet = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - final List assignedtargets = targetManagement - .createTargets(TestDataUtil.generateTargets(10, "assigned")); + List assignedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); deploymentManagement.assignDistributionSet(assignedSet, assignedtargets); + // get final updated version of targets + assignedtargets = targetManagement.findTargetByControllerID( + assignedtargets.stream().map(target -> target.getControllerId()).collect(Collectors.toList())); + assertThat(targetManagement.findTargetByAssignedDistributionSet(assignedSet.getId(), pageReq)) .as("Contains the assigned targets").containsAll(assignedtargets) .as("and that means the following expected amount").hasSize(10); @@ -727,8 +738,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, distributionSetManagement); targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - final List assignedtargets = targetManagement - .createTargets(TestDataUtil.generateTargets(10, "assigned")); + List assignedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); // set on installed and assign another one deploymentManagement.assignDistributionSet(installedSet, assignedtargets).getActions().forEach(actionId -> { @@ -739,11 +749,13 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { }); 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 @@ -754,8 +766,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, distributionSetManagement); targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - final List installedtargets = targetManagement - .createTargets(TestDataUtil.generateTargets(10, "assigned")); + List installedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); // set on installed and assign another one deploymentManagement.assignDistributionSet(installedSet, installedtargets).getActions().forEach(actionId -> { @@ -766,6 +777,10 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { }); 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(), pageReq)) .as("Contains the assigned targets").containsAll(installedtargets) .as("and that means the following expected amount").hasSize(10); @@ -780,8 +795,7 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final DistributionSet installedSet = TestDataUtil.generateDistributionSet("another", softwareManagement, distributionSetManagement); targetManagement.createTargets(TestDataUtil.generateTargets(10, "unassigned")); - final List installedtargets = targetManagement - .createTargets(TestDataUtil.generateTargets(10, "assigned")); + List installedtargets = targetManagement.createTargets(TestDataUtil.generateTargets(10, "assigned")); // set on installed and assign another one deploymentManagement.assignDistributionSet(installedSet, installedtargets).getActions().forEach(actionId -> { @@ -792,6 +806,10 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { }); 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) 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 new file mode 100644 index 000000000..d9de859cd --- /dev/null +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/repository/model/ModelEqualsHashcodeTest.java @@ -0,0 +1,92 @@ +package org.eclipse.hawkbit.repository.model; + +import static org.fest.assertions.api.Assertions.assertThat; + +import org.eclipse.hawkbit.AbstractIntegrationTest; +import org.junit.Test; + +import ru.yandex.qatools.allure.annotations.Description; +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Stories; + +@Features("Unit Tests - Repository") +@Stories("Repository Model") +public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { + + @Test + @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()) + .as("Distribution set should have different hashcode than software module") + .isNotEqualTo(new SoftwareModule().hashCode()); + assertThat(new DistributionSet().hashCode()) + .as("Distribution set should have different hashcode than action status") + .isNotEqualTo(new ActionStatus().hashCode()); + assertThat(new DistributionSetType().hashCode()) + .as("Distribution set type should have different hashcode than action status") + .isNotEqualTo(new ActionStatus().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") + .isFalse(); + assertThat(new DistributionSet().equals(new ActionStatus())).as("Distribution set equals action status") + .isFalse(); + assertThat(new DistributionSetType().equals(new ActionStatus())) + .as("Distribution set type equals action status").isFalse(); + } + + @Test + @Description("Verfies that updated entities are not equal.") + public void changedEntitiesAreNotEqual() { + final SoftwareModuleType type = softwareManagement + .createSoftwareModuleType(new SoftwareModuleType("test", "test", "test", 1)); + assertThat(type).isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1)); + + type.setDescription("another"); + final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(type); + assertThat(type).as("Changed entity is not equal to the previous version").isNotEqualTo(updated); + } + + @Test + @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)); + + final SoftwareModuleType mock = new SoftwareModuleType("test", "test", "test", 1); + mock.setId(type.getId()); + mock.setOptLockRevision(type.getOptLockRevision()); + mock.setTenant(type.getTenant()); + + assertThat(type).as("managed entity is equal to regular object with same content").isEqualTo(mock); + assertThat(type.hashCode()).as("managed entity has same hash code as regular object with same content") + .isEqualTo(mock.hashCode()); + } + + @Test + @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)); + assertThat(type.hashCode()).isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1).hashCode()); + + final int beforeChange = type.hashCode(); + type.setDescription("another"); + assertThat(type.hashCode()) + .as("Changed entity has no different hashcode than the previous version until updated in repository") + .isEqualTo(beforeChange); + + final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(type); + assertThat(type.hashCode()).as("Updated entity has different hashcode than the previous version") + .isNotEqualTo(updated.hashCode()); + } + +} From 5cf2ae511eb48b18d7d3efc824421bbed0f280fd Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 11:08:01 +0200 Subject: [PATCH 051/344] Fixed broken test. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/repository/DeploymentManagementTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 035866ab9..83db4ed96 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 @@ -611,8 +611,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final List deployResWithDsBTargets = targetManagement.findTargetByControllerID(deployResWithDsB .getDeployedTargets().stream().map(target -> target.getControllerId()).collect(Collectors.toList())); - assertThat(deployed2DS).as("deployed ds is wrong").containsAll(deployResWithDsB.getDeployedTargets()); - assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsB.getDeployedTargets()); + assertThat(deployed2DS).as("deployed ds is wrong").containsAll(deployResWithDsBTargets); + assertThat(deployed2DS).as("deployed ds is wrong").hasSameSizeAs(deployResWithDsBTargets); for (final Target t_ : deployed2DS) { final Target t = targetManagement.findTargetByControllerID(t_.getControllerId()); From 3d9b1465a2bc283247ee5abe95e711a5c7c3845a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 11:31:01 +0200 Subject: [PATCH 052/344] Added missing license header. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/model/ModelEqualsHashcodeTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 d9de859cd..e42ff4b9c 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 @@ -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.model; import static org.fest.assertions.api.Assertions.assertThat; From 95259f32462b8a9f0f2f8299c768e2d5b35b5e28 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 12:24:48 +0200 Subject: [PATCH 053/344] Fixed mixed polling time configuration. Signed-off-by: Kai Zimmermann --- .../hawkbit/tenancy/configuration/TenantConfigurationKey.java | 4 ++-- .../java/org/eclipse/hawkbit/controller/RootController.java | 4 ---- 2 files changed, 2 insertions(+), 6 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 c83f24dc2..36288104f 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 @@ -58,12 +58,12 @@ public enum TenantConfigurationKey { /** * string value which holds the polling time interval in the format HH:mm:ss */ - POLLING_TIME_INTERVAL("pollingOverdueTime", "hawkbit.controller.pollingOverdueTime", String.class, null, TenantConfigurationPollingDurationValidator.class), + POLLING_TIME_INTERVAL("pollingOverdueTime", "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("pollingTime", "hawkbit.controller.pollingTime", String.class, null, TenantConfigurationPollingDurationValidator.class); + POLLING_OVERDUE_TIME_INTERVAL("pollingTime", "hawkbit.controller.pollingOverdueTime", String.class, null, TenantConfigurationPollingDurationValidator.class); private final String keyName; private final String defaultKeyName; 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 ff1e26f8b..171e02d16 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 @@ -64,10 +64,6 @@ import org.springframework.web.bind.annotation.RestController; * * Transactional (read-write) as all queries at least update the last poll time. * - * - * - * - * */ @RestController @RequestMapping(ControllerConstants.BASE_V1_REQUEST_MAPPING) From 174be0b7c7c1aaebe2583ec4213d6739c8f54f6b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 12:45:32 +0200 Subject: [PATCH 054/344] Missed one issue. Signed-off-by: Kai Zimmermann --- .../hawkbit/tenancy/configuration/TenantConfigurationKey.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 36288104f..fb5ba29bb 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 @@ -58,12 +58,12 @@ public enum TenantConfigurationKey { /** * string value which holds the polling time interval in the format HH:mm:ss */ - POLLING_TIME_INTERVAL("pollingOverdueTime", "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("pollingTime", "hawkbit.controller.pollingOverdueTime", String.class, null, TenantConfigurationPollingDurationValidator.class); + POLLING_OVERDUE_TIME_INTERVAL("pollingOverdueTime", "hawkbit.controller.pollingOverdueTime", String.class, null, TenantConfigurationPollingDurationValidator.class); private final String keyName; private final String defaultKeyName; From b03fa5eec8fe8f5ee48fdc325b80ad9c14a396b9 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 31 Mar 2016 13:04:21 +0200 Subject: [PATCH 055/344] Verify all download URLs generated by SP-server (e.g. DDI and DMF API) - the get artifact request for the DDI API know contains https links - additional there where http links added - section for creating download urls based on patters was moved to hawkbit-core - tests where adapted and extended Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/api}/ArtifactUrlHandler.java | 11 +- .../api}/ArtifactUrlHandlerProperties.java | 112 +----------------- .../api}/PropertyBasedArtifactUrlHandler.java | 28 ++--- .../org/eclipse/hawkbit/api/UrlProtocol.java | 11 ++ hawkbit-dmf-amqp/pom.xml | 5 + .../amqp/AmqpMessageDispatcherService.java | 13 +- .../AmqpMessageDispatcherServiceTest.java | 6 +- .../PropertyBasedArtifactUrlHandlerTest.java | 23 +++- hawkbit-rest-resource/pom.xml | 5 + .../controller/DataConversionHelper.java | 36 +++--- .../hawkbit/controller/RootController.java | 10 +- .../controller/DeploymentBaseTest.java | 74 ++++++++++-- 12 files changed, 167 insertions(+), 167 deletions(-) rename {hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util => hawkbit-core/src/main/java/org/eclipse/hawkbit/api}/ArtifactUrlHandler.java (73%) rename {hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util => hawkbit-core/src/main/java/org/eclipse/hawkbit/api}/ArtifactUrlHandlerProperties.java (75%) rename {hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util => hawkbit-core/src/main/java/org/eclipse/hawkbit/api}/PropertyBasedArtifactUrlHandler.java (79%) create mode 100644 hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/ArtifactUrlHandler.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java similarity index 73% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/ArtifactUrlHandler.java rename to hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java index f477da03a..a80551f9e 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/ArtifactUrlHandler.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.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.util; - -import org.eclipse.hawkbit.dmf.json.model.Artifact; -import org.eclipse.hawkbit.repository.model.LocalArtifact; +package org.eclipse.hawkbit.api; /** * Interface declaration of the {@link ArtifactUrlHandler} which generates the @@ -23,13 +20,13 @@ public interface ArtifactUrlHandler { * Returns a generated URL for a given artifact for a specific protocol. * * @param controllerId - * the authentifacted controller id + * the authenticated controller id * @param localArtifact * the artifact to retrieve a URL to * @param protocol * the protocol the URL should be generated * @return an URL for the given artifact in a given protocol */ - String getUrl(String controllerId, LocalArtifact localArtifact, final Artifact.UrlProtocol protocol); - + String getUrl(String controllerId, final Long softwareModuleId, final String filename, final String sha1Hash, + final UrlProtocol protocol); } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/ArtifactUrlHandlerProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java similarity index 75% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/ArtifactUrlHandlerProperties.java rename to hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.java index 91c385fae..33fe8651e 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/ArtifactUrlHandlerProperties.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandlerProperties.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.util; +package org.eclipse.hawkbit.api; import org.springframework.boot.context.properties.ConfigurationProperties; /** - * - * + * Artifact handler properties class for holding all supported protocols with + * host, ip, port and download pattern. */ @ConfigurationProperties("hawkbit.artifact.url") public class ArtifactUrlHandlerProperties { @@ -23,23 +23,14 @@ public class ArtifactUrlHandlerProperties { private final Https https = new Https(); private final Coap coap = new Coap(); - /** - * @return the http - */ public Http getHttp() { return http; } - /** - * @return the https - */ public Https getHttps() { return https; } - /** - * @return the coap - */ public Coap getCoap() { return coap; } @@ -66,9 +57,6 @@ public class ArtifactUrlHandlerProperties { /** * Interface for declaring common properties through all supported protocols * pattern. - * - * - * */ public interface ProtocolProperties { /** @@ -94,9 +82,6 @@ public class ArtifactUrlHandlerProperties { /** * Object to hold the properties for the HTTP protocol. - * - * - * */ public static class Http implements ProtocolProperties { private String hostname = LOCALHOST; @@ -108,66 +93,38 @@ public class ArtifactUrlHandlerProperties { */ private String pattern = "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"; - /** - * @return the hostname - */ @Override public String getHostname() { return hostname; } - /** - * @param hostname - * the hostname to set - */ public void setHostname(final String hostname) { this.hostname = hostname; } - /** - * @return the ip - */ @Override public String getIp() { return ip; } - /** - * @param ip - * the ip to set - */ public void setIp(final String ip) { this.ip = ip; } - /** - * @return the urlPattern - */ @Override public String getPattern() { return pattern; } - /** - * @param urlPattern - * the urlPattern to set - */ public void setPattern(final String urlPattern) { this.pattern = urlPattern; } - /** - * @return the port - */ @Override public String getPort() { return port; } - /** - * @param port - * the port to set - */ public void setPort(final String port) { this.port = port; } @@ -175,9 +132,6 @@ public class ArtifactUrlHandlerProperties { /** * Object to hold the properties for the HTTP protocol. - * - * - * */ public static class Https implements ProtocolProperties { private String hostname = LOCALHOST; @@ -189,66 +143,38 @@ public class ArtifactUrlHandlerProperties { */ private String pattern = "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"; - /** - * @return the hostname - */ @Override public String getHostname() { return hostname; } - /** - * @param hostname - * the hostname to set - */ public void setHostname(final String hostname) { this.hostname = hostname; } - /** - * @return the ip - */ @Override public String getIp() { return ip; } - /** - * @param ip - * the ip to set - */ public void setIp(final String ip) { this.ip = ip; } - /** - * @return the urlPattern - */ @Override public String getPattern() { return pattern; } - /** - * @param urlPattern - * the urlPattern to set - */ public void setPattern(final String urlPattern) { this.pattern = urlPattern; } - /** - * @return the port - */ @Override public String getPort() { return port; } - /** - * @param port - * the port to set - */ public void setPort(final String port) { this.port = port; } @@ -256,9 +182,6 @@ public class ArtifactUrlHandlerProperties { /** * Object to hold the properties for the HTTP protocol. - * - * - * */ public static class Coap implements ProtocolProperties { private String hostname = LOCALHOST; @@ -270,68 +193,41 @@ public class ArtifactUrlHandlerProperties { */ private String pattern = "{protocol}://{ip}:{port}/fw/{tenant}/{targetId}/sha1/{artifactSHA1}"; - /** - * @return the hostname - */ @Override public String getHostname() { return hostname; } - /** - * @param hostname - * the hostname to set - */ public void setHostname(final String hostname) { this.hostname = hostname; } - /** - * @return the ip - */ @Override public String getIp() { return ip; } - /** - * @param ip - * the ip to set - */ public void setIp(final String ip) { this.ip = ip; } - /** - * @return the urlPattern - */ @Override public String getPattern() { return pattern; } - /** - * @param urlPattern - * the urlPattern to set - */ public void setPattern(final String urlPattern) { this.pattern = urlPattern; } - /** - * @return the port - */ @Override public String getPort() { return port; } - /** - * @param port - * the port to set - */ public void setPort(final String port) { this.port = port; } } + } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandler.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java similarity index 79% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandler.java rename to hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java index 8d4cfbc28..174086613 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/util/PropertyBasedArtifactUrlHandler.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/PropertyBasedArtifactUrlHandler.java @@ -6,17 +6,15 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.util; +package org.eclipse.hawkbit.api; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import org.eclipse.hawkbit.dmf.json.model.Artifact; -import org.eclipse.hawkbit.repository.model.LocalArtifact; +import org.eclipse.hawkbit.api.ArtifactUrlHandlerProperties.ProtocolProperties; import org.eclipse.hawkbit.tenancy.TenantAware; -import org.eclipse.hawkbit.util.ArtifactUrlHandlerProperties.ProtocolProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; @@ -24,8 +22,8 @@ import org.springframework.stereotype.Component; import com.google.common.base.Strings; /** - * - * + * Implementation for ArtifactUrlHandler for creating urls to download resource + * based on pattern. */ @Component @EnableConfigurationProperties(ArtifactUrlHandlerProperties.class) @@ -48,7 +46,9 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler { private TenantAware tenantAware; @Override - public String getUrl(final String targetId, final LocalArtifact artifact, final Artifact.UrlProtocol protocol) { + public String getUrl(final String targetId, final Long softwareModuleId, final String filename, + final String sha1Hash, final UrlProtocol protocol) { + final String protocolString = protocol.name().toLowerCase(); final ProtocolProperties properties = urlHandlerProperties.getProperties(protocolString); if (properties == null || properties.getPattern() == null) { @@ -56,8 +56,8 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler { } String urlPattern = properties.getPattern(); - final Set> entrySet = getReplaceMap(targetId, artifact, protocolString, properties) - .entrySet(); + final Set> entrySet = getReplaceMap(targetId, softwareModuleId, filename, sha1Hash, + protocolString, properties).entrySet(); for (final Entry entry : entrySet) { if (entry.getKey().equals(PORT_PLACEHOLDER)) { urlPattern = urlPattern.replace(":{" + entry.getKey() + "}", @@ -69,18 +69,18 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler { return urlPattern; } - private Map getReplaceMap(final String targetId, final LocalArtifact artifact, - final String protocol, final ProtocolProperties properties) { + private Map getReplaceMap(final String targetId, final Long softwareModuleId, final String filename, + final String sha1Hash, final String protocol, final ProtocolProperties properties) { final Map replaceMap = new HashMap<>(); replaceMap.put(IP_PLACEHOLDER, properties.getIp()); replaceMap.put(HOSTNAME_PLACEHOLDER, properties.getHostname()); - replaceMap.put(ARTIFACT_FILENAME_PLACEHOLDER, artifact.getFilename()); - replaceMap.put(ARTIFACT_SHA1_PLACEHOLDER, artifact.getSha1Hash()); + replaceMap.put(ARTIFACT_FILENAME_PLACEHOLDER, filename); + replaceMap.put(ARTIFACT_SHA1_PLACEHOLDER, sha1Hash); replaceMap.put(PROTOCOL_PLACEHOLDER, protocol); replaceMap.put(PORT_PLACEHOLDER, properties.getPort()); replaceMap.put(TENANT_PLACEHOLDER, tenantAware.getCurrentTenant()); replaceMap.put(TARGET_ID_PLACEHOLDER, targetId); - replaceMap.put(SOFTWARE_MODULE_ID_PLACDEHOLDER, String.valueOf(artifact.getSoftwareModule().getId())); + replaceMap.put(SOFTWARE_MODULE_ID_PLACDEHOLDER, String.valueOf(softwareModuleId)); return replaceMap; } diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java new file mode 100644 index 000000000..4dd84b7da --- /dev/null +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java @@ -0,0 +1,11 @@ +/** + * Copyright (c) 2011-2016 Bosch Software Innovations GmbH, Germany. All rights reserved. + */ +package org.eclipse.hawkbit.api; + +/** + * Represented the supported protocols for artifact url's. + */ +public enum UrlProtocol { + COAP, HTTP, HTTPS +} diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-amqp/pom.xml index 2fded8559..127103b91 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-amqp/pom.xml @@ -25,6 +25,11 @@ org.eclipse.hawkbit hawkbit-repository ${project.version} + + + org.eclipse.hawkbit + hawkbit-core + ${project.version} org.eclipse.hawkbit 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 b9e6fe9da..19e0cbadf 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 @@ -14,6 +14,8 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import org.eclipse.hawkbit.api.ArtifactUrlHandler; +import org.eclipse.hawkbit.api.UrlProtocol; import org.eclipse.hawkbit.dmf.amqp.api.EventTopic; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; import org.eclipse.hawkbit.dmf.amqp.api.MessageType; @@ -25,7 +27,6 @@ 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.model.LocalArtifact; -import org.eclipse.hawkbit.util.ArtifactUrlHandler; import org.eclipse.hawkbit.util.IpUtil; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; @@ -152,12 +153,16 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { private Artifact convertArtifact(final String targetId, final LocalArtifact localArtifact) { final Artifact artifact = new Artifact(); + artifact.getUrls().put(Artifact.UrlProtocol.COAP, - artifactUrlHandler.getUrl(targetId, localArtifact, Artifact.UrlProtocol.COAP)); + artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), + localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.COAP)); artifact.getUrls().put(Artifact.UrlProtocol.HTTP, - artifactUrlHandler.getUrl(targetId, localArtifact, Artifact.UrlProtocol.HTTP)); + artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), + localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.HTTP)); artifact.getUrls().put(Artifact.UrlProtocol.HTTPS, - artifactUrlHandler.getUrl(targetId, localArtifact, Artifact.UrlProtocol.HTTPS)); + artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), + localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.HTTPS)); artifact.setFilename(localArtifact.getFilename()); artifact.setHashes(new ArtifactHash(localArtifact.getSha1Hash(), null)); 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 46ddd35cc..f2c3d254c 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 @@ -13,6 +13,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; @@ -25,6 +26,7 @@ import java.util.List; 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; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; @@ -36,7 +38,6 @@ 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.util.ArtifactUrlHandler; import org.eclipse.hawkbit.util.IpUtil; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -77,7 +78,8 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit amqpMessageDispatcherService.setAmqpSenderService(senderService); final ArtifactUrlHandler artifactUrlHandlerMock = Mockito.mock(ArtifactUrlHandler.class); - when(artifactUrlHandlerMock.getUrl(anyString(), any(), anyObject())).thenReturn("http://mockurl"); + when(artifactUrlHandlerMock.getUrl(anyString(), anyLong(), anyString(), anyString(), anyObject())) + .thenReturn("http://mockurl"); amqpMessageDispatcherService.setArtifactUrlHandler(artifactUrlHandlerMock); 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 e7ba06d19..bfc560c38 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 @@ -15,7 +15,8 @@ import org.eclipse.hawkbit.AmqpTestConfiguration; import org.eclipse.hawkbit.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.TestConfiguration; import org.eclipse.hawkbit.TestDataUtil; -import org.eclipse.hawkbit.dmf.json.model.Artifact; +import org.eclipse.hawkbit.api.ArtifactUrlHandler; +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; @@ -30,8 +31,7 @@ import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; /** - * - * + * Tests for creating urls to download artifacts. */ @Features("Component Tests - Artifact URL Handler") @Stories("Test to generate the artifact download URL") @@ -45,6 +45,9 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest private TenantAware tenantAware; private LocalArtifact localArtifact; private final String controllerId = "Test"; + private String fileName; + private Long softwareModuleId; + private String sha1Hash; @Before public void setup() { @@ -53,12 +56,18 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest final SoftwareModule module = dsA.getModules().iterator().next(); localArtifact = (LocalArtifact) TestDataUtil.generateArtifacts(artifactManagement, module.getId()).stream() .findAny().get(); + softwareModuleId = localArtifact.getSoftwareModule().getId(); + fileName = localArtifact.getFilename(); + sha1Hash = localArtifact.getSha1Hash(); + } @Test @Description("Tests the generation of http download url.") public void testHttpUrl() { - final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTP); + + final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, + UrlProtocol.HTTP); assertEquals("http is build incorrect", "http://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" @@ -69,7 +78,8 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest @Test @Description("Tests the generation of https download url.") public void testHttpsUrl() { - final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.HTTPS); + final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, + UrlProtocol.HTTPS); assertEquals("https is build incorrect", "https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/" + controllerId + "/softwaremodules/" + localArtifact.getSoftwareModule().getId() + "/artifacts/" @@ -80,7 +90,8 @@ public class PropertyBasedArtifactUrlHandlerTest extends AbstractIntegrationTest @Test @Description("Tests the generation of coap download url.") public void testCoapUrl() { - final String url = urlHandlerProperties.getUrl(controllerId, localArtifact, Artifact.UrlProtocol.COAP); + final String url = urlHandlerProperties.getUrl(controllerId, softwareModuleId, fileName, sha1Hash, + UrlProtocol.COAP); assertEquals("coap is build incorrect", "coap://127.0.0.1:5683/fw/" + tenantAware.getCurrentTenant() + "/" + controllerId + "/sha1/" + localArtifact.getSha1Hash(), url); diff --git a/hawkbit-rest-resource/pom.xml b/hawkbit-rest-resource/pom.xml index 633a1f8cc..0be5d20f5 100644 --- a/hawkbit-rest-resource/pom.xml +++ b/hawkbit-rest-resource/pom.xml @@ -25,6 +25,11 @@ org.eclipse.hawkbit hawkbit-repository ${project.version} + + + org.eclipse.hawkbit + hawkbit-core + ${project.version} org.eclipse.hawkbit 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 ef4468815..03623abdd 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 @@ -18,6 +18,8 @@ import java.util.stream.Collectors; 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; @@ -29,27 +31,29 @@ 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; import com.google.common.base.Charsets; /** * Utility class for the Controller API. - * - * - * - * */ public final class DataConversionHelper { + @Autowired + ArtifactUrlHandler artifactUrlHandler; + // utility class, private constructor. private DataConversionHelper() { } - static List createChunks(final String targetid, final Action uAction, final TenantAware tenantAware) { - return uAction.getDistributionSet() - .getModules().stream().map(module -> new Chunk(mapChunkLegacyKeys(module.getType().getKey()), - module.getVersion(), module.getName(), createArtifacts(targetid, module, tenantAware))) + static List createChunks(final String targetid, final Action uAction, final TenantAware tenantAware, + final ArtifactUrlHandler artifactUrlHandler) { + return uAction.getDistributionSet().getModules().stream() + .map(module -> new Chunk(mapChunkLegacyKeys(module.getType().getKey()), module.getVersion(), + module.getName(), createArtifacts(targetid, module, tenantAware, artifactUrlHandler))) .collect(Collectors.toList()); } @@ -77,18 +81,22 @@ public final class DataConversionHelper { * @return a list of artifacts or a empty list. Cannot be . */ public static List createArtifacts(final String targetid, - final org.eclipse.hawkbit.repository.model.SoftwareModule module, final TenantAware tenantAware) { + final org.eclipse.hawkbit.repository.model.SoftwareModule module, final TenantAware tenantAware, + final ArtifactUrlHandler artifactUrlHandler) { final List files = new ArrayList<>(); module.getLocalArtifacts().forEach(artifact -> { final Artifact file = new Artifact(); file.setHashes(new ArtifactHash(artifact.getSha1Hash(), artifact.getMd5Hash())); file.setFilename(artifact.getFilename()); file.setSize(artifact.getSize()); - - file.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()).downloadArtifact(targetid, - artifact.getSoftwareModule().getId(), artifact.getFilename(), null, null)).withRel("download")); - file.add(linkTo(methodOn(RootController.class, tenantAware.getCurrentTenant()).downloadArtifactMd5(targetid, - artifact.getSoftwareModule().getId(), artifact.getFilename(), null, null)).withRel("md5sum")); + final String linkHttp = artifactUrlHandler.getUrl(targetid, artifact.getSoftwareModule().getId(), + artifact.getFilename(), artifact.getSha1Hash(), UrlProtocol.HTTP); + 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 + ".MD5SUM").withRel("md5sum")); + file.add(new Link(linkHttp).withRel("download-http")); + file.add(new Link(linkHttp + ".MD5SUM").withRel("md5sum-http")); files.add(file); }); 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 ff1e26f8b..0a668338c 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 @@ -15,6 +15,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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; @@ -94,6 +95,9 @@ public class RootController { @Autowired private HawkbitSecurityProperties securityProperties; + @Autowired + private ArtifactUrlHandler artifactUrlHandler; + /** * Returns all artifacts of a given software module and target. * @@ -118,7 +122,8 @@ public class RootController { } - return new ResponseEntity<>(DataConversionHelper.createArtifacts(targetid, softwareModule, tenantAware), + return new ResponseEntity<>( + DataConversionHelper.createArtifacts(targetid, softwareModule, tenantAware, artifactUrlHandler), HttpStatus.OK); } @@ -307,7 +312,8 @@ public class RootController { if (!action.isCancelingOrCanceled()) { - final List chunks = DataConversionHelper.createChunks(targetid, action, tenantAware); + final List chunks = DataConversionHelper.createChunks(targetid, action, tenantAware, + artifactUrlHandler); final HandlingType handlingType = action.isForce() ? HandlingType.FORCED : HandlingType.ATTEMPT; diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java index 2b2b7e597..75e0f906a 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java @@ -170,15 +170,27 @@ 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("http://localhost/" + 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/" + 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() + + "/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() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) + .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].size", equalTo(5 * 1024))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[1].filename", equalTo("test1.signature"))) @@ -188,11 +200,21 @@ 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("http://localhost/" + 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/" + 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() + + "/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() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() @@ -293,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("http://localhost/" + 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("http://localhost/" + tenantAware.getCurrentTenant() + equalTo("https://localhost/" + tenantAware.getCurrentTenant() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.MD5SUM"))) @@ -311,11 +333,21 @@ 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("http://localhost/" + 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/" + 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() + + "/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() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() @@ -409,15 +441,25 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].filename", equalTo("test1"))) .andExpect(jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].hashes.md5", equalTo(artifact.getMd5Hash()))) - .andExpect( - jsonPath("$deployment.chunks[?(@.part==os)][0].artifacts[0].hashes.sha1", - equalTo(artifact.getSha1Hash()))) + .andExpect(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("http://localhost/" + 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/" + 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() + + "/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() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() @@ -431,15 +473,27 @@ 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("http://localhost/" + 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/" + 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() + + "/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() + "/controller/v1/4712/softwaremodules/" + findDistributionSetByAction.findFirstModuleByType(osType).getId() + "/artifacts/test1.signature.MD5SUM"))) + .andExpect(jsonPath("$deployment.chunks[?(@.part==bApp)][0].version", equalTo(ds.findFirstModuleByType(appType).getVersion()))) .andExpect(jsonPath("$deployment.chunks[?(@.part==bApp)][0].name", From b839fd49252237bb73bf85387c91ea1413d2d906 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 14:18:17 +0200 Subject: [PATCH 056/344] Log complete message in error case --- .../src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4662c8d39..846c9f232 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 @@ -105,7 +105,7 @@ public class BaseAmqpService { } protected final void logAndThrowMessageError(final Message message, final String error) { - LOGGER.warn("Error \"{}\" reported by message {}", error, message.getMessageProperties().getMessageId()); + LOGGER.warn("Error \"{}\" reported by message: {}", error, message); throw new IllegalArgumentException(error); } From ae7585e1bc42ed406f3804c205948b7baf174e8f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 14:47:00 +0200 Subject: [PATCH 057/344] Added description to test asserts. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/model/ModelEqualsHashcodeTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 e42ff4b9c..45e56167a 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 @@ -56,7 +56,8 @@ public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { public void changedEntitiesAreNotEqual() { final SoftwareModuleType type = softwareManagement .createSoftwareModuleType(new SoftwareModuleType("test", "test", "test", 1)); - assertThat(type).isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1)); + assertThat(type).as("persited entity is not equal to regular object") + .isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1)); type.setDescription("another"); final SoftwareModuleType updated = softwareManagement.updateSoftwareModuleType(type); @@ -84,7 +85,8 @@ public class ModelEqualsHashcodeTest extends AbstractIntegrationTest { public void updatedEntitiesHaveDifferentHashcodes() { final SoftwareModuleType type = softwareManagement .createSoftwareModuleType(new SoftwareModuleType("test", "test", "test", 1)); - assertThat(type.hashCode()).isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1).hashCode()); + assertThat(type.hashCode()).as("persited entity does not have same hashcode as regular object") + .isNotEqualTo(new SoftwareModuleType("test", "test", "test", 1).hashCode()); final int beforeChange = type.hashCode(); type.setDescription("another"); From 1d416327d69380ffd48fe8b25a969f1b0f9c9b1e Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 31 Mar 2016 15:08:20 +0200 Subject: [PATCH 058/344] Sonar fix moving private methods to inner classes - Rule: "private" methods called only by inner classes should be moved to those classes Signed-off-by: Jonathan Philip Knoblauch --- .../ui/artifacts/upload/UploadLayout.java | 31 ++- .../common/tagdetails/AbstractTagToken.java | 34 +-- .../targettable/BulkUploadHandler.java | 213 ++++++++---------- .../ui/rollout/rollout/RolloutListGrid.java | 53 ++--- .../rolloutgroup/RolloutGroupListGrid.java | 24 +- .../RolloutGroupTargetsListGrid.java | 63 +++--- .../polling/DurationConfigField.java | 12 +- 7 files changed, 199 insertions(+), 231 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 41304ddc9..3fb735284 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 @@ -215,13 +215,18 @@ public class UploadLayout extends VerticalLayout { hasDirectory = Boolean.TRUE; } } - } - private static boolean isDirectory(final Html5File file) { - if (Strings.isNullOrEmpty(file.getType()) && file.getFileSize() % 4096 == 0) { - return true; + private StreamVariable createStreamVariable(final Html5File file) { + return new UploadHandler(file.getFileName(), file.getFileSize(), UploadLayout.this, uploadInfoWindow, + spInfo.getMaxArtifactFileSize(), null, file.getType()); + } + + private boolean isDirectory(final Html5File file) { + if (Strings.isNullOrEmpty(file.getType()) && file.getFileSize() % 4096 == 0) { + return true; + } + return false; } - return false; } private void displayCompositeMessage() { @@ -282,11 +287,6 @@ public class UploadLayout extends VerticalLayout { discardBtn.addClickListener(event -> discardUploadData(event)); } - private StreamVariable createStreamVariable(final Html5File file) { - return new UploadHandler(file.getFileName(), file.getFileSize(), this, uploadInfoWindow, - spInfo.getMaxArtifactFileSize(), null, file.getType()); - } - boolean checkForDuplicate(final String filename) { final Boolean isDuplicate = checkIfFileIsDuplicate(filename); if (isDuplicate) { @@ -349,17 +349,17 @@ public class UploadLayout extends VerticalLayout { } } - Boolean validate(DragAndDropEvent event) { + Boolean validate(final DragAndDropEvent event) { // check if drop is valid.If valid ,check if software module is // selected. - if(!isFilesDropped(event)){ + if (!isFilesDropped(event)) { uiNotification.displayValidationError(i18n.get("message.action.not.allowed")); return false; } return checkIfSoftwareModuleIsSelected(); } - private boolean isFilesDropped(DragAndDropEvent event) { + private boolean isFilesDropped(final DragAndDropEvent event) { if (event.getTransferable() instanceof WrapperTransferable) { final Html5File[] files = ((WrapperTransferable) event.getTransferable()).getFiles(); // other components can also be wrapped in WrapperTransferable , so @@ -448,7 +448,7 @@ public class UploadLayout extends VerticalLayout { } private String getDuplicateFileValidationMessage() { - StringBuilder message = new StringBuilder(); + final StringBuilder message = new StringBuilder(); if (!duplicateFileNamesList.isEmpty()) { final String fileNames = StringUtils.collectionToCommaDelimitedString(duplicateFileNamesList); if (duplicateFileNamesList.size() == 1) { @@ -655,8 +655,7 @@ public class UploadLayout extends VerticalLayout { return uiNotification; } - - public void setHasDirectory(Boolean hasDirectory) { + public void setHasDirectory(final Boolean hasDirectory) { this.hasDirectory = hasDirectory; } } diff --git a/hawkbit-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 index a00b8ce70..5e5389c9f 100644 --- a/hawkbit-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 @@ -151,18 +151,25 @@ public abstract class AbstractTagToken implements Serializable { } } - } + private void updateTokenStyle(final Object tokenId, final Button button) { + final String color = getColor(tokenId); + button.setCaption("" + FontAwesome.CIRCLE.getHtml() + + "" + " " + getItemNameProperty(tokenId).getValue().toString().concat(" ×")); + button.setCaptionAsHtml(true); + } - private void updateTokenStyle(final Object tokenId, final Button button) { - final String color = getColor(tokenId); - button.setCaption("" + FontAwesome.CIRCLE.getHtml() + "" - + " " + getItemNameProperty(tokenId).getValue().toString().concat(" ×")); - button.setCaptionAsHtml(true); - } + private void onTokenSearch(final Object tokenId) { + assignTag(getItemNameProperty(tokenId).getValue().toString()); + removeTagAssignedFromCombo((Long) tokenId); + } + + private void tokenClick(final Object tokenId) { + final Item item = tokenField.getContainerDataSource().addItem(tokenId); + item.getItemProperty("name").setValue(tagDetails.get(tokenId).getName()); + item.getItemProperty(COLOR_PROPERTY).setValue(tagDetails.get(tokenId).getColor()); + unassignTag(tagDetails.get(tokenId).getName()); + } - private void onTokenSearch(final Object tokenId) { - assignTag(getItemNameProperty(tokenId).getValue().toString()); - removeTagAssignedFromCombo((Long) tokenId); } private Property getItemNameProperty(final Object tokenId) { @@ -184,13 +191,6 @@ public abstract class AbstractTagToken implements Serializable { return (String) item.getItemProperty("name").getValue(); } - private void tokenClick(final Object tokenId) { - final Item item = tokenField.getContainerDataSource().addItem(tokenId); - item.getItemProperty("name").setValue(tagDetails.get(tokenId).getName()); - item.getItemProperty(COLOR_PROPERTY).setValue(tagDetails.get(tokenId).getColor()); - unassignTag(tagDetails.get(tokenId).getName()); - } - protected void removePreviouslyAddedTokens() { tokensAdded.keySet().forEach(previouslyAddedToken -> tokenField.removeToken(previouslyAddedToken)); } 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 0716e6bd6..1a388c324 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 @@ -63,14 +63,10 @@ import com.vaadin.ui.Upload.SucceededListener; /** * Bulk target upload handler. - * */ public class BulkUploadHandler extends CustomComponent implements SucceededListener, FailedListener, Receiver, StartedListener { - /** - * - */ private static final long serialVersionUID = -1273494705754674501L; private static final Logger LOG = LoggerFactory.getLogger(BulkUploadHandler.class); @@ -149,12 +145,6 @@ public class BulkUploadHandler extends CustomComponent setCompositionRoot(horizontalLayout); } - /* - * (non-Javadoc) - * - * @see com.vaadin.ui.Upload.Receiver#receiveUpload(java.lang.String, - * java.lang.String) - */ @Override public OutputStream receiveUpload(final String filename, final String mimeType) { try { @@ -170,25 +160,11 @@ public class BulkUploadHandler extends CustomComponent return new NullOutputStream(); } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.Upload.FailedListener#uploadFailed(com.vaadin.ui.Upload. - * FailedEvent) - */ @Override public void uploadFailed(final FailedEvent event) { LOG.info("Upload failed for file :{} due to {}", event.getFilename(), event.getReason()); } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.Upload.SucceededListener#uploadSucceeded(com.vaadin.ui. - * Upload.SucceededEvent) - */ @Override public void uploadSucceeded(final SucceededEvent event) { executor.execute(new UploadAsync(event)); @@ -252,6 +228,61 @@ public class BulkUploadHandler extends CustomComponent } } + private double getTotalNumberOfLines() { + + double totalFileSize = 0; + try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(tempFile), + Charset.defaultCharset())) { + try (BufferedReader readerForSize = new BufferedReader(inputStreamReader)) { + totalFileSize = readerForSize.lines().count(); + } + } catch (final FileNotFoundException e) { + LOG.error("Error reading file {}", tempFile.getName(), e); + } catch (final IOException e) { + LOG.error("Error while closing reader of file {}", tempFile.getName(), e); + } + + return totalFileSize; + } + + private void resetCounts() { + successfullTargetCount = 0; + failedTargetCount = 0; + } + + private void deleteFile() { + if (tempFile.exists()) { + final boolean isDeleted = tempFile.delete(); + if (!isDeleted) { + LOG.info("File {} was not deleted !", tempFile.getName()); + } + } + tempFile = null; + } + + private void readEachLine(final String line, final double innerCounter, final double totalFileSize) { + final String csvDelimiter = ","; + final String[] targets = line.split(csvDelimiter); + if (targets.length == 2) { + final String controllerId = targets[0]; + final String targetName = targets[1]; + addNewTarget(controllerId, targetName); + } else { + failedTargetCount++; + } + final float current = managementUIState.getTargetTableFilters().getBulkUpload() + .getProgressBarCurrentValue(); + final float next = (float) (innerCounter / totalFileSize); + if (Math.abs(next - 0.1) < 0.00001 || current - next >= 0 || next - current >= 0.05 + || Math.abs(next - 1) < 0.00001) { + managementUIState.getTargetTableFilters().getBulkUpload().setProgressBarCurrentValue(next); + managementUIState.getTargetTableFilters().getBulkUpload() + .setSucessfulUploadCount(successfullTargetCount); + managementUIState.getTargetTableFilters().getBulkUpload().setFailedUploadCount(failedTargetCount); + eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.BULK_TARGET_CREATED)); + } + } + private void doAssignments() { final StringBuilder errorMessage = new StringBuilder(); String dsAssignmentFailedMsg = null; @@ -267,6 +298,43 @@ public class BulkUploadHandler extends CustomComponent displayValidationMessage(errorMessage, dsAssignmentFailedMsg, tagAssignmentFailedMsg); } + private String saveAllAssignments() { + final ActionType actionType = ActionType.FORCED; + final long forcedTimeStamp = new Date().getTime(); + final TargetBulkUpload targetBulkUpload = managementUIState.getTargetTableFilters().getBulkUpload(); + final List targetsList = targetBulkUpload.getTargetsCreated(); + final DistributionSetIdName dsSelected = (DistributionSetIdName) comboBox.getValue(); + if (distributionSetManagement.findDistributionSetById(dsSelected.getId()) == null) { + return i18n.get("message.bulk.upload.assignment.failed"); + } else { + deploymentManagement.assignDistributionSet(targetBulkUpload.getDsNameAndVersion().getId(), actionType, + forcedTimeStamp, targetsList.toArray(new String[targetsList.size()])); + return null; + } + } + + private String tagAssignment() { + final Map tokensSelected = targetBulkTokenTags.getTokensAdded(); + final List deletedTags = new ArrayList<>(); + for (final TagData tagData : tokensSelected.values()) { + if (tagManagement.findTargetTagById(tagData.getId()) == null) { + deletedTags.add(tagData.getName()); + } else { + targetManagement.toggleTagAssignment( + managementUIState.getTargetTableFilters().getBulkUpload().getTargetsCreated(), + tagData.getName()); + } + } + if (!deletedTags.isEmpty()) { + if (deletedTags.size() == 1) { + return i18n.get("message.bulk.upload.tag.assignment.failed", deletedTags.get(0)); + } else { + return i18n.get("message.bulk.upload.tag.assignments.failed"); + } + } + return null; + } + private boolean ifTagsSelected() { return targetBulkTokenTags.getTokenField().getValue() != null; } @@ -307,59 +375,6 @@ public class BulkUploadHandler extends CustomComponent } } - private double getTotalNumberOfLines() { - - double totalFileSize = 0; - try (InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(tempFile), - Charset.defaultCharset())) { - try (BufferedReader readerForSize = new BufferedReader(inputStreamReader)) { - totalFileSize = readerForSize.lines().count(); - } - } catch (final FileNotFoundException e) { - LOG.error("Error reading file {}", tempFile.getName(), e); - } catch (final IOException e) { - LOG.error("Error while closing reader of file {}", tempFile.getName(), e); - } - - return totalFileSize; - } - - private void resetCounts() { - successfullTargetCount = 0; - failedTargetCount = 0; - } - - private void deleteFile() { - if (tempFile.exists()) { - final boolean isDeleted = tempFile.delete(); - if (!isDeleted) { - LOG.info("File {} was not deleted !", tempFile.getName()); - } - } - tempFile = null; - } - - private void readEachLine(final String line, final double innerCounter, final double totalFileSize) { - final String csvDelimiter = ","; - final String[] targets = line.split(csvDelimiter); - if (targets.length == 2) { - final String controllerId = targets[0]; - final String targetName = targets[1]; - addNewTarget(controllerId, targetName); - } else { - failedTargetCount++; - } - final float current = managementUIState.getTargetTableFilters().getBulkUpload().getProgressBarCurrentValue(); - final float next = (float) (innerCounter / totalFileSize); - if (Math.abs(next - 0.1) < 0.00001 || current - next >= 0 || next - current >= 0.05 - || Math.abs(next - 1) < 0.00001) { - managementUIState.getTargetTableFilters().getBulkUpload().setProgressBarCurrentValue(next); - managementUIState.getTargetTableFilters().getBulkUpload().setSucessfulUploadCount(successfullTargetCount); - managementUIState.getTargetTableFilters().getBulkUpload().setFailedUploadCount(failedTargetCount); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.BULK_TARGET_CREATED)); - } - } - private void addNewTarget(final String controllerId, final String name) { final String newControllerId = HawkbitCommonUtil.trimAndNullIfEmpty(controllerId); if (mandatoryCheck(newControllerId) && duplicateCheck(newControllerId)) { @@ -405,43 +420,6 @@ public class BulkUploadHandler extends CustomComponent } } - private String saveAllAssignments() { - final ActionType actionType = ActionType.FORCED; - final long forcedTimeStamp = new Date().getTime(); - final TargetBulkUpload targetBulkUpload = managementUIState.getTargetTableFilters().getBulkUpload(); - final List targetsList = targetBulkUpload.getTargetsCreated(); - final DistributionSetIdName dsSelected = (DistributionSetIdName) comboBox.getValue(); - if (distributionSetManagement.findDistributionSetById(dsSelected.getId()) == null) { - return i18n.get("message.bulk.upload.assignment.failed"); - } else { - deploymentManagement.assignDistributionSet(targetBulkUpload.getDsNameAndVersion().getId(), actionType, - forcedTimeStamp, targetsList.toArray(new String[targetsList.size()])); - return null; - } - } - - private String tagAssignment() { - final Map tokensSelected = targetBulkTokenTags.getTokensAdded(); - final List deletedTags = new ArrayList<>(); - for (final TagData tagData : tokensSelected.values()) { - if (tagManagement.findTargetTagById(tagData.getId()) == null) { - deletedTags.add(tagData.getName()); - } else { - targetManagement.toggleTagAssignment( - managementUIState.getTargetTableFilters().getBulkUpload().getTargetsCreated(), - tagData.getName()); - } - } - if (!deletedTags.isEmpty()) { - if (deletedTags.size() == 1) { - return i18n.get("message.bulk.upload.tag.assignment.failed", deletedTags.get(0)); - } else { - return i18n.get("message.bulk.upload.tag.assignments.failed"); - } - } - return null; - } - private static class NullOutputStream extends OutputStream { /** * null output stream. @@ -462,13 +440,6 @@ public class BulkUploadHandler extends CustomComponent return upload; } - /* - * (non-Javadoc) - * - * @see - * com.vaadin.ui.Upload.StartedListener#uploadStarted(com.vaadin.ui.Upload - * .StartedEvent) - */ @Override public void uploadStarted(final StartedEvent event) { if (!event.getFilename().endsWith(".csv")) { 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 9151f3932..d60d72527 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 @@ -245,7 +245,7 @@ public class RolloutListGrid extends AbstractGrid { @Override protected void setColumnProperties() { - List columnList = new ArrayList<>(); + final List columnList = new ArrayList<>(); columnList.add(SPUILabelDefinitions.VAR_NAME); columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); columnList.add(SPUILabelDefinitions.VAR_STATUS); @@ -265,13 +265,13 @@ public class RolloutListGrid extends AbstractGrid { @Override protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); + final List columnsToBeHidden = new ArrayList<>(); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { + for (final Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } @@ -318,7 +318,7 @@ public class RolloutListGrid extends AbstractGrid { @Override public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; + final String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { return "centeralign"; } @@ -327,18 +327,18 @@ public class RolloutListGrid extends AbstractGrid { }); } - private void onClickOfRolloutName(RendererClickEvent event) { + private void onClickOfRolloutName(final RendererClickEvent event) { rolloutUIState.setRolloutId((long) event.getItemId()); final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); rolloutUIState.setRolloutName(rolloutName); - String ds = (String) getContainerDataSource().getItem(event.getItemId()) + final String ds = (String) getContainerDataSource().getItem(event.getItemId()) .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); rolloutUIState.setRolloutDistributionSet(ds); eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); } - private void onClickOfActionBtn(RendererClickEvent event) { + private void onClickOfActionBtn(final RendererClickEvent event) { final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); contextMenu.open(event.getClientX(), event.getClientY()); @@ -377,7 +377,6 @@ public class RolloutListGrid extends AbstractGrid { return context; } - private void getUpdateMenuItem(final ContextMenu context, final Long rolloutId) { // Add 'Update' option only if user has update permission if (!permissionChecker.hasRolloutUpdatePermission()) { @@ -387,17 +386,6 @@ public class RolloutListGrid extends AbstractGrid { cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); } - private String convertRolloutStatusToString(final RolloutStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); - if (statusFontIcon == null) { - return null; - } - String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); - } - private void menuItemClicked(final ContextMenuItemClickEvent event) { final ContextMenuItem item = (ContextMenuItem) event.getSource(); final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); @@ -441,12 +429,12 @@ public class RolloutListGrid extends AbstractGrid { private static final long serialVersionUID = 2544026030795375748L; private final FontAwesome fontIcon; - public FontIconGenerator(FontAwesome icon) { + public FontIconGenerator(final FontAwesome icon) { this.fontIcon = icon; } @Override - public String getValue(Item item, Object itemId, Object propertyId) { + public String getValue(final Item item, final Object itemId, final Object propertyId) { return fontIcon.getHtml(); } @@ -456,7 +444,7 @@ public class RolloutListGrid extends AbstractGrid { } } - private String getDescription(CellReference cell) { + private String getDescription(final CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { @@ -558,6 +546,17 @@ public class RolloutListGrid extends AbstractGrid { public Class getPresentationType() { return String.class; } + + private String convertRolloutStatusToString(final RolloutStatus value) { + final StatusFontIcon statusFontIcon = statusIconMap.get(value); + if (statusFontIcon == null) { + return null; + } + final String codePoint = statusFontIcon.getFontIcon() != null + ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + } } /** @@ -570,14 +569,16 @@ public class RolloutListGrid extends AbstractGrid { private static final long serialVersionUID = -5794528427855153924L; @Override - public TotalTargetCountStatus convertToModel(String value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public TotalTargetCountStatus convertToModel(final String value, + final Class targetType, final Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { return null; } @Override - public String convertToPresentation(TotalTargetCountStatus value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public String convertToPresentation(final TotalTargetCountStatus value, + final Class targetType, final Locale locale) + 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/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 44d945efd..bb4adfe4a 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 @@ -273,17 +273,7 @@ public class RolloutGroupListGrid extends AbstractGrid { eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); } - private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); - if (statusFontIcon == null) { - return null; - } - String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); - - } + private void createRolloutGroupStatusToFontMap() { statusIconMap.put(RolloutGroupStatus.FINISHED, @@ -391,6 +381,18 @@ public class RolloutGroupListGrid extends AbstractGrid { public Class getPresentationType() { return String.class; } + + private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { + StatusFontIcon statusFontIcon = statusIconMap.get(value); + if (statusFontIcon == null) { + return null; + } + String codePoint = statusFontIcon.getFontIcon() != null + ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + + } } } 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 e55b30111..0099dfc95 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 @@ -158,7 +158,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { @Override protected void setColumnProperties() { - List columnList = new ArrayList<>(); + final List columnList = new ArrayList<>(); columnList.add(SPUILabelDefinitions.VAR_NAME); columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnList.add(SPUILabelDefinitions.VAR_CREATED_BY); @@ -218,11 +218,9 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { public String convertToPresentation(final Status status, final Class targetType, final Locale locale) { if (status == null) { - // Actions are not created for targets when - // rollout's status - // is READY and when duplicate assignment is done. - // In these cases display a appropriate status with - // description + // Actions are not created for targets when rollout's status is + // READY and when duplicate assignment is done. In these cases + // display a appropriate status with description return getStatus(); } return processActionStatus(status); @@ -238,16 +236,31 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { return String.class; } - } - - private String processActionStatus(final Status status) { - StatusFontIcon statusFontIcon = statusIconMap.get(status); - if (statusFontIcon == null) { - return null; + private String processActionStatus(final Status status) { + final StatusFontIcon statusFontIcon = statusIconMap.get(status); + if (statusFontIcon == null) { + return null; + } + final String codePoint = statusFontIcon.getFontIcon() != null + ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), null); } - String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), null); + + private String getStatus() { + final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() + ? rolloutUIState.getRolloutGroup().get() : null; + if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", null); + } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.MINUS_CIRCLE.getCodepoint()), "statusIconBlue", null); + } else { + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.QUESTION_CIRCLE.getCodepoint()), "statusIconBlue", null); + } + } + } private void createRolloutStatusToFontMap() { @@ -271,22 +284,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); } - private String getStatus() { - final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() - ? rolloutUIState.getRolloutGroup().get() : null; - if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { - return HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", null); - } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - return HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.MINUS_CIRCLE.getCodepoint()), "statusIconBlue", null); - } else { - return HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.QUESTION_CIRCLE.getCodepoint()), "statusIconBlue", null); - } - } - - private String getDescription(CellReference cell) { + private String getDescription(final CellReference cell) { if (!SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return null; } @@ -296,7 +294,6 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { } return cell.getProperty().getValue().toString().toLowerCase(); } - private String getDescriptionWhenNoAction() { final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() @@ -304,7 +301,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { return RolloutGroupStatus.READY.toString().toLowerCase(); } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - String ds = rolloutUIState.getRolloutDistributionSet().isPresent() + final String ds = rolloutUIState.getRolloutDistributionSet().isPresent() ? rolloutUIState.getRolloutDistributionSet().get() : ""; return i18n.get("message.dist.already.assigned", new Object[] { ds }); } diff --git a/hawkbit-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 index 8cefc15fa..e1569db02 100644 --- a/hawkbit-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 @@ -14,8 +14,6 @@ import java.util.List; import org.eclipse.hawkbit.ui.tenantconfiguration.ConfigurationItem; -import com.vaadin.data.Property.ValueChangeEvent; -import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.ui.Alignment; import com.vaadin.ui.CheckBox; import com.vaadin.ui.GridLayout; @@ -50,8 +48,8 @@ public class DurationConfigField extends GridLayout implements ConfigurationItem this.addComponent(durationField, 1, 0); this.setComponentAlignment(durationField, Alignment.MIDDLE_LEFT); - checkBox.addValueChangeListener(event->checkBoxChange()); - durationField.addValueChangeListener(event->notifyConfigurationChanged()); + checkBox.addValueChangeListener(event -> checkBoxChange()); + durationField.addValueChangeListener(event -> notifyConfigurationChanged()); } private void checkBoxChange() { @@ -72,16 +70,16 @@ public class DurationConfigField extends GridLayout implements ConfigurationItem * @param globalDuration * duration value which is stored in the global configuration */ - private void init(final Duration globalDuration, final Duration tenantDuration) { + protected void init(final Duration globalDuration, final Duration tenantDuration) { this.globalDuration = globalDuration; this.setValue(tenantDuration); } - private void setCheckBoxTooltip(final String label) { + protected void setCheckBoxTooltip(final String label) { checkBox.setDescription(label); } - private void setAllowedRange(final Duration minimumDuration, final Duration maximumDuration) { + protected void setAllowedRange(final Duration minimumDuration, final Duration maximumDuration) { durationField.setMinimumDuration(minimumDuration); durationField.setMaximumDuration(maximumDuration); } From 2b5a887f6e5605643973cf26ba3b4a57eba7f32b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 15:47:24 +0200 Subject: [PATCH 059/344] Fixed wrong timeframe check. Set proper 24h default. Signed-off-by: Kai Zimmermann --- .../main/java/org/eclipse/hawkbit/ControllerPollProperties.java | 2 +- .../eclipse/hawkbit/tenancy/configuration/DurationHelper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/ControllerPollProperties.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/ControllerPollProperties.java index c923963d2..0d70ae69d 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/ControllerPollProperties.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/ControllerPollProperties.java @@ -31,7 +31,7 @@ public class ControllerPollProperties { * Maximum polling time that can be configured by a tenant in HH:MM:SS * notation. */ - private String maxPollingTime = "23:59:00"; + private String maxPollingTime = "23:59:59"; /** * Minimum polling time that can be configured by a tenant in HH:MM:SS diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java index 8e7c46223..b87cf524a 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java @@ -37,7 +37,7 @@ public final class DurationHelper { } public boolean isWithinRange(final Duration duration) { - return duration.compareTo(min) > 0 && duration.compareTo(max) < 0; + return duration.compareTo(min) >= 0 && duration.compareTo(max) <= 0; } } From 3bbbadd1654612fd849cc650f61b08e87e28f3c9 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 31 Mar 2016 15:53:52 +0200 Subject: [PATCH 060/344] Check if the message body is empty Signed-off-by: SirWayne --- .../java/org/eclipse/hawkbit/amqp/BaseAmqpService.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 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 8a054165b..293a8212c 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 @@ -59,7 +59,7 @@ public class BaseAmqpService { */ @SuppressWarnings("unchecked") public T convertMessage(final Message message, final Class clazz) { - if (message == null || message.getBody() == null) { + if (isMessageBodyEmpty(message)) { return null; } message.getMessageProperties().getHeaders().put(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, @@ -67,6 +67,10 @@ public class BaseAmqpService { return (T) rabbitTemplate.getMessageConverter().fromMessage(message); } + private boolean isMessageBodyEmpty(final Message message) { + return message == null || message.getBody() == null || message.getBody().length == 0; + } + /** * Is needed to convert a incoming message to is originally list object * type. @@ -79,7 +83,7 @@ public class BaseAmqpService { */ @SuppressWarnings("unchecked") public List convertMessageList(final Message message, final Class clazz) { - if (message == null || message.getBody() == null) { + if (isMessageBodyEmpty(message)) { return Collections.emptyList(); } message.getMessageProperties().getHeaders().put(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, From 9b11d92b7f42bdaa78262c13bed202ed675f91e4 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 31 Mar 2016 15:56:51 +0200 Subject: [PATCH 061/344] Added javadoc. Signed-off-by: Kai Zimmermann --- .../hawkbit/tenancy/configuration/DurationHelper.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java index b87cf524a..5968f4420 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/DurationHelper.java @@ -36,6 +36,13 @@ public final class DurationHelper { this.max = max; } + /** + * Checks if the requested duration is in the defined min/max range. + * + * @param duration + * to checked + * @return true if in time range + */ public boolean isWithinRange(final Duration duration) { return duration.compareTo(min) >= 0 && duration.compareTo(max) <= 0; } From 0a0c08b70042ef1043d58b89ee52eb444cabe84d Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 1 Apr 2016 15:55:00 +0200 Subject: [PATCH 062/344] Fixed wrong call of sw module type. UI uses name and not key. Signed-off-by: Kai Zimmermann --- .../java/org/eclipse/hawkbit/repository/SoftwareManagement.java | 2 +- .../java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 c6eab402a..384353b8e 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 class SoftwareManagement { } /** - * retrieves {@link SoftwareModule}s by their name AND version. + * retrieves {@link SoftwareModule} by their name AND version AND type.. * * @param name * of the {@link SoftwareModule} 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 67e71ba4f..3f947cfd0 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 @@ -809,7 +809,7 @@ public final class HawkbitCommonUtil { public static boolean isDuplicate(final String name, final String version, final String type) { final SoftwareManagement swMgmtService = SpringContextHelper.getBean(SoftwareManagement.class); final SoftwareModule swModule = swMgmtService.findSoftwareModuleByNameAndVersion(name, version, - swMgmtService.findSoftwareModuleTypeByKey(type)); + swMgmtService.findSoftwareModuleTypeByName(type)); boolean duplicate = false; if (swModule != null) { duplicate = true; From bd974ef6ab69d088f531bb380862551fb6e598b1 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 2 Apr 2016 13:29:40 +0200 Subject: [PATCH 063/344] Prepared cloud deployment of hawkbit sandbox --- .../hawkbit-device-simulator/cf/manifest.yml | 21 ++++++++++++++++ examples/hawkbit-device-simulator/pom.xml | 10 ++++++++ .../simulator/DeviceSimulatorUpdater.java | 12 ++++++++- .../simulator/amqp/AmqpConfiguration.java | 5 ++-- .../simulator/amqp/SpReceiverService.java | 18 ++----------- .../src/main/resources/application.properties | 6 +---- examples/hawkbit-example-app/README.md | 25 +++++++++++++++---- .../cf/manifest-simple.yml | 19 ++++++++++++++ examples/hawkbit-example-app/cf/manifest.yml | 21 ++++++++++++++++ examples/hawkbit-example-app/pom.xml | 11 ++++++++ .../application-cloudsandbox.properties | 11 ++++++++ 11 files changed, 130 insertions(+), 29 deletions(-) create mode 100644 examples/hawkbit-device-simulator/cf/manifest.yml create mode 100644 examples/hawkbit-example-app/cf/manifest-simple.yml create mode 100644 examples/hawkbit-example-app/cf/manifest.yml create mode 100644 examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties diff --git a/examples/hawkbit-device-simulator/cf/manifest.yml b/examples/hawkbit-device-simulator/cf/manifest.yml new file mode 100644 index 000000000..8a65690fe --- /dev/null +++ b/examples/hawkbit-device-simulator/cf/manifest.yml @@ -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 +# +--- +applications: +- name: hawkbit-simulator + memory: 512M + instances: 1 + buildpack: https://github.com/cloudfoundry/java-buildpack + path: hawkbit-example-app-0.2.0-SNAPSHOT.jar + services: + - dmf-rabbit + env: + SPRING_PROFILES_ACTIVE: cloudsandbox,amqp + CF_STAGING_TIMEOUT: 15 + CF_STARTUP_TIMEOUT: 15 diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index a2575e9db..5ee781e34 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -42,6 +42,16 @@ + + + cf + true + ${project.build.directory} + + manifest.yml + + + 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 b8b5011aa..afc3a2569 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 @@ -14,6 +14,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; import org.eclipse.hawkbit.simulator.amqp.SpSenderService; import org.eclipse.hawkbit.simulator.event.InitUpdate; import org.eclipse.hawkbit.simulator.event.ProgressUpdate; @@ -34,6 +35,9 @@ public class DeviceSimulatorUpdater { @Autowired private SpSenderService spSenderService; + @Autowired + private SimulatedDeviceFactory deviceFactory; + @Autowired private EventBus eventbus; @@ -58,7 +62,13 @@ public class DeviceSimulatorUpdater { */ public void startUpdate(final String tenant, final String id, final long actionId, final String swVersion, final UpdaterCallback callback) { - final AbstractSimulatedDevice device = repository.get(tenant, id); + AbstractSimulatedDevice device = repository.get(tenant, id); + + // 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.setProgress(0.0); device.setSwversion(swVersion); eventbus.post(new InitUpdate(device)); 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 492bb3857..bf5d723a8 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 @@ -59,7 +59,8 @@ public class AmqpConfiguration { } /** - * Create the receiver queue from sp. Receive messages from sp. + * Creates the receiver queue from update server for receiving message from + * update server. * * @return the queue */ @@ -70,7 +71,7 @@ public class AmqpConfiguration { } /** - * Create the recevier exchange. Sp send messages to this exchange. + * Creates the receiver exchange for sending messages to update server. * * @return the exchange */ 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 1c314d56f..9f7e4d9ca 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 @@ -26,9 +26,7 @@ import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; /** - * Handle all incoming Messages from SP. - * - * + * Handle all incoming Messages from hawkBit update server. * */ @Component @@ -44,17 +42,6 @@ public class SpReceiverService extends ReceiverService { /** * Constructor. - * - * @param rabbitTemplate - * the rabbit template - * @param amqpProperties - * the amqp properties - * @param lwm2mSenderService - * the lwm2mSenderService - * @param spSenderService - * the spSenderService - * @param deviceUpdater - * the updater service to simulate update process */ @Autowired public SpReceiverService(final RabbitTemplate rabbitTemplate, final AmqpProperties amqpProperties, @@ -62,12 +49,11 @@ public class SpReceiverService extends ReceiverService { super(rabbitTemplate, amqpProperties); this.spSenderService = spSenderService; this.deviceUpdater = deviceUpdater; - } /** * Handle the incoming Message from Queue with the property - * (com.bosch.sp.lwm2m.connector.amqp.receiverConnectorQueueFromSp). + * (hawkbit.device.simulator.amqp.receiverConnectorQueueFromSp). * * @param message * the incoming message diff --git a/examples/hawkbit-device-simulator/src/main/resources/application.properties b/examples/hawkbit-device-simulator/src/main/resources/application.properties index 56d0190a7..cdc72ba28 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-device-simulator/src/main/resources/application.properties @@ -7,11 +7,7 @@ # http://www.eclipse.org/legal/epl-v10.html # - -######################################################################################### -# PUBLIC configuration, i.e. can be changed by users at runtime (defaults provided here) -######################################################################################### -## Configuration for RabbitMQ communication +## Configuration for DMF communication hawkbit.device.simulator.amqp.receiverConnectorQueueFromSp=simulator_receiver hawkbit.device.simulator.amqp.deadLetterQueue=simulator_deadletter hawkbit.device.simulator.amqp.deadLetterExchange=simulator.deadletter diff --git a/examples/hawkbit-example-app/README.md b/examples/hawkbit-example-app/README.md index eaf30f306..4efbdb8ed 100644 --- a/examples/hawkbit-example-app/README.md +++ b/examples/hawkbit-example-app/README.md @@ -1,7 +1,15 @@ # hawkBit Example Application -The hawkBit example application is a standalone spring-boot application with an embedded servlet container to start the hawkBit. +The hawkBit example application is a standalone spring-boot application with an embedded servlet container to host the hawkBit Update Server. -## Run +We have have described several options for you to get access to the example. + +## Try out the example application in our hawkBit sandbox on Bluemix +- try out Management UI https://hawkbit.eu-gb.mybluemix.net/UI +- try out Management API https://hawkbit.eu-gb.mybluemix.net/rest/v1/targets (don't forget basic auth header) +- try out DDI API https://hawkbit.eu-gb.mybluemix.net/DEFAULT/controller/v1/MYTESTDEVICE + +## On your own workstation +### Run ``` java -jar examples/hawkbit-example-app/target/hawkbit-example-app-*-SNAPSHOT.jar ``` @@ -10,6 +18,13 @@ Or: run org eclipse.hawkbit.app.Start ``` -## Usage -The UI can be accessed via _http://localhost:8080/UI_. -The REST API can be accessed via _http://localhost:8080/rest/v1_. +### Usage +The Management UI can be accessed via http://localhost:8080/UI +The Management API can be accessed via http://localhost:8080/rest/v1 + +## Deploy example app to Cloud Foundry + +- Go to ```cf``` subfolder. +- Select one of the two manifests + - **manifest-simple.yml** for a standalone hawkBit installation with embedded H2. + - **manifest.yml** for a standalone hawkBit installation with embedded H2 and RabbitMQ service binding for DMF integration (note: this manifest is used for the sandbox above). diff --git a/examples/hawkbit-example-app/cf/manifest-simple.yml b/examples/hawkbit-example-app/cf/manifest-simple.yml new file mode 100644 index 000000000..4d4a798ef --- /dev/null +++ b/examples/hawkbit-example-app/cf/manifest-simple.yml @@ -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 +# +--- +applications: +- name: hawkbit-simple + memory: 1024M + instances: 1 + buildpack: https://github.com/cloudfoundry/java-buildpack + path: ${project.build.finalName}.jar + env: + SPRING_PROFILES_ACTIVE: cloudsandbox + CF_STAGING_TIMEOUT: 15 + CF_STARTUP_TIMEOUT: 15 diff --git a/examples/hawkbit-example-app/cf/manifest.yml b/examples/hawkbit-example-app/cf/manifest.yml new file mode 100644 index 000000000..278f43681 --- /dev/null +++ b/examples/hawkbit-example-app/cf/manifest.yml @@ -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 +# +--- +applications: +- name: hawkbit + memory: 1024M + instances: 1 + buildpack: https://github.com/cloudfoundry/java-buildpack + path: ${project.build.finalName}.jar + services: + - dmf-rabbit + env: + SPRING_PROFILES_ACTIVE: cloudsandbox,amqp + CF_STAGING_TIMEOUT: 15 + CF_STARTUP_TIMEOUT: 15 diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index 33624ffd7..e9f57ad54 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -39,6 +39,17 @@ + + + cf + true + ${project.build.directory} + + manifest.yml + manifest-simple.yml + + + diff --git a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties new file mode 100644 index 000000000..d54e1d6a2 --- /dev/null +++ b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties @@ -0,0 +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 +# + +spring.profiles.active= +vaadin.servlet.productionMode=true From 6d143273f76d903334b0e358952ef7a1a392b38c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 2 Apr 2016 21:00:34 +0200 Subject: [PATCH 064/344] Added simulator autostart and cf deployment. --- examples/hawkbit-device-simulator/README.md | 15 +- .../hawkbit-device-simulator/cf/manifest.yml | 6 +- .../simulator/SimulationController.java | 4 +- .../simulator/SimulationProperties.java | 136 ++++++++++++++++++ .../hawkbit/simulator/SimulatorStartup.java | 51 +++++++ .../simulator/amqp/AmqpProperties.java | 9 +- .../simulator/amqp/SpReceiverService.java | 1 - .../src/main/resources/application.properties | 5 +- examples/hawkbit-example-app/README.md | 3 +- .../application-cloudsandbox.properties | 1 - 10 files changed, 212 insertions(+), 19 deletions(-) create mode 100644 examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationProperties.java create mode 100644 examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatorStartup.java diff --git a/examples/hawkbit-device-simulator/README.md b/examples/hawkbit-device-simulator/README.md index 869f80511..1ba29bb7e 100644 --- a/examples/hawkbit-device-simulator/README.md +++ b/examples/hawkbit-device-simulator/README.md @@ -2,7 +2,7 @@ The device simulator handles software update commands from the update server. -## Run +## Run on your own workstation ``` java -jar examples/hawkbit-device-simulator/target/hawkbit-device-simulator-*-SNAPSHOT.jar ``` @@ -11,6 +11,11 @@ Or: run org.eclipse.hawkbit.simulator.DeviceSimulator ``` +## Deploy to cloud foundry environment + +- Go to ```target``` subfolder. +- Run ```cf push``` + ## Notes The simulator has user authentication enabled in **cloud profile**. Default credentials: @@ -30,9 +35,9 @@ http://localhost:8083 ``` ![](src/main/images/generateScreenshot.png) - + ![](src/main/images/updateProcessScreenshot.png) - + ![](src/main/images/updateResultOverviewScreenshot.png) @@ -54,12 +59,12 @@ Example: for 20 simulated devices (default) http://localhost:8083/start ``` -Example: for 10 simulated devices that start with the name prefix "activeSim": +Example: for 10 simulated devices that start with the name prefix "activeSim": ``` http://localhost:8083/start?amount=10&name=activeSim ``` -Example: for 5 simulated devices that start with the name prefix "ddi" using the Direct Device Integration API (http): +Example: for 5 simulated devices that start with the name prefix "ddi" using the Direct Device Integration API (http): ``` http://localhost:8083/start?amount=5&name=ddi?api=ddi ``` diff --git a/examples/hawkbit-device-simulator/cf/manifest.yml b/examples/hawkbit-device-simulator/cf/manifest.yml index 8a65690fe..df69f92e3 100644 --- a/examples/hawkbit-device-simulator/cf/manifest.yml +++ b/examples/hawkbit-device-simulator/cf/manifest.yml @@ -9,13 +9,13 @@ --- applications: - name: hawkbit-simulator - memory: 512M + memory: 1024M instances: 1 buildpack: https://github.com/cloudfoundry/java-buildpack - path: hawkbit-example-app-0.2.0-SNAPSHOT.jar + path: ${project.build.finalName}.jar services: - dmf-rabbit env: - SPRING_PROFILES_ACTIVE: cloudsandbox,amqp + SPRING_PROFILES_ACTIVE: cloud,amqp CF_STAGING_TIMEOUT: 15 CF_STARTUP_TIMEOUT: 15 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 c1f358d89..426860d8b 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 @@ -55,7 +55,7 @@ public class SimulationController { * number of delay in milliseconds to delay polling of DDI * devices * @param gatewayToken - * the hawkbit-update-server gatwaytoken in case authentication + * the hawkbit-update-server gatewaytoken in case authentication * is enforced in hawkbit * @return a response string that devices has been created * @throws MalformedURLException @@ -68,7 +68,7 @@ public class SimulationController { @RequestParam(value = "endpoint", defaultValue = "http://localhost:8080") final String endpoint, @RequestParam(value = "polldelay", defaultValue = "30") final int pollDelay, @RequestParam(value = "gatewaytoken", defaultValue = "") final String gatewayToken) - throws MalformedURLException { + throws MalformedURLException { final Protocol protocol; switch (api.toLowerCase()) { 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 new file mode 100644 index 000000000..354263934 --- /dev/null +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationProperties.java @@ -0,0 +1,136 @@ +/** + * 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.simulator; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; +import org.hibernate.validator.constraints.NotEmpty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * General simulator service properties. + * + */ +@Component +@ConfigurationProperties("hawkbit.device.simulator") +public class SimulationProperties { + + /** + * List of tenants where the simulator should auto start simulations after + * startup. + */ + private final List autostarts = new ArrayList<>(); + + public List getAutostarts() { + return this.autostarts; + } + + /** + * Auto start configuration for simulation setups that the simulator begins + * after startup. + * + */ + public static class Autostart { + /** + * Name prefix of simulated devices, followed by counter, e.g. + * simulated0, simulated1, simulated2.... + */ + private String name = "simulated"; + + /** + * Amount of simulated devices. + */ + private int amount = 20; + + /** + * Tenant name for the simulation. + */ + @NotEmpty + private String tenant; + + /** + * API for simulation. + */ + private Protocol api = Protocol.DMF_AMQP; + + /** + * Endpoint in case of DDI API based simulation. + */ + private String endpoint = "http://localhost:8080"; + + /** + * Poll time in case of DDI API based simulation. + */ + private int pollDelay = 30; + + /** + * Optional gateway token for DDI API based simulation. + */ + private String gatewayToken = ""; + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public int getAmount() { + return amount; + } + + public void setAmount(final int amount) { + this.amount = amount; + } + + public String getTenant() { + return tenant; + } + + public void setTenant(final String tenant) { + this.tenant = tenant; + } + + public Protocol getApi() { + return api; + } + + public void setApi(final Protocol api) { + this.api = api; + } + + public String getEndpoint() { + return endpoint; + } + + public void setEndpoint(final String endpoint) { + this.endpoint = endpoint; + } + + public int getPollDelay() { + return pollDelay; + } + + public void setPollDelay(final int pollDelay) { + this.pollDelay = pollDelay; + } + + public String getGatewayToken() { + return gatewayToken; + } + + public void setGatewayToken(final String gatewayToken) { + this.gatewayToken = gatewayToken; + } + } +} 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 new file mode 100644 index 000000000..c0e22a994 --- /dev/null +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulatorStartup.java @@ -0,0 +1,51 @@ +package org.eclipse.hawkbit.simulator; + +import java.net.URL; + +import org.eclipse.hawkbit.simulator.amqp.SpSenderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +/** + * Execution of operations after startup. Set up of simulations. + * + */ +@Component +public class SimulatorStartup implements ApplicationListener { + private static final Logger LOGGER = LoggerFactory.getLogger(SimulatorStartup.class); + + @Autowired + private SimulationProperties simulationProperties; + + @Autowired + private SpSenderService spSenderService; + + @Autowired + private DeviceSimulatorRepository repository; + + @Autowired + private SimulatedDeviceFactory deviceFactory; + + @Override + public void onApplicationEvent(final ContextRefreshedEvent event) { + simulationProperties.getAutostarts().forEach(autostart -> { + for (int i = 0; i < autostart.getAmount(); i++) { + final String deviceId = autostart.getName() + i; + try { + repository.add(deviceFactory.createSimulatedDevice(deviceId, autostart.getTenant(), + autostart.getApi(), autostart.getPollDelay(), new URL(autostart.getEndpoint()), + autostart.getGatewayToken())); + } catch (final Exception e) { + LOGGER.error("Creation of simulated device at startup failed.", e); + } + + spSenderService.createOrUpdateThing(autostart.getTenant(), deviceId); + } + }); + } + +} diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java index f9e6ab23d..f58355980 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java @@ -19,26 +19,25 @@ import org.springframework.stereotype.Component; @Component @ConfigurationProperties("hawkbit.device.simulator.amqp") public class AmqpProperties { - /** * Queue for receiving DMF messages from update server. */ - private String receiverConnectorQueueFromSp; + private String receiverConnectorQueueFromSp = "simulator_receiver"; /** * Exchange for sending DMF messages to update server. */ - private String senderForSpExchange; + private String senderForSpExchange = "simulator.replyTo"; /** * Simulator dead letter queue. */ - private String deadLetterQueue; + private String deadLetterQueue = "simulator_deadletter"; /** * Simulator dead letter exchange. */ - private String deadLetterExchange; + private String deadLetterExchange = "simulator.deadletter"; public String getReceiverConnectorQueueFromSp() { return receiverConnectorQueueFromSp; 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 9f7e4d9ca..f22839422 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 @@ -31,7 +31,6 @@ import org.springframework.stereotype.Component; */ @Component public class SpReceiverService extends ReceiverService { - private static final Logger LOGGER = LoggerFactory.getLogger(ReceiverService.class); public static final String SOFTWARE_MODULE_FIRMWARE = "firmware"; diff --git a/examples/hawkbit-device-simulator/src/main/resources/application.properties b/examples/hawkbit-device-simulator/src/main/resources/application.properties index cdc72ba28..fbe7261be 100644 --- a/examples/hawkbit-device-simulator/src/main/resources/application.properties +++ b/examples/hawkbit-device-simulator/src/main/resources/application.properties @@ -13,8 +13,11 @@ hawkbit.device.simulator.amqp.deadLetterQueue=simulator_deadletter hawkbit.device.simulator.amqp.deadLetterExchange=simulator.deadletter hawkbit.device.simulator.amqp.senderForSpExchange=simulator.replyTo +## Configuration for simulations +hawkbit.device.simulator.autostarts.[0].tenant=DEFAULT -## Configuration for RabbitMQ integration + +## Configuration for local RabbitMQ integration spring.rabbitmq.username=guest spring.rabbitmq.password=guest spring.rabbitmq.virtualHost=/ diff --git a/examples/hawkbit-example-app/README.md b/examples/hawkbit-example-app/README.md index 4efbdb8ed..ecbec93c3 100644 --- a/examples/hawkbit-example-app/README.md +++ b/examples/hawkbit-example-app/README.md @@ -24,7 +24,8 @@ The Management API can be accessed via http://localhost:8080/rest/v1 ## Deploy example app to Cloud Foundry -- Go to ```cf``` subfolder. +- Go to ```target``` subfolder. - Select one of the two manifests - **manifest-simple.yml** for a standalone hawkBit installation with embedded H2. - **manifest.yml** for a standalone hawkBit installation with embedded H2 and RabbitMQ service binding for DMF integration (note: this manifest is used for the sandbox above). +- Run ```cf push``` against you cloud foundry environment. diff --git a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties index d54e1d6a2..ecf71da41 100644 --- a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties +++ b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties @@ -7,5 +7,4 @@ # http://www.eclipse.org/legal/epl-v10.html # -spring.profiles.active= vaadin.servlet.productionMode=true From 171dc461071f37ffb9414e2ce69d9d73416f7f9a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 2 Apr 2016 21:14:41 +0200 Subject: [PATCH 065/344] Fixed problem that client works only with localhost. --- .../mgmt/client/resource/DistributionSetResourceClient.java | 2 +- .../client/resource/DistributionSetTagResourceClient.java | 2 +- .../client/resource/DistributionSetTypeResourceClient.java | 2 +- .../hawkbit/mgmt/client/resource/RolloutResourceClient.java | 2 +- .../mgmt/client/resource/SoftwareModuleResourceClient.java | 2 +- .../client/resource/SoftwareModuleTypeResourceClient.java | 2 +- .../hawkbit/mgmt/client/resource/TargetResourceClient.java | 2 +- .../hawkbit/mgmt/client/resource/TargetTagResourceClient.java | 2 +- .../mgmt/client/resource/builder/DistributionSetBuilder.java | 4 ---- .../client/resource/builder/DistributionSetTypeBuilder.java | 2 -- .../hawkbit/mgmt/client/resource/builder/RolloutBuilder.java | 2 -- .../resource/builder/SoftwareModuleAssigmentBuilder.java | 2 -- .../mgmt/client/resource/builder/SoftwareModuleBuilder.java | 2 -- .../client/resource/builder/SoftwareModuleTypeBuilder.java | 2 -- .../hawkbit/mgmt/client/resource/builder/TagBuilder.java | 2 -- .../hawkbit/mgmt/client/resource/builder/TargetBuilder.java | 2 -- .../mgmt/client/scenarios/CreateStartedRolloutExample.java | 2 +- .../mgmt/client/scenarios/GettingStartedDefaultScenario.java | 4 ++-- 18 files changed, 11 insertions(+), 29 deletions(-) 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 00a9b3fba..5ac11e012 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSet resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/distributionsets") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsets") public interface DistributionSetResourceClient extends DistributionSetRestApi { } 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 ea9f5d28a..5fbdaf857 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the DistributionSetTag resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/distributionsettags") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsettags") public interface DistributionSetTagResourceClient extends DistributionSetTagRestApi { } 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 08d40dfa5..300f8ddcb 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 @@ -15,7 +15,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; * Client binding for the DistributionSetType resource of the management API. * */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/distributionsettypes") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/distributionsettypes") public interface DistributionSetTypeResourceClient extends DistributionSetTypeRestApi { } 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 78b7413e7..aed3af7a2 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Rollout resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/rollouts") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/rollouts") public interface RolloutResourceClient extends RolloutRestApi { } 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 88e664d78..8610643ef 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the SoftwareModule resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/softwaremodules") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremodules") public interface SoftwareModuleResourceClient extends SoftwareModuleRestAPI { } 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 4896cb8d8..46410dd6c 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the oftwareModuleType resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/softwaremoduletypes") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/softwaremoduletypes") public interface SoftwareModuleTypeResourceClient extends SoftwareModuleTypeRestApi { } 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 a82aa5443..79385fea4 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the Target resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/targets") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/targets") public interface TargetResourceClient extends TargetRestApi { } 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 fee30c686..930931a87 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 @@ -14,7 +14,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; /** * Client binding for the TargetTag resource of the management API. */ -@FeignClient(url = "${hawkbit.endpoint.url:localhost:8080}/rest/v1/targettags") +@FeignClient(url = "${hawkbit.url:localhost:8080}/rest/v1/targettags") public interface TargetTagResourceClient extends TargetTagRestApi { } 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 c821b106c..358cff0db 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 @@ -16,11 +16,7 @@ import org.eclipse.hawkbit.rest.resource.model.distributionset.DistributionSetRe import com.google.common.collect.Lists; /** - * * Builder pattern for building {@link DistributionSetRequestBodyPost}. - * - * @author Jonathan Knoblauch - * */ public class DistributionSetBuilder { 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 e1da1f048..752834c7d 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 @@ -19,8 +19,6 @@ import com.google.common.collect.Lists; /** * * Builder pattern for building {@link DistributionSetTypeRequestBodyPost}. - * - * @author Jonathan Knoblauch * */ public class DistributionSetTypeBuilder { 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 bea0fd9a4..2e01e0ba2 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 @@ -15,8 +15,6 @@ import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutRestRequestBody; /** * * Builder pattern for building {@link RolloutRestRequestBody}. - * - * @author Jonathan Knoblauch * */ public class RolloutBuilder { 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 b209dbe8b..8d69db619 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 @@ -16,8 +16,6 @@ import org.eclipse.hawkbit.rest.resource.model.softwaremodule.SoftwareModuleAssi /** * * Builder pattern for building {@link SoftwareModuleAssigmentRest}. - * - * @author Jonathan Knoblauch * */ public class SoftwareModuleAssigmentBuilder { 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 30b85d901..4bbfd92b4 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 @@ -19,8 +19,6 @@ import com.google.common.collect.Lists; /** * * Builder pattern for building {@link SoftwareModuleRequestBodyPost}. - * - * @author Jonathan Knoblauch * */ public class SoftwareModuleBuilder { 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 ce128d592..a6472f0a0 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 @@ -19,8 +19,6 @@ import com.google.common.collect.Lists; /** * * Builder pattern for building {@link SoftwareModuleRequestBodyPost}. - * - * @author Jonathan Knoblauch * */ public class SoftwareModuleTypeBuilder { 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 f3888de54..6f2eb3248 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 @@ -17,8 +17,6 @@ import com.google.common.collect.Lists; /** * Builder pattern for building {@link TagRequestBodyPut}. - * - * @author Jonathan Knoblauch * */ public class TagBuilder { 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 5123903d9..e496407e1 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 @@ -19,8 +19,6 @@ import com.google.common.collect.Lists; /** * * Builder pattern for building {@link TargetRequestBody}. - * - * @author Jonathan Knoblauch * */ public class TargetBuilder { 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 e92f81326..cd74c0474 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 @@ -41,7 +41,7 @@ public class CreateStartedRolloutExample { private static final String SM_MODULE_TYPE = "firmware"; /* known distribution set type name and key */ - private static final String DS_MODULE_TYPE = "firmware"; + private static final String DS_MODULE_TYPE = SM_MODULE_TYPE; @Autowired private DistributionSetResourceClient distributionSetResource; 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 d17048dea..5873403f0 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 @@ -41,13 +41,13 @@ public class GettingStartedDefaultScenario { private static final String SM_MODULE_TYPE = "gettingstarted"; /* known distribution set type name and key */ - private static final String DS_MODULE_TYPE = "gettingstarted"; + 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 = "gettingstarted-example"; + private static final String DS_EXAMPLE_NAME = SM_EXAMPLE_NAME; @Autowired private DistributionSetResourceClient distributionSetResource; From 4b95ebc75d92899a2500258855702ac4c01314d5 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 2 Apr 2016 21:36:06 +0200 Subject: [PATCH 066/344] Skript for sandbox setup --- deployHawkBitSandbox.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 deployHawkBitSandbox.sh diff --git a/deployHawkBitSandbox.sh b/deployHawkBitSandbox.sh new file mode 100644 index 000000000..ac2498e2b --- /dev/null +++ b/deployHawkBitSandbox.sh @@ -0,0 +1,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 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + +# This script allows the deployment of the complete hawkBit sandbox including +# data example to a cloud foundry enviroment. Expects existing CF CLI +# installation and login to be existing already. + +cd examples/hawkbit-example-app/target/ +cf push +cd ../.. +java -jar hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-0.2.0-SNAPSHOT.jar -Dhawkbit.url=hawkbit.eu-gb.mybluemix.net +cd hawkbit-device-simulator/target/ +cf push +cd ../../.. From 36e8949febdd8e538be5de1dcba85052c04bc2cc Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 2 Apr 2016 22:13:21 +0200 Subject: [PATCH 067/344] Fixed final bugs. Sandbox works now. --- deployHawkBitSandbox.sh | 2 +- examples/hawkbit-device-simulator/pom.xml | 3 +++ examples/hawkbit-example-app/pom.xml | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/deployHawkBitSandbox.sh b/deployHawkBitSandbox.sh index ac2498e2b..d774f4205 100644 --- a/deployHawkBitSandbox.sh +++ b/deployHawkBitSandbox.sh @@ -14,7 +14,7 @@ cd examples/hawkbit-example-app/target/ cf push cd ../.. -java -jar hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-0.2.0-SNAPSHOT.jar -Dhawkbit.url=hawkbit.eu-gb.mybluemix.net +java -jar hawkbit-mgmt-api-client/target/hawkbit-mgmt-api-client-0.2.0-SNAPSHOT.jar --hawkbit.url=hawkbit.eu-gb.mybluemix.net cd hawkbit-device-simulator/target/ cf push cd ../../.. diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index 5ee781e34..a23051124 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -43,6 +43,9 @@ + + src/main/resources + cf true diff --git a/examples/hawkbit-example-app/pom.xml b/examples/hawkbit-example-app/pom.xml index e9f57ad54..a5c0f864d 100644 --- a/examples/hawkbit-example-app/pom.xml +++ b/examples/hawkbit-example-app/pom.xml @@ -40,6 +40,9 @@ + + src/main/resources + cf true From 19e628aac9e21d8b534bbe855af61b5f46ae9c7f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Sat, 2 Apr 2016 22:18:04 +0200 Subject: [PATCH 068/344] Added sandbox chapter --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index fb649633b..461e12e81 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,11 @@ see [hawkBit Wiki](https://github.com/eclipse/hawkbit/wiki) * Having issues with hawkBit? Open a [GitHub issue](https://github.com/eclipse/hawkbit/issues). * You can also check out our [Project Homepage](https://projects.eclipse.org/projects/iot.hawkbit) for further contact options. +# hawkBit sandbox + +We offer a sandbox installation that is free for everyone to try out hawkBit. However, keep in mind that the sandbox database will be reset from time to time. It is also not possible to upload any artifacts into the sandbox. But you can use it to try out the Management UI, Management API and DDI API. + +https://hawkbit.eu-gb.mybluemix.net/UI/ # Compile, Run and Getting Started From f4bd947cbd521856f5a92c8836755a8066b60bd0 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 4 Apr 2016 08:03:42 +0200 Subject: [PATCH 069/344] remove unused parameter Signed-off-by: Michael Hirsch --- .../hawkbit/controller/DataConversionHelper.java | 12 +++++------- .../eclipse/hawkbit/controller/RootController.java | 10 ++++------ 2 files changed, 9 insertions(+), 13 deletions(-) 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 03623abdd..e035c47ee 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 @@ -49,11 +49,11 @@ public final class DataConversionHelper { } - static List createChunks(final String targetid, final Action uAction, final TenantAware tenantAware, + 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(), - module.getName(), createArtifacts(targetid, module, tenantAware, artifactUrlHandler))) + module.getName(), createArtifacts(targetid, module, artifactUrlHandler))) .collect(Collectors.toList()); } @@ -76,12 +76,10 @@ public final class DataConversionHelper { * of the target * @param module * the software module - * @param tenantAware - * of the tenant * @return a list of artifacts or a empty list. Cannot be . */ public static List createArtifacts(final String targetid, - final org.eclipse.hawkbit.repository.model.SoftwareModule module, final TenantAware tenantAware, + final org.eclipse.hawkbit.repository.model.SoftwareModule module, final ArtifactUrlHandler artifactUrlHandler) { final List files = new ArrayList<>(); module.getLocalArtifacts().forEach(artifact -> { @@ -94,9 +92,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 + ".MD5SUM").withRel("md5sum")); + file.add(new Link(linkHttps + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum")); file.add(new Link(linkHttp).withRel("download-http")); - file.add(new Link(linkHttp + ".MD5SUM").withRel("md5sum-http")); + file.add(new Link(linkHttp + ControllerConstants.ARTIFACT_MD5_DWNL_SUFFIX).withRel("md5sum-http")); files.add(file); }); 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 0a668338c..358448dfd 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 @@ -90,10 +90,10 @@ public class RootController { private CacheWriteNotify cacheWriteNotify; @Autowired - private TenantAware tenantAware; + private HawkbitSecurityProperties securityProperties; @Autowired - private HawkbitSecurityProperties securityProperties; + private TenantAware tenantAware; @Autowired private ArtifactUrlHandler artifactUrlHandler; @@ -122,8 +122,7 @@ public class RootController { } - return new ResponseEntity<>( - DataConversionHelper.createArtifacts(targetid, softwareModule, tenantAware, artifactUrlHandler), + return new ResponseEntity<>(DataConversionHelper.createArtifacts(targetid, softwareModule, artifactUrlHandler), HttpStatus.OK); } @@ -312,8 +311,7 @@ public class RootController { if (!action.isCancelingOrCanceled()) { - final List chunks = DataConversionHelper.createChunks(targetid, action, tenantAware, - artifactUrlHandler); + final List chunks = DataConversionHelper.createChunks(targetid, action, artifactUrlHandler); final HandlingType handlingType = action.isForce() ? HandlingType.FORCED : HandlingType.ATTEMPT; From 5c661cd6a49b608cf43415b5401904dffdfa1695 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 4 Apr 2016 08:58:58 +0200 Subject: [PATCH 070/344] Added license header --- examples/hawkbit-device-simulator/cf/manifest.yml | 1 + .../org/eclipse/hawkbit/simulator/SimulatorStartup.java | 8 ++++++++ examples/hawkbit-example-app/cf/manifest-simple.yml | 1 + examples/hawkbit-example-app/cf/manifest.yml | 1 + 4 files changed, 11 insertions(+) diff --git a/examples/hawkbit-device-simulator/cf/manifest.yml b/examples/hawkbit-device-simulator/cf/manifest.yml index df69f92e3..51a43ace6 100644 --- a/examples/hawkbit-device-simulator/cf/manifest.yml +++ b/examples/hawkbit-device-simulator/cf/manifest.yml @@ -6,6 +6,7 @@ # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # + --- applications: - name: hawkbit-simulator 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 c0e22a994..faff1cc6c 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 @@ -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.simulator; import java.net.URL; diff --git a/examples/hawkbit-example-app/cf/manifest-simple.yml b/examples/hawkbit-example-app/cf/manifest-simple.yml index 4d4a798ef..c87a533f4 100644 --- a/examples/hawkbit-example-app/cf/manifest-simple.yml +++ b/examples/hawkbit-example-app/cf/manifest-simple.yml @@ -6,6 +6,7 @@ # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # + --- applications: - name: hawkbit-simple diff --git a/examples/hawkbit-example-app/cf/manifest.yml b/examples/hawkbit-example-app/cf/manifest.yml index 278f43681..2145f467d 100644 --- a/examples/hawkbit-example-app/cf/manifest.yml +++ b/examples/hawkbit-example-app/cf/manifest.yml @@ -6,6 +6,7 @@ # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # + --- applications: - name: hawkbit From fd3d854bf8f18ab72df903cd96f920b0ca86e4ef Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 4 Apr 2016 10:31:05 +0200 Subject: [PATCH 071/344] Reseted changes because a bigger refactoring is necessary Signed-off-by: Jonathan Philip Knoblauch --- .../ui/tenantconfiguration/polling/DurationConfigField.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hawkbit-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 index e1569db02..15f51877d 100644 --- a/hawkbit-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 @@ -70,16 +70,16 @@ public class DurationConfigField extends GridLayout implements ConfigurationItem * @param globalDuration * duration value which is stored in the global configuration */ - protected void init(final Duration globalDuration, final Duration tenantDuration) { + private void init(final Duration globalDuration, final Duration tenantDuration) { this.globalDuration = globalDuration; this.setValue(tenantDuration); } - protected void setCheckBoxTooltip(final String label) { + private void setCheckBoxTooltip(final String label) { checkBox.setDescription(label); } - protected void setAllowedRange(final Duration minimumDuration, final Duration maximumDuration) { + private void setAllowedRange(final Duration minimumDuration, final Duration maximumDuration) { durationField.setMinimumDuration(minimumDuration); durationField.setMaximumDuration(maximumDuration); } From 84f543382c0e8a3cd15a43b71ac856d96bb1d052 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 4 Apr 2016 10:48:14 +0200 Subject: [PATCH 072/344] Updated javadoc for the getURl method Signed-off-by: Jonathan Philip Knoblauch --- .../org/eclipse/hawkbit/api/ArtifactUrlHandler.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java index a80551f9e..522444961 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java @@ -17,15 +17,20 @@ package org.eclipse.hawkbit.api; public interface ArtifactUrlHandler { /** - * Returns a generated URL for a given artifact for a specific protocol. + * Returns a generated download URL for a given artifact parameters for a + * specific protocol. * * @param controllerId * the authenticated controller id - * @param localArtifact - * the artifact to retrieve a URL to + * @param softwareModuleId + * the softwareModuleId belonging to the artifact + * @param filename + * the filename of the artifact + * @param sha1Hash + * the sha1Hash of the artifact * @param protocol * the protocol the URL should be generated - * @return an URL for the given artifact in a given protocol + * @return an URL for the given artifact parameters in a given protocol */ String getUrl(String controllerId, final Long softwareModuleId, final String filename, final String sha1Hash, final UrlProtocol protocol); From a98f91f05e5f067000545ddc414e9a7d9d97e8aa Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 4 Apr 2016 12:54:30 +0200 Subject: [PATCH 073/344] Fixed typos --- examples/hawkbit-mgmt-api-client/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/hawkbit-mgmt-api-client/README.md b/examples/hawkbit-mgmt-api-client/README.md index eff301e20..ac8e7a4cd 100644 --- a/examples/hawkbit-mgmt-api-client/README.md +++ b/examples/hawkbit-mgmt-api-client/README.md @@ -1,4 +1,4 @@ -# HawkBit management API example +# hawkBit Management API example client Example client that shows how to efficiently use the hawkBit management API. @@ -36,4 +36,3 @@ In rollout mode: * assigning software modules to distribution sets * creating a rollout * starting a rollout - From 044f0bef037361f998c15c2a2724b7d0a9257923 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 4 Apr 2016 12:59:45 +0200 Subject: [PATCH 074/344] Reduce some duplicate code Signed-off-by: SirWayne --- .../DistributionSetAssignmentResult.java | 13 +- .../repository/model/AssignmentResult.java | 42 ++++- .../DistributionSetTagAssignmentResult.java | 21 +-- .../model/TargetTagAssignmentResult.java | 22 +-- .../repository/ControllerManagementTest.java | 4 +- .../repository/DeploymentManagementTest.java | 14 +- .../DistributionSetManagementTest.java | 6 +- .../hawkbit/repository/TagManagementTest.java | 24 +-- .../TargetManagementSearchTest.java | 14 +- .../utils/RepositoryDataGenerator.java | 134 ++++++-------- .../resource/DistributionSetTagResource.java | 4 +- .../hawkbit/rest/resource/TargetResource.java | 2 +- .../rest/resource/TargetTagResource.java | 4 +- .../controller/DeploymentBaseTest.java | 14 +- .../controller/RootControllerTest.java | 2 +- .../rest/resource/TargetResourceTest.java | 2 +- .../event/UploadViewAcceptCriteria.java | 35 ---- .../footer/SMDeleteActionsLayout.java | 50 ----- .../smtable/SoftwareModuleDetails.java | 75 +------- .../smtable/SoftwareModuleTableHeader.java | 33 ---- .../artifacts/smtype/SMTypeFilterButtons.java | 24 --- .../artifacts/smtype/SMTypeFilterHeader.java | 10 +- .../ui/common/AbstractAcceptCriteria.java | 39 ++-- .../AbstractTableDetailsLayout.java | 26 +++ .../filterlayout/AbstractFilterButtons.java | 22 ++- .../filterlayout/AbstractFilterHeader.java | 10 + .../footer/AbstractDeleteActionsLayout.java | 49 ++++- .../hawkbit/ui/common/grid/AbstractGrid.java | 24 ++- .../ui/common/table/AbstractTableHeader.java | 24 +++ .../tagdetails/DistributionTagToken.java | 6 +- .../ui/common/tagdetails/TargetTagToken.java | 6 +- .../disttype/DSTypeFilterButtons.java | 24 --- .../disttype/DSTypeFilterHeader.java | 11 +- .../dstable/DistributionSetDetails.java | 91 +-------- .../dstable/DistributionSetTableHeader.java | 27 --- .../DistributionsViewAcceptCriteria.java | 32 ---- .../footer/DSDeleteActionsLayout.java | 175 +----------------- .../smtable/SwModuleDetails.java | 34 ---- .../smtable/SwModuleTableHeader.java | 26 --- .../smtype/DistSMTypeFilterButtons.java | 17 -- .../smtype/DistSMTypeFilterHeader.java | 8 - .../dstable/DistributionDetails.java | 25 +-- .../management/dstable/DistributionTable.java | 2 +- .../dstable/DistributionTableHeader.java | 27 --- .../dstag/DistributionTagButtons.java | 12 -- .../dstag/DistributionTagHeader.java | 10 +- .../event/DistributionTagDropEvent.java | 2 +- .../event/ManagementViewAcceptCriteria.java | 32 ---- .../footer/DeleteActionsLayout.java | 45 ----- .../management/targettable/TargetDetails.java | 24 +-- .../management/targettable/TargetTable.java | 2 +- .../targettable/TargetTableHeader.java | 18 -- .../targettag/TargetTagFilterButtons.java | 14 +- .../targettag/TargetTagFilterHeader.java | 11 +- .../ui/rollout/rollout/RolloutListGrid.java | 53 ++---- .../rolloutgroup/RolloutGroupListGrid.java | 47 ++--- .../RolloutGroupTargetsListGrid.java | 34 +--- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 61 +----- 58 files changed, 371 insertions(+), 1248 deletions(-) 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 8b1df00da..85e707652 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 @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.repository; +import java.util.Collections; import java.util.List; import org.eclipse.hawkbit.repository.model.AssignmentResult; @@ -19,7 +20,7 @@ import org.eclipse.hawkbit.repository.model.Target; * how much of the assignments had already been existed. * */ -public class DistributionSetAssignmentResult extends AssignmentResult { +public class DistributionSetAssignmentResult extends AssignmentResult { private final List assignedTargets; private final List actions; @@ -45,16 +46,14 @@ public class DistributionSetAssignmentResult extends AssignmentResult { */ public DistributionSetAssignmentResult(final List assignedTargets, final int assigned, final int alreadyAssigned, final List actions, final TargetManagement targetManagement) { - super(assigned, alreadyAssigned); + super(assigned, alreadyAssigned, 0, Collections.emptyList(), Collections.emptyList()); this.assignedTargets = assignedTargets; this.actions = actions; this.targetManagement = targetManagement; } - - /** - * @return the assignedTargets - */ - public List getAssignedTargets() { + + @Override + public List getAssignedEntity() { return targetManagement.findTargetByControllerID(assignedTargets); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java index eda0bb9bd..2dea94f33 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/AssignmentResult.java @@ -8,15 +8,21 @@ */ package org.eclipse.hawkbit.repository.model; +import java.util.List; + /** * Generic assignment result bean. * */ -public class AssignmentResult { +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; /** * Constructor. @@ -24,25 +30,47 @@ public class AssignmentResult { * @param assigned * is the number of newly assigned elements. * @param alreadyAssigned - * is the number of already assigned elements. + * number of already assigned/ignored elements + * @param unassigned + * number of newly assigned elements + * @param assignedEntity + * {@link List} of assigned entity. + * @param unassignedEntity + * {@link List} of unassigned entity. */ - public AssignmentResult(final int assigned, final int alreadyAssigned) { - super(); + public AssignmentResult(final int assigned, final int alreadyAssigned, final int unassigned, + final List assignedEntity, final List unassignedEntity) { this.assigned = assigned; this.alreadyAssigned = alreadyAssigned; total = assigned + alreadyAssigned; + this.unassigned = unassigned; + this.assignedEntity = assignedEntity; + this.unassignedEntity = unassignedEntity; } - + public int getAssigned() { return assigned; } - + public int getTotal() { return total; } - + public int getAlreadyAssigned() { return alreadyAssigned; } + + + public int getUnassigned() { + return unassigned; + } + + public List getAssignedEntity() { + return assignedEntity; + } + + public List getUnassignedEntity() { + return unassignedEntity; + } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java index eddd10c1b..f1f3b1519 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/DistributionSetTagAssignmentResult.java @@ -14,11 +14,8 @@ import java.util.List; * Result object for {@link DistributionSetTag} assignments. * */ -public class DistributionSetTagAssignmentResult extends AssignmentResult { +public class DistributionSetTagAssignmentResult extends AssignmentResult { - private final int unassigned; - private final List assignedDs; - private final List unassignedDs; private final DistributionSetTag distributionSetTag; /** @@ -40,27 +37,13 @@ public class DistributionSetTagAssignmentResult extends AssignmentResult { public DistributionSetTagAssignmentResult(final int alreadyAssigned, final int assigned, final int unassigned, final List assignedDs, final List unassignedDs, final DistributionSetTag distributionSetTag) { - super(assigned, alreadyAssigned); - this.unassigned = unassigned; - this.assignedDs = assignedDs; - this.unassignedDs = unassignedDs; + super(assigned, alreadyAssigned,unassigned, assignedDs, unassignedDs); this.distributionSetTag = distributionSetTag; } - public int getUnassigned() { - return unassigned; - } - public DistributionSetTag getDistributionSetTag() { return distributionSetTag; } - public List getAssignedDs() { - return assignedDs; - } - - public List getUnassignedDs() { - return unassignedDs; - } } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java index 789e6adf2..b454d0c18 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/TargetTagAssignmentResult.java @@ -14,11 +14,8 @@ import java.util.List; * Result object for {@link TargetTag} assignments. * */ -public class TargetTagAssignmentResult extends AssignmentResult { +public class TargetTagAssignmentResult extends AssignmentResult { - private final int unassigned; - private final List assignedTargets; - private final List unassignedTargets; private final TargetTag targetTag; /** @@ -39,25 +36,10 @@ public class TargetTagAssignmentResult extends AssignmentResult { */ public TargetTagAssignmentResult(final int alreadyAssigned, final int assigned, final int unassigned, final List assignedTargets, final List unassignedTargets, final TargetTag targetTag) { - super(assigned, alreadyAssigned); - this.unassigned = unassigned; - this.assignedTargets = assignedTargets; - this.unassignedTargets = unassignedTargets; + super(assigned, alreadyAssigned, unassigned, assignedTargets, unassignedTargets); this.targetTag = targetTag; } - public int getUnassigned() { - return unassigned; - } - - public List getAssignedTargets() { - return assignedTargets; - } - - public List getUnassignedTargets() { - return unassignedTargets; - } - public TargetTag getTargetTag() { return targetTag; } 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 d77c137b1..279932ef7 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 @@ -48,7 +48,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { assertThat(savedTarget.getTargetInfo().getUpdateStatus()).isEqualTo(TargetUpdateStatus.UNKNOWN); - savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedTargets().iterator().next(); + savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedEntity().iterator().next(); final Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); assertThat(targetManagement.findTargetByControllerID(savedTarget.getControllerId()).getTargetInfo() @@ -104,7 +104,7 @@ public class ControllerManagementTest extends AbstractIntegrationTest { Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList<>(); toAssign.add(savedTarget); - savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedTargets().iterator().next(); + savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedEntity().iterator().next(); Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); // test and verify 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 83db4ed96..a17054a3d 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 @@ -155,8 +155,8 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { List targets = targetManagement .createTargets(TestDataUtil.generateTargets(Constants.MAX_ENTRIES_IN_STATEMENT + 10)); - targets = deploymentManagement.assignDistributionSet(cancelDs, targets).getAssignedTargets(); - targets = deploymentManagement.assignDistributionSet(cancelDs2, targets).getAssignedTargets(); + targets = deploymentManagement.assignDistributionSet(cancelDs, targets).getAssignedEntity(); + targets = deploymentManagement.assignDistributionSet(cancelDs2, targets).getAssignedEntity(); targetManagement.findAllTargetIds().forEach(targetIdName -> { assertThat(deploymentManagement.findActiveActionsByTarget( @@ -604,7 +604,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // activeActions, add a corresponding cancelAction and another // UpdateAction for dsA final Iterable deployed2DS = deploymentManagement - .assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets()).getAssignedTargets(); + .assignDistributionSet(dsA, deployResWithDsB.getDeployedTargets()).getAssignedEntity(); actionRepository.findByDistributionSet(pageRequest, dsA).getContent().get(1); // get final updated version of targets @@ -761,7 +761,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { targs.add(targ); // doing the assignment - targs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedTargets(); + targs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedEntity(); targ = targetManagement.findTargetByControllerID(targs.iterator().next().getControllerId()); // checking the revisions of the created entities @@ -799,7 +799,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { assertEquals("wrong installed ds", dsA, targ.getTargetInfo().getInstalledDistributionSet()); targs = deploymentManagement.assignDistributionSet(dsB.getId(), new String[] { "target-id-A" }) - .getAssignedTargets(); + .getAssignedEntity(); targ = targs.iterator().next(); @@ -830,7 +830,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { final List targs = new ArrayList(); targs.add(targ); - final Iterable savedTargs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedTargets(); + final Iterable savedTargs = deploymentManagement.assignDistributionSet(dsA, targs).getAssignedEntity(); targ = savedTargs.iterator().next(); assertThat(dsA.getOptLockRevision()).as("lock revision is wrong").isEqualTo( @@ -926,7 +926,7 @@ public class DeploymentManagementTest extends AbstractIntegrationTest { // assigning all DistributionSet to the Target in the list // deployedTargets for (final DistributionSet ds : dsList) { - deployedTargets = deploymentManagement.assignDistributionSet(ds, deployedTargets).getAssignedTargets(); + deployedTargets = deploymentManagement.assignDistributionSet(ds, deployedTargets).getAssignedEntity(); } final DeploymentResult deploymentResult = new DeploymentResult(deployedTargets, nakedTargets, dsList, 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 90cecfc14..db9618425 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 @@ -495,11 +495,11 @@ public class DistributionSetManagementTest extends AbstractIntegrationTest { distributionSetManagement.deleteDistributionSet(dsDeleted); dsDeleted = distributionSetManagement.findDistributionSetById(dsDeleted.getId()); - ds100Group1 = distributionSetManagement.toggleTagAssignment(ds100Group1, dsTagA).getAssignedDs(); + ds100Group1 = distributionSetManagement.toggleTagAssignment(ds100Group1, dsTagA).getAssignedEntity(); dsTagA = distributionSetTagRepository.findByNameEquals(dsTagA.getName()); - ds100Group1 = distributionSetManagement.toggleTagAssignment(ds100Group1, dsTagB).getAssignedDs(); + ds100Group1 = distributionSetManagement.toggleTagAssignment(ds100Group1, dsTagB).getAssignedEntity(); dsTagA = distributionSetTagRepository.findByNameEquals(dsTagA.getName()); - ds100Group2 = distributionSetManagement.toggleTagAssignment(ds100Group2, dsTagA).getAssignedDs(); + ds100Group2 = distributionSetManagement.toggleTagAssignment(ds100Group2, dsTagA).getAssignedEntity(); dsTagA = distributionSetTagRepository.findByNameEquals(dsTagA.getName()); // check setup 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 73244871f..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 @@ -179,29 +179,29 @@ public class TagManagementTest extends AbstractIntegrationTest { DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(groupA, tag); assertThat(result.getAlreadyAssigned()).isEqualTo(0); assertThat(result.getAssigned()).isEqualTo(20); - assertThat(result.getAssignedDs()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + assertThat(result.getAssignedEntity()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( groupA.stream().map(set -> set.getId()).collect(Collectors.toList()))); assertThat(result.getUnassigned()).isEqualTo(0); - assertThat(result.getUnassignedDs()).isEmpty(); + assertThat(result.getUnassignedEntity()).isEmpty(); assertThat(result.getDistributionSetTag()).isEqualTo(tag); // toggle A+B -> A is still assigned and B is assigned as well result = distributionSetManagement.toggleTagAssignment(concat(groupA, groupB), tag); assertThat(result.getAlreadyAssigned()).isEqualTo(20); assertThat(result.getAssigned()).isEqualTo(20); - assertThat(result.getAssignedDs()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + assertThat(result.getAssignedEntity()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( groupB.stream().map(set -> set.getId()).collect(Collectors.toList()))); assertThat(result.getUnassigned()).isEqualTo(0); - assertThat(result.getUnassignedDs()).isEmpty(); + assertThat(result.getUnassignedEntity()).isEmpty(); assertThat(result.getDistributionSetTag()).isEqualTo(tag); // toggle A+B -> both unassigned result = distributionSetManagement.toggleTagAssignment(concat(groupA, groupB), tag); assertThat(result.getAlreadyAssigned()).isEqualTo(0); assertThat(result.getAssigned()).isEqualTo(0); - assertThat(result.getAssignedDs()).isEmpty(); + assertThat(result.getAssignedEntity()).isEmpty(); assertThat(result.getUnassigned()).isEqualTo(40); - assertThat(result.getUnassignedDs()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( + assertThat(result.getUnassignedEntity()).containsAll(distributionSetManagement.findDistributionSetListWithDetails( concat(groupB, groupA).stream().map(set -> set.getId()).collect(Collectors.toList()))); assertThat(result.getDistributionSetTag()).isEqualTo(tag); @@ -220,29 +220,29 @@ public class TagManagementTest extends AbstractIntegrationTest { TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(groupA, tag); assertThat(result.getAlreadyAssigned()).isEqualTo(0); assertThat(result.getAssigned()).isEqualTo(20); - assertThat(result.getAssignedTargets()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( + assertThat(result.getAssignedEntity()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( groupA.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))); assertThat(result.getUnassigned()).isEqualTo(0); - assertThat(result.getUnassignedTargets()).isEmpty(); + assertThat(result.getUnassignedEntity()).isEmpty(); assertThat(result.getTargetTag()).isEqualTo(tag); // toggle A+B -> A is still assigned and B is assigned as well result = targetManagement.toggleTagAssignment(concat(groupA, groupB), tag); assertThat(result.getAlreadyAssigned()).isEqualTo(20); assertThat(result.getAssigned()).isEqualTo(20); - assertThat(result.getAssignedTargets()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( + assertThat(result.getAssignedEntity()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( groupB.stream().map(target -> target.getControllerId()).collect(Collectors.toList()))); assertThat(result.getUnassigned()).isEqualTo(0); - assertThat(result.getUnassignedTargets()).isEmpty(); + assertThat(result.getUnassignedEntity()).isEmpty(); assertThat(result.getTargetTag()).isEqualTo(tag); // toggle A+B -> both unassigned result = targetManagement.toggleTagAssignment(concat(groupA, groupB), tag); assertThat(result.getAlreadyAssigned()).isEqualTo(0); assertThat(result.getAssigned()).isEqualTo(0); - assertThat(result.getAssignedTargets()).isEmpty(); + assertThat(result.getAssignedEntity()).isEmpty(); assertThat(result.getUnassigned()).isEqualTo(40); - assertThat(result.getUnassignedTargets()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( + assertThat(result.getUnassignedEntity()).containsAll(targetManagement.findTargetsByControllerIDsWithTags( concat(groupB, groupA).stream().map(target -> target.getControllerId()).collect(Collectors.toList()))); assertThat(result.getTargetTag()).isEqualTo(tag); 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 0c33a651f..73d549eb7 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 @@ -64,19 +64,19 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final String targetDsAIdPref = "targ-A"; List targAs = targetManagement.createTargets( TestDataUtil.buildTargetFixtures(100, targetDsAIdPref, targetDsAIdPref.concat(" description"))); - targAs = targetManagement.toggleTagAssignment(targAs, targTagX).getAssignedTargets(); + targAs = targetManagement.toggleTagAssignment(targAs, targTagX).getAssignedEntity(); final String targetDsBIdPref = "targ-B"; List targBs = targetManagement.createTargets( TestDataUtil.buildTargetFixtures(100, targetDsBIdPref, targetDsBIdPref.concat(" description"))); - targBs = targetManagement.toggleTagAssignment(targBs, targTagY).getAssignedTargets(); - targBs = targetManagement.toggleTagAssignment(targBs, targTagW).getAssignedTargets(); + 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"))); - targCs = targetManagement.toggleTagAssignment(targCs, targTagZ).getAssignedTargets(); - targCs = targetManagement.toggleTagAssignment(targCs, targTagW).getAssignedTargets(); + targCs = targetManagement.toggleTagAssignment(targCs, targTagZ).getAssignedEntity(); + targCs = targetManagement.toggleTagAssignment(targCs, targTagW).getAssignedEntity(); final String targetDsDIdPref = "targ-D"; final List targDs = targetManagement.createTargets( @@ -688,8 +688,8 @@ public class TargetManagementSearchTest extends AbstractIntegrationTest { final DistributionSet ds = TestDataUtil.generateDistributionSet("a", softwareManagement, distributionSetManagement); - targAssigned = deploymentManagement.assignDistributionSet(ds, targAssigned).getAssignedTargets(); - targInstalled = deploymentManagement.assignDistributionSet(ds, targInstalled).getAssignedTargets(); + targAssigned = deploymentManagement.assignDistributionSet(ds, targAssigned).getAssignedEntity(); + targInstalled = deploymentManagement.assignDistributionSet(ds, targInstalled).getAssignedEntity(); targInstalled = sendUpdateActionStatusToTargets(ds, targInstalled, Status.FINISHED, "installed"); final Slice result = targetManagement.findTargetsAllOrderByLinkedDistributionSet(pageReq, ds.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 d7efa50d5..a1c74e791 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 @@ -49,7 +49,6 @@ 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.auditing.DateTimeProvider; import org.springframework.data.jpa.repository.Modifying; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.core.context.SecurityContext; @@ -132,24 +131,18 @@ public final class RepositoryDataGenerator { final DistributionSetTag dsTag = tagManagement .createDistributionSetTag(new DistributionSetTag("For " + group + "s")); - auditingHandler.setDateTimeProvider(new DateTimeProvider() { - @Override - public Calendar getNow() { - final Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH, -new Random().nextInt(7)); + auditingHandler.setDateTimeProvider(() -> { + final Calendar instance = Calendar.getInstance(); + instance.add(Calendar.MONTH, -new Random().nextInt(7)); - return instance; - } + return instance; }); final List targets = createTargetTestGroup(group, 20 * sizeMultiplikator); - auditingHandler.setDateTimeProvider(new DateTimeProvider() { - @Override - public Calendar getNow() { - final Calendar instance = Calendar.getInstance(); - return instance; - } + auditingHandler.setDateTimeProvider(() -> { + final Calendar instance = Calendar.getInstance(); + return instance; }); LOG.debug("initDemoRepo - start now real action history for group: {}", group); @@ -290,7 +283,7 @@ public final class RepositoryDataGenerator { LOG.debug("createTargetTestGroup: {} targets status updated including IP", group); - return targetManagement.toggleTagAssignment(targAs, targTag).getAssignedTargets(); + return targetManagement.toggleTagAssignment(targAs, targTag).getAssignedEntity(); } private List buildTargets(final int noOfTgts, final String descriptionPrefix) { @@ -328,75 +321,70 @@ public final class RepositoryDataGenerator { private void initDemoRepo(final int sizeMultiplikator, final int loadtestgroups) { final LoremIpsum jlorem = new LoremIpsum(); - runAsAllAuthorityContext(new Runnable() { + runAsAllAuthorityContext(() -> { + dbCleanupUtil.cleanupDB(null); - @Override - public void run() { - dbCleanupUtil.cleanupDB(null); + // generate targets and assign DS + // 5 groups - 100 targets each -> 500 + final String[] targetTestGroups = { "SHC", "CCU", "Vehicle", "Vending machine", "ECU" }; - // 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 String[] modulesTypes = { "HeadUnit_FW", "EDC17_FW", "OSGi_Bundle" }; + final DistributionSetTag depTag = tagManagement + .createDistributionSetTag(new DistributionSetTag("deprecated")); - final DistributionSetTag depTag = tagManagement - .createDistributionSetTag(new DistributionSetTag("deprecated")); + Arrays.stream(targetTestGroups).forEach(group -> { + generateTestTagetGroup(group, sizeMultiplikator); + }); - 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"); - // 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 SoftwareModuleType(typeName.toLowerCase().replaceAll("\\s+", ""), typeName, + jlorem.words(5), Integer.MAX_VALUE)); - 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, - jlorem.words(5), Integer.MAX_VALUE)); - - for (int i = 0; i < sizeMultiplikator; i++) { - softwareManagement.createSoftwareModule(new SoftwareModule(smtype, typeName + i, "1.0." + i, - 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 DistributionSetTag("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 i = 0; i < loadtestgroups; i++) { - targetManagement.createTargets(TestDataUtil.generateTargets(i * 1_000, 1_000, "loadtest-")); + for (int i1 = 0; i1 < sizeMultiplikator; i1++) { + softwareManagement.createSoftwareModule(new SoftwareModule(smtype, typeName + i1, "1.0." + i1, + jlorem.words(5), "the " + typeName + " vendor Inc.")); } - LOG.debug("initDemoRepo complete"); + }); + 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 DistributionSetTag("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"); }); } /** 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 01a446947..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 @@ -139,9 +139,9 @@ public class DistributionSetTagResource implements DistributionSetTagRestApi { final DistributionSetTagAssigmentResultRest tagAssigmentResultRest = new DistributionSetTagAssigmentResultRest(); tagAssigmentResultRest.setAssignedDistributionSets( - DistributionSetMapper.toResponseDistributionSets(assigmentResult.getAssignedDs())); + DistributionSetMapper.toResponseDistributionSets(assigmentResult.getAssignedEntity())); tagAssigmentResultRest.setUnassignedDistributionSets( - DistributionSetMapper.toResponseDistributionSets(assigmentResult.getUnassignedDs())); + DistributionSetMapper.toResponseDistributionSets(assigmentResult.getUnassignedEntity())); LOG.debug("Toggled assignedDS {} and unassignedDS{}", assigmentResult.getAssigned(), assigmentResult.getUnassigned()); 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 3c79c936c..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 @@ -263,7 +263,7 @@ public class TargetResource implements TargetRestApi { final ActionType type = (dsId.getType() != null) ? RestResourceConversionHelper.convertActionType(dsId.getType()) : ActionType.FORCED; final Iterator changed = this.deploymentManagement - .assignDistributionSet(dsId.getId(), type, dsId.getForcetime(), targetId).getAssignedTargets() + .assignDistributionSet(dsId.getId(), type, dsId.getForcetime(), targetId).getAssignedEntity() .iterator(); if (changed.hasNext()) { return new ResponseEntity<>(HttpStatus.OK); 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 9990fb35a..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 @@ -133,8 +133,8 @@ public class TargetTagResource implements TargetTagRestApi { .toggleTagAssignment(findTargetControllerIds(assignedTargetRequestBodies), targetTag.getName()); final TargetTagAssigmentResultRest tagAssigmentResultRest = new TargetTagAssigmentResultRest(); - tagAssigmentResultRest.setAssignedTargets(TargetMapper.toResponse(assigmentResult.getAssignedTargets())); - tagAssigmentResultRest.setUnassignedTargets(TargetMapper.toResponse(assigmentResult.getUnassignedTargets())); + tagAssigmentResultRest.setAssignedTargets(TargetMapper.toResponse(assigmentResult.getAssignedEntity())); + tagAssigmentResultRest.setUnassignedTargets(TargetMapper.toResponse(assigmentResult.getUnassignedEntity())); return new ResponseEntity<>(tagAssigmentResultRest, HttpStatus.OK); } diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java index 2b2b7e597..2127c8d1a 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/DeploymentBaseTest.java @@ -114,12 +114,12 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { assertThat(actionStatusRepository.findAll()).isEmpty(); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.FORCED, - Action.NO_FORCE_TIME, savedTarget.getControllerId()).getAssignedTargets(); + Action.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); - saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedTargets(); + saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); assertThat(actionRepository.findAll()).hasSize(2); @@ -236,12 +236,12 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { List saved = deploymentManagement .assignDistributionSet(ds.getId(), ActionType.SOFT, Action.NO_FORCE_TIME, savedTarget.getControllerId()) - .getAssignedTargets(); + .getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); assertThat(actionRepository.findAll()).hasSize(1); - saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedTargets(); + saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); assertThat(actionRepository.findAll()).hasSize(2); @@ -358,12 +358,12 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { assertThat(actionStatusRepository.findAll()).isEmpty(); List saved = deploymentManagement.assignDistributionSet(ds.getId(), ActionType.TIMEFORCED, - System.currentTimeMillis(), savedTarget.getControllerId()).getAssignedTargets(); + System.currentTimeMillis(), savedTarget.getControllerId()).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(1); final Action action = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); assertThat(actionRepository.findAll()).hasSize(1); - saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedTargets(); + saved = deploymentManagement.assignDistributionSet(ds2, saved).getAssignedEntity(); assertThat(deploymentManagement.findActiveActionsByTarget(savedTarget)).hasSize(2); assertThat(actionRepository.findAll()).hasSize(2); @@ -887,7 +887,7 @@ public class DeploymentBaseTest extends AbstractIntegrationTestWithMongoDB { assertThat(targetManagement.findTargetByControllerID("4712").getTargetInfo().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.UNKNOWN); - savedTarget = deploymentManagement.assignDistributionSet(savedSet, toAssign).getAssignedTargets().iterator() + savedTarget = deploymentManagement.assignDistributionSet(savedSet, toAssign).getAssignedEntity().iterator() .next(); deploymentManagement.assignDistributionSet(savedSet2, toAssign2); diff --git a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java index a6e457f3a..fa2c5f6d4 100644 --- a/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java +++ b/hawkbit-rest-resource/src/test/java/org/eclipse/hawkbit/controller/RootControllerTest.java @@ -270,7 +270,7 @@ public class RootControllerTest extends AbstractIntegrationTestWithMongoDB { Target savedTarget = targetManagement.createTarget(target); final List toAssign = new ArrayList(); toAssign.add(savedTarget); - savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedTargets().iterator().next(); + savedTarget = deploymentManagement.assignDistributionSet(ds, toAssign).getAssignedEntity().iterator().next(); final Action savedAction = deploymentManagement.findActiveActionsByTarget(savedTarget).get(0); mvc.perform(post("/{tenant}/controller/v1/911/deploymentBase/" + savedAction.getId() + "/feedback", tenantAware.getCurrentTenant()) 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 a8ebfdd9d..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 @@ -1029,7 +1029,7 @@ public class TargetResourceTest extends AbstractIntegrationTest { // Update final List updatedTargets = deploymentManagement.assignDistributionSet(one, targets) - .getAssignedTargets(); + .getAssignedEntity(); // 2nd update // sleep 10ms to ensure that we can sort by reportedAt Thread.sleep(10); 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 a3f045a08..060800fb8 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,12 +14,7 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.ui.common.AbstractAcceptCriteria; -import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -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.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -28,8 +23,6 @@ import com.vaadin.ui.Component; /** * Upload UI View for Accept criteria. * - * - * */ @SpringComponent @ViewScope @@ -41,29 +34,6 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { private static final Map DROP_HINTS_CONFIGS = createDropHintConfigurations(); - @Autowired - private transient UINotification uiNotification; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Override - protected void analyseDragComponent(final Component compsource) { - final String sourceID = getComponentId(compsource); - final Object event = DROP_HINTS_CONFIGS.get(sourceID); - eventBus.publish(this, event); - } - - @Override - protected void hideDropHints() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - } - - @Override - protected void invalidDrop() { - uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); - } - @Override protected String getComponentId(final Component component) { String id = component.getId(); @@ -78,11 +48,6 @@ public class UploadViewAcceptCriteria extends AbstractAcceptCriteria { return DROP_HINTS_CONFIGS; } - @Override - protected void publishDragStartEvent(final Object event) { - eventBus.publish(this, event); - } - @Override protected Map> getDropConfigurations() { return DROP_CONFIGS; 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 ef4b17da7..97451961c 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 @@ -11,22 +11,15 @@ package org.eclipse.hawkbit.ui.artifacts.footer; import java.util.HashSet; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadViewAcceptCriteria; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; import org.eclipse.hawkbit.ui.management.event.DragEvent; -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.UINotification; 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; @@ -50,18 +43,6 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { private static final long serialVersionUID = -3273982053389866299L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient UINotification notification; - @Autowired private ArtifactUploadState artifactUploadState; @@ -71,22 +52,6 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { @Autowired private UploadViewAcceptCriteria uploadViewAcceptCriteria; - @Override - @PostConstruct - protected void init() { - super.init(); - 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 UploadArtifactUIEvent event) { @@ -211,26 +176,11 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { updateActionsCount(count); } - @Override - protected String getNoActionsButtonLabel() { - return i18n.get("button.no.actions"); - } - - @Override - protected String getActionsButtonLabel() { - return i18n.get("button.actions"); - } - @Override protected void restoreActionCount() { updateSWActionCount(); } - @Override - protected String getUnsavedActionsWindowCaption() { - return i18n.get("caption.save.window"); - } - @Override protected void unsavedActionsWindowClosed() { final String message = uploadViewConfirmationWindowLayout.getConsolidatedMessage(); 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 6eb3e3d5d..dc6035089 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 @@ -8,10 +8,6 @@ */ package org.eclipse.hawkbit.ui.artifacts.smtable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; @@ -19,10 +15,8 @@ import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; 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; @@ -46,38 +40,16 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { private static final long serialVersionUID = -4900381301076646366L; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private SpPermissionChecker permissionChecker; - @Autowired private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow; @Autowired private ArtifactUploadState artifactUploadState; - private UI ui; - private Long swModuleId; private SoftwareModule selectedSwModule; - - /** - * Initialize the component. - */ - @Override - @PostConstruct - protected void init() { - super.init(); - ui = UI.getCurrent(); - eventBus.subscribe(this); - } - + @Override protected String getEditButtonId() { return SPUIComponetIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; @@ -175,58 +147,24 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { } } - @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); - } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * getDefaultCaption() - */ @Override protected String getDefaultCaption() { return i18n.get("upload.swModuleTable.header"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * onLoadIsSwModuleSelected() - */ @Override protected Boolean onLoadIsTableRowSelected() { return artifactUploadState.getSelectedBaseSoftwareModule().isPresent(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * onLoadIsTableMaximized() - */ + @Override protected Boolean onLoadIsTableMaximized() { return artifactUploadState.isSwModuleTableMaximized(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.detailslayout.TableDetailsLayout# - * populateDetailsWidget() - */ + @Override protected void populateDetailsWidget() { populateDetailsWidget(selectedSwModule); @@ -266,12 +204,7 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { return permissionChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getTabSheetId() - */ + @Override protected String getTabSheetId() { return null; diff --git a/hawkbit-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 index 71605ec9f..5f1c56636 100644 --- a/hawkbit-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 @@ -8,20 +8,14 @@ */ package org.eclipse.hawkbit.ui.artifacts.smtable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; 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.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; 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; @@ -44,31 +38,12 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { private static final long serialVersionUID = 242961845006626297L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private ArtifactUploadState artifactUploadState; @Autowired private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow; - /** - * Initialize the components. - */ - @Override - @PostConstruct - protected void init() { - super.init(); - eventbus.subscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final UploadArtifactUIEvent event) { if (event == UploadArtifactUIEvent.HIDE_FILTER_BY_TYPE) { @@ -76,14 +51,6 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { } } - @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); - } @Override protected String getHeaderCaption() { diff --git a/hawkbit-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 index 857b27a7e..5a1736b04 100644 --- a/hawkbit-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 @@ -8,21 +8,17 @@ */ package org.eclipse.hawkbit.ui.artifacts.smtype; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadViewAcceptCriteria; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; -import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtonClickBehaviour; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtons; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -48,26 +44,6 @@ public class SMTypeFilterButtons extends AbstractFilterButtons { @Autowired private UploadViewAcceptCriteria uploadViewAcceptCriteria; - @Autowired - private transient EventBus.SessionEventBus eventBus; - - /** - * Initialize component. - * - * @param filterButtonClickBehaviour - * the clickable behaviour. - */ - @Override - public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { - super.init(filterButtonClickBehaviour); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleTypeEvent event) { if (event.getSoftwareModuleTypeEnum() == SoftwareModuleTypeEvent.SoftwareModuleTypeEnum.ADD_SOFTWARE_MODULE_TYPE diff --git a/hawkbit-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 index b79ecb742..a12517b31 100644 --- a/hawkbit-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 @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.artifacts.smtype; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader; @@ -18,7 +17,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -35,12 +33,6 @@ public class SMTypeFilterHeader extends AbstractFilterHeader { private static final long serialVersionUID = -4855810338059032342L; - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private ArtifactUploadState artifactUploadState; @@ -84,7 +76,7 @@ public class SMTypeFilterHeader extends AbstractFilterHeader { @Override protected void hideFilterButtonLayout() { artifactUploadState.setSwTypeFilterClosed(true); - eventbus.publish(this, UploadArtifactUIEvent.HIDE_FILTER_BY_TYPE); + eventBus.publish(this, UploadArtifactUIEvent.HIDE_FILTER_BY_TYPE); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java index a6df4f557..2fa2900d5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/AbstractAcceptCriteria.java @@ -13,8 +13,13 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.eclipse.hawkbit.ui.management.event.DragEvent; 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.EventBus; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion; @@ -27,9 +32,6 @@ import com.vaadin.ui.Table; /** * Abstract class for Accept criteria. * - * - * - * */ public abstract class AbstractAcceptCriteria extends ServerSideCriterion { @@ -37,13 +39,12 @@ public abstract class AbstractAcceptCriteria extends ServerSideCriterion { private int previousRowCount; - /* - * (non-Javadoc) - * - * @see - * com.vaadin.event.dd.acceptcriteria.AcceptCriterion#accept(com.vaadin. - * event.dd.DragAndDropEvent ) - */ + @Autowired + protected transient UINotification uiNotification; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + @Override public boolean accept(final DragAndDropEvent dragEvent) { final Component compsource = dragEvent.getTransferable().getSourceComponent(); @@ -129,7 +130,7 @@ public abstract class AbstractAcceptCriteria extends ServerSideCriterion { protected void analyseDragComponent(final Component compsource) { final String sourceID = getComponentId(compsource); final Object event = getDropHintConfigurations().get(sourceID); - publishDragStartEvent(event); + eventBus.publish(this, event); } /** @@ -159,23 +160,19 @@ public abstract class AbstractAcceptCriteria extends ServerSideCriterion { */ protected abstract String getComponentId(final Component component); - /** - * publish the given event into eventBus. - * - * @param event - * to be published in eventBus. - */ - protected abstract void publishDragStartEvent(Object event); - /** * Hide the drop hints. Dragging is stopped. */ - protected abstract void hideDropHints(); + protected void hideDropHints() { + eventBus.publish(this, DragEvent.HIDE_DROP_HINT); + } /** * Display invalid drop message. */ - protected abstract void invalidDrop(); + protected void invalidDrop() { + uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); + } /** * @return 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 a6ab09659..20a107ba6 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 @@ -10,6 +10,10 @@ package org.eclipse.hawkbit.ui.common.detailslayout; import java.util.Map; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -19,6 +23,8 @@ import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; 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; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.label.ContentMode; @@ -27,6 +33,7 @@ import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TabSheet; +import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; /** @@ -37,6 +44,17 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { private static final long serialVersionUID = 4862529368471627190L; + @Autowired + protected I18N i18n; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + + @Autowired + protected SpPermissionChecker permissionChecker; + + protected UI ui; + private Label caption; private Button editButton; @@ -54,7 +72,9 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { /** * Initialize components. */ + @PostConstruct protected void init() { + ui = UI.getCurrent(); createComponents(); buildLayout(); /** @@ -62,6 +82,12 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { * selected in table. */ restoreState(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); } private void createComponents() { 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 e95797fb4..b64578782 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 @@ -11,13 +11,17 @@ package org.eclipse.hawkbit.ui.common.filterlayout; import java.util.ArrayList; import java.util.List; +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.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; +import org.vaadin.spring.events.EventBus; import com.vaadin.data.Item; import com.vaadin.event.dd.DropHandler; @@ -38,10 +42,13 @@ 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; private AbstractFilterButtonClickBehaviour filterButtonClickBehaviour; @@ -54,6 +61,12 @@ public abstract class AbstractFilterButtons extends Table { public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { this.filterButtonClickBehaviour = filterButtonClickBehaviour; createTable(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); } private void createTable() { @@ -88,12 +101,7 @@ public abstract class AbstractFilterButtons extends Table { @SuppressWarnings("serial") protected void addColumn() { - addGeneratedColumn(FILTER_BUTTON_COLUMN, new ColumnGenerator() { - @Override - public Object generateCell(final Table source, final Object itemId, final Object columnId) { - return addGeneratedCell(itemId); - } - }); + addGeneratedColumn(FILTER_BUTTON_COLUMN, (source, itemId, columnId) -> addGeneratedCell(itemId)); } /** 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 95ac7bb35..ddc2d9889 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 @@ -8,10 +8,13 @@ */ package org.eclipse.hawkbit.ui.common.filterlayout; +import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; 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; import com.vaadin.server.FontAwesome; import com.vaadin.ui.Alignment; @@ -31,6 +34,13 @@ public abstract class AbstractFilterHeader extends VerticalLayout { private static final long serialVersionUID = -1388340600522323332L; + + @Autowired + protected SpPermissionChecker permChecker; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + private Label title; private Button config; 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 5b9bd162c..cdf9ac354 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 @@ -8,12 +8,19 @@ */ package org.eclipse.hawkbit.ui.common.footer; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.repository.SpPermissionChecker; 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.SPUIDefinitions; 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; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; @@ -42,6 +49,18 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme private static final long serialVersionUID = -6047975388519155509L; + @Autowired + protected I18N i18n; + + @Autowired + protected SpPermissionChecker permChecker; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + + @Autowired + protected transient UINotification notification; + private DragAndDropWrapper deleteWrapper; private Button noActionBtn; @@ -59,6 +78,12 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme buildLayout(); reload(); } + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); } private void reload() { @@ -311,14 +336,27 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme * * @return the no actions label. */ - protected abstract String getNoActionsButtonLabel(); + protected String getNoActionsButtonLabel() { + return i18n.get("button.no.actions"); + } /** * Get the pending actions button label. * * @return the actions label. */ - protected abstract String getActionsButtonLabel(); + protected String getActionsButtonLabel() { + return i18n.get("button.actions"); + } + + /** + * Get caption of unsaved actions window. + * + * @return caption of the window. + */ + protected String getUnsavedActionsWindowCaption() { + return i18n.get("caption.save.window"); + } /** * reload the count value. @@ -330,13 +368,6 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme */ protected abstract void restoreBulkUploadStatusCount(); - /** - * Get caption of unsaved actions window. - * - * @return caption of the window. - */ - protected abstract String getUnsavedActionsWindowCaption(); - /** * This method will be called when unsaved actions window is closed. */ diff --git a/hawkbit-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 index 6ac205cf2..be16498e9 100644 --- a/hawkbit-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 @@ -8,7 +8,13 @@ */ package org.eclipse.hawkbit.ui.common.grid; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.spring.events.EventBus; import com.vaadin.data.Container; import com.vaadin.data.Container.Indexed; @@ -21,10 +27,18 @@ import com.vaadin.ui.Grid; public abstract class AbstractGrid extends Grid { private static final long serialVersionUID = 4856562746502217630L; + + @Autowired + protected I18N i18n; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + /** * Initialize the components. */ + @PostConstruct protected void init() { setSizeFull(); setImmediate(true); @@ -32,6 +46,12 @@ public abstract class AbstractGrid extends Grid { setSelectionMode(SelectionMode.NONE); setColumnReorderingAllowed(true); addNewContainerDS(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); } public void addNewContainerDS() { @@ -43,13 +63,13 @@ public abstract class AbstractGrid extends Grid { setColumnHeaderNames(); addColumnRenderes(); - CellDescriptionGenerator cellDescriptionGenerator = getDescriptionGenerator(); + final CellDescriptionGenerator cellDescriptionGenerator = getDescriptionGenerator(); if (getDescriptionGenerator() != null) { setCellDescriptionGenerator(cellDescriptionGenerator); } // Allow column hiding - for (Column c : getColumns()) { + for (final Column c : getColumns()) { c.setHidable(true); } setHiddenColumns(); 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 0845f2c55..b4709ccd1 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 @@ -8,13 +8,20 @@ */ package org.eclipse.hawkbit.ui.common.table; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +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.SPUIButtonStyleSmallNoBorder; 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; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.spring.events.EventBus; import com.vaadin.event.dd.DropHandler; import com.vaadin.server.FontAwesome; @@ -37,6 +44,16 @@ import com.vaadin.ui.VerticalLayout; public abstract class AbstractTableHeader extends VerticalLayout { private static final long serialVersionUID = 4881626370291837175L; + + @Autowired + protected I18N i18n; + + @Autowired + protected SpPermissionChecker permChecker; + + @Autowired + protected transient EventBus.SessionEventBus eventbus; + private Label headerCaption; @@ -59,10 +76,17 @@ public abstract class AbstractTableHeader extends VerticalLayout { /** * Initialze components. */ + @PostConstruct protected void init() { createComponents(); buildLayout(); restoreState(); + eventbus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventbus.unsubscribe(this); } private void createComponents() { 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 d6d37d5c0..33f838dd0 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 @@ -114,7 +114,7 @@ public class DistributionTagToken extends AbstractTagToken { distributionList.add(selectedDS.getId()); final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, tagNameSelected); - uinotification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(tagNameSelected, result, i18n)); + uinotification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(tagNameSelected, result, i18n)); return result; } @@ -214,7 +214,7 @@ public class DistributionTagToken extends AbstractTagToken { protected boolean isAssign(final DistributionSetTagAssignmentResult assignmentResult) { if (assignmentResult.getAssigned() > 0) { - final List assignedDsNames = assignmentResult.getAssignedDs().stream().map(t -> t.getId()) + final List assignedDsNames = assignmentResult.getAssignedEntity().stream().map(t -> t.getId()) .collect(Collectors.toList()); if (assignedDsNames.contains(managementUIState.getLastSelectedDsIdName().getId())) { return true; @@ -225,7 +225,7 @@ public class DistributionTagToken extends AbstractTagToken { protected boolean isUnassign(final DistributionSetTagAssignmentResult assignmentResult) { if (assignmentResult.getUnassigned() > 0) { - final List assignedDsNames = assignmentResult.getUnassignedDs().stream().map(t -> t.getId()) + final List assignedDsNames = assignmentResult.getUnassignedEntity().stream().map(t -> t.getId()) .collect(Collectors.toList()); if (assignedDsNames.contains(managementUIState.getLastSelectedDsIdName().getId())) { return true; 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 b21b8f075..658501b4d 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 @@ -81,7 +81,7 @@ public class TargetTagToken extends AbstractTargetTagToken { final Set targetList = new HashSet<>(); targetList.add(selectedTarget.getControllerId()); final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected); - uinotification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(tagNameSelected, result, i18n)); + uinotification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(tagNameSelected, result, i18n)); return result; } @@ -151,7 +151,7 @@ public class TargetTagToken extends AbstractTargetTagToken { protected boolean isAssign(final TargetTagAssignmentResult assignmentResult) { if (assignmentResult.getAssigned() > 0) { - final List assignedTargetNames = assignmentResult.getAssignedTargets().stream() + final List assignedTargetNames = assignmentResult.getAssignedEntity().stream() .map(t -> t.getControllerId()).collect(Collectors.toList()); if (assignedTargetNames.contains(managementUIState.getLastSelectedTargetIdName().getControllerId())) { return true; @@ -162,7 +162,7 @@ public class TargetTagToken extends AbstractTargetTagToken { protected boolean isUnassign(final TargetTagAssignmentResult assignmentResult) { if (assignmentResult.getUnassigned() > 0) { - final List unassignedTargetNamesList = assignmentResult.getUnassignedTargets().stream() + final List unassignedTargetNamesList = assignmentResult.getUnassignedEntity().stream() .map(t -> t.getControllerId()).collect(Collectors.toList()); if (unassignedTargetNamesList.contains(managementUIState.getLastSelectedTargetIdName().getControllerId())) { return true; 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 aa35c0622..1abc32a3e 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 @@ -8,10 +8,7 @@ */ package org.eclipse.hawkbit.ui.distributions.disttype; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery; -import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtonClickBehaviour; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtons; import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; @@ -23,7 +20,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -45,27 +41,12 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { private static final long serialVersionUID = 771251569981876005L; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManageDistUIState manageDistUIState; @Autowired private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria; - /** - * Initialize component. - * - * @param filterButtonClickBehaviour - * the clickable behaviour. - */ - @Override - public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { - super.init(filterButtonClickBehaviour); - eventBus.subscribe(this); - } - @Override protected String getButtonsTableId() { @@ -140,9 +121,4 @@ public class DSTypeFilterButtons extends AbstractFilterButtons { setContainerDataSource(createButtonsLazyQueryContainer()); } - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - } 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 068c28065..02c959286 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,14 +10,12 @@ package org.eclipse.hawkbit.ui.distributions.disttype; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -34,12 +32,6 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { private static final long serialVersionUID = 3433417459392880222L; - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private ManageDistUIState manageDistUIState; @@ -81,8 +73,7 @@ public class DSTypeFilterHeader extends AbstractFilterHeader { @Override protected void hideFilterButtonLayout() { manageDistUIState.setDistTypeFilterClosed(true); - eventbus.publish(this, DistributionsUIEvent.HIDE_DIST_FILTER_BY_TYPE); - + eventBus.publish(this, DistributionsUIEvent.HIDE_DIST_FILTER_BY_TYPE); } @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 d72fd971a..02916ae7c 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 @@ -13,12 +13,8 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -37,10 +33,8 @@ import org.eclipse.hawkbit.ui.management.dstable.DistributionAddUpdateWindowLayo import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; 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; @@ -72,15 +66,6 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { private static final String UNASSIGN_SOFT_MODULE = "unassignSoftModule"; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private SpPermissionChecker permissionChecker; - @Autowired private ManageDistUIState manageDistUIState; @@ -104,21 +89,16 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { private Long dsId; - private UI ui; - Map assignedSWModule = new HashMap<>(); /** * softwareLayout Initialize the component. */ @Override - @PostConstruct protected void init() { softwareModuleTable = new SoftwareModuleDetailsTable(); softwareModuleTable.init(i18n, true, permissionChecker, distributionSetManagement, eventBus, manageDistUIState); super.init(); - ui = UI.getCurrent(); - eventBus.subscribe(this); } protected VerticalLayout createTagsLayout() { @@ -321,12 +301,6 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { this.dsId = dsId; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * onEdit(com.vaadin.ui .Button.ClickEvent) - */ @Override protected void onEdit(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); @@ -336,68 +310,32 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { newDistWindow.setVisible(Boolean.TRUE); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getEditButtonId() - */ @Override protected String getEditButtonId() { return SPUIComponetIdProvider.DS_EDIT_BUTTON; } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * onLoadIsSwModuleSelected () - */ @Override protected Boolean onLoadIsTableRowSelected() { return manageDistUIState.getSelectedDistributions().isPresent() && !manageDistUIState.getSelectedDistributions().get().isEmpty(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * onLoadIsTableMaximized () - */ @Override protected Boolean onLoadIsTableMaximized() { return manageDistUIState.isDsTableMaximized(); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * populateDetailsWidget() - */ @Override protected void populateDetailsWidget() { populateDetailsWidget(selectedDsModule); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getDefaultCaption() - */ @Override protected String getDefaultCaption() { return i18n.get("distribution.details.header"); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * addTabs(com.vaadin. ui.TabSheet) - */ @Override protected void addTabs(final TabSheet detailsTab) { detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); @@ -407,23 +345,11 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * clearDetails() - */ @Override protected void clearDetails() { populateDetailsWidget(null); } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * hasEditSoftwareModulePermission() - */ @Override protected Boolean hasEditPermission() { return permissionChecker.hasUpdateDistributionPermission(); @@ -476,7 +402,7 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { }); } } - + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SaveActionWindowEvent saveActionWindowEvent) { if ((saveActionWindowEvent == SaveActionWindowEvent.SAVED_ASSIGNMENTS @@ -498,21 +424,6 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { } } - @PreDestroy - void destroy() { - /* - * It's good to do this, even though vaadin-spring will automatically - * unsubscribe . - */ - eventBus.unsubscribe(this); - } - - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.detailslayout.AbstractTableDetailsLayout# - * getTabSheetId() - */ @Override protected String getTabSheetId() { return null; 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 f8cb7a45b..6ac4a1007 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 @@ -8,10 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.dstable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DragEvent; @@ -20,10 +16,8 @@ import org.eclipse.hawkbit.ui.management.dstable.DistributionAddUpdateWindowLayo import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; 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; @@ -43,28 +37,12 @@ public class DistributionSetTableHeader extends AbstractTableHeader { private static final long serialVersionUID = -3483238438474530748L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private ManageDistUIState manageDistUIstate; @Autowired private DistributionAddUpdateWindowLayout addUpdateWindowLayout; - @Override - @PostConstruct - protected void init() { - super.init(); - eventbus.subscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionsUIEvent event) { if (event == DistributionsUIEvent.HIDE_DIST_FILTER_BY_TYPE) { @@ -181,11 +159,6 @@ public class DistributionSetTableHeader extends AbstractTableHeader { eventbus.publish(this, DragEvent.HIDE_DROP_HINT); } - @PreDestroy - void destroy() { - eventbus.unsubscribe(this); - } - @Override protected Boolean isAddNewItemAllowed() { return Boolean.TRUE; diff --git a/hawkbit-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 index 5b79b96f4..140fb41da 100644 --- a/hawkbit-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 @@ -16,10 +16,6 @@ import java.util.Map; import org.eclipse.hawkbit.ui.common.AbstractAcceptCriteria; 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.UINotification; -import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -39,29 +35,6 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { private static final Map> DROP_CONFIGS = createDropConfigurations(); - @Autowired - private transient UINotification uiNotification; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Override - protected void analyseDragComponent(final Component compsource) { - final String sourceID = getComponentId(compsource); - final Object event = DROP_HINTS_CONFIGS.get(sourceID); - eventBus.publish(this, event); - } - - @Override - protected void hideDropHints() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - } - - @Override - protected void invalidDrop() { - uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); - } - @Override protected String getComponentId(final Component component) { String id = component.getId(); @@ -78,11 +51,6 @@ public class DistributionsViewAcceptCriteria extends AbstractAcceptCriteria { return DROP_HINTS_CONFIGS; } - @Override - protected void publishDragStartEvent(final Object event) { - eventBus.publish(this, event); - } - @Override protected Map> getDropConfigurations() { return DROP_CONFIGS; 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 5b51bb224..8b7d2ada0 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,10 +15,6 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -30,13 +26,10 @@ 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.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.UINotification; 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; @@ -65,21 +58,6 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { Arrays.asList(DragEvent.DISTRIBUTION_TYPE_DRAG, DragEvent.DISTRIBUTION_DRAG, DragEvent.SOFTWAREMODULE_DRAG, DragEvent.SOFTWAREMODULE_TYPE_DRAG)); - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient UINotification notification; - - @Autowired - private transient UINotification uiNotification; - @Autowired private transient SystemManagement systemManagement; @@ -92,28 +70,6 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { @Autowired private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria; - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.DeleteActionsLayout#init() - */ - @Override - @PostConstruct - protected void init() { - super.init(); - 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 DragEvent event) { if (event == DragEvent.HIDE_DROP_HINT) { @@ -139,77 +95,34 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { } } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasDeletePermission() - */ @Override protected boolean hasDeletePermission() { return permChecker.hasDeleteDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasUpdatePermission() - */ @Override protected boolean hasUpdatePermission() { return permChecker.hasUpdateDistributionPermission(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getDeleteAreaLabel() - */ @Override protected String getDeleteAreaLabel() { return i18n.get("label.components.drop.area"); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getDeleteAreaId() - */ @Override protected String getDeleteAreaId() { return SPUIComponetIdProvider.DELETE_BUTTON_WRAPPER_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getDeleteLayoutAcceptCriteria () - */ @Override protected AcceptCriterion getDeleteLayoutAcceptCriteria() { - return distributionsViewAcceptCriteria; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * processDroppedComponent(com .vaadin.event.dd.DragAndDropEvent) - */ @Override protected void processDroppedComponent(final DragAndDropEvent event) { final Component sourceComponent = event.getTransferable().getSourceComponent(); @@ -298,7 +211,7 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { * message accordingly. */ - uiNotification.displayValidationError(i18n.get("message.targets.already.deleted")); + notification.displayValidationError(i18n.get("message.targets.already.deleted")); } else if (newDeletedDistributionsSize - existingDeletedDistributionsSize != distributionIdNameSet.size()) { /* * Not the all distributions dropped now are added to the delete @@ -306,7 +219,7 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { * delete list. Hence display warning message accordingly. */ - uiNotification.displayValidationError(i18n.get("message.dist.deleted.pending")); + notification.displayValidationError(i18n.get("message.dist.deleted.pending")); } } @@ -366,64 +279,12 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { return SPUIComponetIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE.equals(source.getId()); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getNoActionsButtonLabel() - */ - @Override - protected String getNoActionsButtonLabel() { - return i18n.get("button.no.actions"); - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getActionsButtonLabel() - */ - @Override - protected String getActionsButtonLabel() { - - return i18n.get("button.actions"); - - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * reloadActionCount() - */ @Override protected void restoreActionCount() { updateDSActionCount(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getUnsavedActionsWindowCaption () - */ - @Override - protected String getUnsavedActionsWindowCaption() { - return i18n.get("caption.save.window"); - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * unsavedActionsWindowClosed() - */ @Override protected void unsavedActionsWindowClosed() { final String message = distConfirmationWindowLayout.getConsolidatedMessage(); @@ -433,26 +294,12 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * getUnsavedActionsWindowContent () - */ @Override protected Component getUnsavedActionsWindowContent() { distConfirmationWindowLayout.init(); return distConfirmationWindowLayout; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.footer.AbstractDeleteActionsLayout# - * hasUnsavedActions() - */ @Override protected boolean hasUnsavedActions() { boolean unSavedActionsTypes = false; @@ -479,23 +326,11 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { return null; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * hasBulkUploadPermission() - */ @Override protected boolean hasBulkUploadPermission() { return false; } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * showBulkUploadWindow() - */ @Override protected void showBulkUploadWindow() { /** @@ -503,12 +338,6 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { */ } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout# - * restoreBulkUploadStatusCount() - */ @Override protected void restoreBulkUploadStatusCount() { /** 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 3b1a2cad6..7aa7d6f31 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 @@ -8,10 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.smtable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; @@ -20,10 +16,8 @@ import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; 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.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; 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; @@ -46,44 +40,16 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { private static final long serialVersionUID = -1052279281066089812L; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private SpPermissionChecker permissionChecker; - @Autowired private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow; @Autowired private ManageDistUIState manageDistUIState; - private UI ui; - private Long swModuleId; private SoftwareModule selectedSwModule; - @Override - @PostConstruct - protected void init() { - super.init(); - ui = UI.getCurrent(); - 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 SoftwareModuleEvent softwareModuleEvent) { if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE diff --git a/hawkbit-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 index 56d7706fc..badbc1492 100644 --- a/hawkbit-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 @@ -8,10 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.smtable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; @@ -19,10 +15,8 @@ import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; 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; @@ -43,14 +37,6 @@ public class SwModuleTableHeader extends AbstractTableHeader { private static final long serialVersionUID = 242961845006626297L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; @Autowired private ManageDistUIState manageDistUIState; @@ -58,18 +44,6 @@ public class SwModuleTableHeader extends AbstractTableHeader { @Autowired private SoftwareModuleAddUpdateWindow softwareModuleAddUpdateWindow; - @Override - @PostConstruct - protected void init() { - super.init(); - eventbus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventbus.unsubscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionsUIEvent event) { if (event == DistributionsUIEvent.HIDE_SM_FILTER_BY_TYPE) { diff --git a/hawkbit-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 index f086fed2c..146d8f019 100644 --- a/hawkbit-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 @@ -11,11 +11,8 @@ package org.eclipse.hawkbit.ui.distributions.smtype; import java.util.HashMap; import java.util.Map; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleTypeEvent; import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery; -import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtonClickBehaviour; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterButtons; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; import org.eclipse.hawkbit.ui.distributions.event.SaveActionWindowEvent; @@ -27,7 +24,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -47,21 +43,12 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { private static final long serialVersionUID = 6804534533362387433L; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManageDistUIState manageDistUIState; @Autowired private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria; - @Override - public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { - super.init(filterButtonClickBehaviour); - eventBus.subscribe(this); - } - @Override protected String getButtonsTableId() { return SPUIComponetIdProvider.SW_MODULE_TYPE_TABLE_ID; @@ -135,9 +122,5 @@ public class DistSMTypeFilterButtons extends AbstractFilterButtons { setContainerDataSource(createButtonsLazyQueryContainer()); } - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } } 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 edf20b206..e328b45a4 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 @@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.distributions.smtype; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.artifacts.smtype.CreateUpdateSoftwareTypeLayout; import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterHeader; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; @@ -19,7 +18,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -36,12 +34,6 @@ public class DistSMTypeFilterHeader extends AbstractFilterHeader { private static final long serialVersionUID = -8763788280848718344L; - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManageDistUIState manageDistUIState; 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 ecc4a26c6..a0de88fda 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 @@ -8,10 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.dstable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; @@ -21,10 +17,8 @@ import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; 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.SPUIComponetIdProvider; 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; @@ -46,15 +40,7 @@ public class DistributionDetails extends AbstractTableDetailsLayout { private static final long serialVersionUID = 350360207334118826L; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private SpPermissionChecker permissionChecker; - + @Autowired private ManagementUIState managementUIState; @@ -70,22 +56,13 @@ public class DistributionDetails extends AbstractTableDetailsLayout { private DistributionSet selectedDsModule; - private UI ui; - @Override - @PostConstruct protected void init() { - eventBus.subscribe(this); softwareModuleTable = new SoftwareModuleDetailsTable(); softwareModuleTable.init(i18n, false, permissionChecker, null, null, null); super.init(); - ui = UI.getCurrent(); } - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent distributionTableEvent) { 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 0cc857c30..6bcfb55ae 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 @@ -363,7 +363,7 @@ public class DistributionTable extends AbstractTable { final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distList, distTagName); - notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n)); + notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(distTagName, result, i18n)); if (result.getAssigned() >= 1 && managementUIState.getDistributionTableFilters().isNoTagSelected()) { refreshFilter(); } 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 d2ac628a8..6d4343878 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 @@ -8,10 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.dstable; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; @@ -19,10 +15,8 @@ import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; 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.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -43,33 +37,12 @@ import com.vaadin.ui.Window; public class DistributionTableHeader extends AbstractTableHeader { private static final long serialVersionUID = 7597766804650170127L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private ManagementUIState managementUIState; @Autowired private DistributionAddUpdateWindowLayout distributionAddUpdateWindowLayout; - @Override - @PostConstruct - protected void init() { - super.init(); - eventbus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventbus.unsubscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final ManagementUIEvent event) { if (event == ManagementUIEvent.HIDE_DISTRIBUTION_TAG_LAYOUT) { 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 287071fe8..57091b660 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,8 +11,6 @@ package org.eclipse.hawkbit.ui.management.dstag; import java.util.HashMap; import java.util.Map; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagUpdateEvent; @@ -31,7 +29,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -51,9 +48,6 @@ public class DistributionTagButtons extends AbstractFilterButtons { private static final long serialVersionUID = -8151483237450892057L; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private DistributionTagDropEvent spDistTagDropEvent; @@ -64,12 +58,6 @@ public class DistributionTagButtons extends AbstractFilterButtons { public void init(final AbstractFilterButtonClickBehaviour filterButtonClickBehaviour) { super.init(filterButtonClickBehaviour); addNewTag(new DistributionSetTag("NO TAG")); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); } @EventBusListenerMethod(scope = EventScope.SESSION) diff --git a/hawkbit-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 index 2d58849dc..df9253bdb 100644 --- a/hawkbit-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 @@ -10,14 +10,12 @@ package org.eclipse.hawkbit.ui.management.dstag; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.repository.SpPermissionChecker; 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.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -38,12 +36,6 @@ public class DistributionTagHeader extends AbstractFilterHeader { @Autowired private I18N i18n; - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private ManagementUIState managementUIState; @@ -90,7 +82,7 @@ public class DistributionTagHeader extends AbstractFilterHeader { @Override protected void hideFilterButtonLayout() { managementUIState.setDistTagFilterClosed(true); - eventbus.publish(this, ManagementUIEvent.HIDE_DISTRIBUTION_TAG_LAYOUT); + eventBus.publish(this, ManagementUIEvent.HIDE_DISTRIBUTION_TAG_LAYOUT); } @Override diff --git a/hawkbit-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 index f8d53bdef..5b1e09282 100644 --- a/hawkbit-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 @@ -150,7 +150,7 @@ public class DistributionTagDropEvent implements DropHandler { final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, distTagName); - notification.displaySuccess(HawkbitCommonUtil.getDistributionTagAssignmentMsg(distTagName, result, i18n)); + notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(distTagName, result, i18n)); if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty()) { eventBus.publish(this, TargetFilterEvent.FILTER_BY_TAG); } diff --git a/hawkbit-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 index 1c44014e8..ddc2c9c1d 100644 --- a/hawkbit-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 @@ -16,10 +16,6 @@ import java.util.Map; import org.eclipse.hawkbit.ui.common.AbstractAcceptCriteria; 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.UINotification; -import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -41,29 +37,6 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria { private static final Map DROP_HINTS_CONFIGS = createDropHintConfigurations(); - @Autowired - private transient UINotification uiNotification; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Override - protected void analyseDragComponent(final Component compsource) { - final String sourceID = getComponentId(compsource); - final Object event = DROP_HINTS_CONFIGS.get(sourceID); - eventBus.publish(this, event); - } - - @Override - protected void hideDropHints() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - } - - @Override - protected void invalidDrop() { - uiNotification.displayValidationError(SPUILabelDefinitions.ACTION_NOT_ALLOWED); - } - @Override protected String getComponentId(final Component component) { String id = component.getId(); @@ -80,11 +53,6 @@ public class ManagementViewAcceptCriteria extends AbstractAcceptCriteria { return DROP_HINTS_CONFIGS; } - @Override - protected void publishDragStartEvent(final Object event) { - eventBus.publish(this, event); - } - @Override protected Map> getDropConfigurations() { return DROP_CONFIGS; 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 1786429a1..b8c5494a3 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 @@ -11,10 +11,6 @@ package org.eclipse.hawkbit.ui.management.footer; import java.util.HashSet; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName; @@ -28,12 +24,9 @@ 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.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.UINotification; 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; @@ -56,17 +49,6 @@ import com.vaadin.ui.UI; public class DeleteActionsLayout extends AbstractDeleteActionsLayout { private static final long serialVersionUID = -8112907467821886253L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient UINotification notification; @Autowired private transient TagManagement tagManagementService; @@ -83,18 +65,6 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { @Autowired private CountMessageLabel countMessageLabel; - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final ManagementUIEvent event) { if (event == ManagementUIEvent.UPDATE_COUNT) { @@ -226,26 +196,11 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return true; } - @Override - protected String getNoActionsButtonLabel() { - return i18n.get("button.no.actions"); - } - - @Override - protected String getActionsButtonLabel() { - return i18n.get("button.actions"); - } - @Override protected void restoreActionCount() { updateActionCount(); } - @Override - protected String getUnsavedActionsWindowCaption() { - return i18n.get("caption.save.window"); - } - @Override protected void unsavedActionsWindowClosed() { final String message = manangementConfirmationWindowLayout.getConsolidatedMessage(); 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 a94ed6b5f..87854b22c 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 @@ -10,11 +10,7 @@ package org.eclipse.hawkbit.ui.management.targettable; import java.net.URI; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.apache.commons.lang3.StringUtils; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; @@ -25,12 +21,10 @@ 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.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; 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; @@ -60,15 +54,6 @@ public class TargetDetails extends AbstractTableDetailsLayout { private static final long serialVersionUID = 4571732743399605843L; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private SpPermissionChecker permChecker; - @Autowired private ManagementUIState managementUIState; @@ -87,11 +72,9 @@ public class TargetDetails extends AbstractTableDetailsLayout { * Initialize the Target details. */ @Override - @PostConstruct public void init() { super.init(); targetAddUpdateWindowLayout.init(); - eventBus.subscribe(this); } @Override @@ -286,7 +269,7 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected Boolean hasEditPermission() { - return permChecker.hasUpdateTargetPermission(); + return permissionChecker.hasUpdateTargetPermission(); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -312,11 +295,6 @@ public class TargetDetails extends AbstractTableDetailsLayout { } } - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - @Override protected String getTabSheetId() { return SPUIComponetIdProvider.TARGET_DETAILS_TABSHEET; 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 3df8fe6a4..6884e8906 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 @@ -644,7 +644,7 @@ public class TargetTable extends AbstractTable implements Handler { final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); - notification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(targTagName, result, i18n)); + notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, i18n)); if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty()) { refreshFilter(); } 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 05b6bfe4d..5ad6e3c28 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 @@ -11,10 +11,6 @@ package org.eclipse.hawkbit.ui.management.targettable; import java.util.HashSet; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -29,7 +25,6 @@ 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.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUITargetDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; @@ -63,12 +58,6 @@ public class TargetTableHeader extends AbstractTableHeader { private static final long serialVersionUID = -8647521126666320022L; - @Autowired - private I18N i18n; - - @Autowired - private SpPermissionChecker permChecker; - @Autowired private UINotification notification; @@ -90,21 +79,14 @@ public class TargetTableHeader extends AbstractTableHeader { private Boolean isComplexFilterViewDisplayed = Boolean.FALSE; @Override - @PostConstruct protected void init() { super.init(); // creating add window for adding new target targetAddUpdateWindow.init(); targetBulkUpdateWindow.init(); - eventBus.subscribe(this); onLoadRestoreState(); } - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final ManagementUIEvent event) { if (event == ManagementUIEvent.HIDE_TARGET_TAG_LAYOUT) { 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 169573f39..54f4c382b 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 @@ -13,8 +13,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; @@ -38,7 +36,6 @@ import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -63,9 +60,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { private static final long serialVersionUID = 5049554600376508073L; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManagementUIState managementUIState; @@ -99,12 +93,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { this.filterButtonClickBehaviour = filterButtonClickBehaviour; super.init(filterButtonClickBehaviour); addNewTargetTag(new TargetTag("NO TAG")); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -244,7 +232,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); - notification.displaySuccess(HawkbitCommonUtil.getTargetTagAssigmentMsg(targTagName, result, i18n)); + notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, i18n)); if (result.getAssigned() >= 1 && managementUIState.getTargetTableFilters().isNoTagSelected()) { eventBus.publish(this, ManagementUIEvent.ASSIGN_TARGET_TAG); 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 7d0b5c76c..6093843fd 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 @@ -10,14 +10,12 @@ package org.eclipse.hawkbit.ui.management.targettag; import javax.annotation.PostConstruct; -import org.eclipse.hawkbit.repository.SpPermissionChecker; 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.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; @@ -32,15 +30,9 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { private static final long serialVersionUID = 3046367045669148009L; - @Autowired - private SpPermissionChecker permChecker; - @Autowired private I18N i18n; - @Autowired - private transient EventBus.SessionEventBus eventbus; - @Autowired private CreateUpdateTargetTagLayout createUpdateTargetTagLayout; @@ -58,7 +50,6 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { @Override protected String getHideButtonId() { - return SPUIComponetIdProvider.HIDE_TARGET_TAGS; } @@ -87,7 +78,7 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { @Override protected void hideFilterButtonLayout() { managementUIState.setTargetTagFilterClosed(true); - eventbus.publish(this, ManagementUIEvent.HIDE_TARGET_TAG_LAYOUT); + eventBus.publish(this, ManagementUIEvent.HIDE_TARGET_TAG_LAYOUT); } @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 9151f3932..6376e505b 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 @@ -15,9 +15,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; @@ -33,7 +30,6 @@ 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.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -46,7 +42,6 @@ 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.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -82,11 +77,6 @@ public class RolloutListGrid extends AbstractGrid { private static final String START_OPTION = "Start"; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; @Autowired private transient RolloutManagement rolloutManagement; @@ -105,17 +95,6 @@ public class RolloutListGrid extends AbstractGrid { private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final RolloutEvent event) { @@ -245,7 +224,7 @@ public class RolloutListGrid extends AbstractGrid { @Override protected void setColumnProperties() { - List columnList = new ArrayList<>(); + final List columnList = new ArrayList<>(); columnList.add(SPUILabelDefinitions.VAR_NAME); columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); columnList.add(SPUILabelDefinitions.VAR_STATUS); @@ -265,13 +244,13 @@ public class RolloutListGrid extends AbstractGrid { @Override protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); + final List columnsToBeHidden = new ArrayList<>(); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { + for (final Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } @@ -318,7 +297,7 @@ public class RolloutListGrid extends AbstractGrid { @Override public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; + final String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { return "centeralign"; } @@ -327,18 +306,18 @@ public class RolloutListGrid extends AbstractGrid { }); } - private void onClickOfRolloutName(RendererClickEvent event) { + private void onClickOfRolloutName(final RendererClickEvent event) { rolloutUIState.setRolloutId((long) event.getItemId()); final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); rolloutUIState.setRolloutName(rolloutName); - String ds = (String) getContainerDataSource().getItem(event.getItemId()) + final String ds = (String) getContainerDataSource().getItem(event.getItemId()) .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); rolloutUIState.setRolloutDistributionSet(ds); eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); } - private void onClickOfActionBtn(RendererClickEvent event) { + private void onClickOfActionBtn(final RendererClickEvent event) { final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); contextMenu.open(event.getClientX(), event.getClientY()); @@ -388,11 +367,11 @@ public class RolloutListGrid extends AbstractGrid { } private String convertRolloutStatusToString(final RolloutStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); + final StatusFontIcon statusFontIcon = statusIconMap.get(value); if (statusFontIcon == null) { return null; } - String codePoint = statusFontIcon.getFontIcon() != null + final String codePoint = statusFontIcon.getFontIcon() != null ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); @@ -441,12 +420,12 @@ public class RolloutListGrid extends AbstractGrid { private static final long serialVersionUID = 2544026030795375748L; private final FontAwesome fontIcon; - public FontIconGenerator(FontAwesome icon) { + public FontIconGenerator(final FontAwesome icon) { this.fontIcon = icon; } @Override - public String getValue(Item item, Object itemId, Object propertyId) { + public String getValue(final Item item, final Object itemId, final Object propertyId) { return fontIcon.getHtml(); } @@ -456,7 +435,7 @@ public class RolloutListGrid extends AbstractGrid { } } - private String getDescription(CellReference cell) { + private String getDescription(final CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { @@ -570,14 +549,14 @@ public class RolloutListGrid extends AbstractGrid { private static final long serialVersionUID = -5794528427855153924L; @Override - public TotalTargetCountStatus convertToModel(String value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public TotalTargetCountStatus convertToModel(final String value, final Class targetType, + final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { return null; } @Override - public String convertToPresentation(TotalTargetCountStatus value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public String convertToPresentation(final TotalTargetCountStatus value, final Class targetType, + final Locale locale) 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/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 44d945efd..978a93498 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,9 +15,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; @@ -32,7 +29,6 @@ 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.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -41,7 +37,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -64,12 +59,6 @@ import com.vaadin.ui.renderers.HtmlRenderer; public class RolloutGroupListGrid extends AbstractGrid { private static final long serialVersionUID = 4060904914954370524L; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient RolloutGroupManagement rolloutGroupManagement; @@ -81,18 +70,6 @@ public class RolloutGroupListGrid extends AbstractGrid { private transient Map statusIconMap = new EnumMap<>(RolloutGroupStatus.class); - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final RolloutEvent event) { if (RolloutEvent.SHOW_ROLLOUT_GROUPS != event) { @@ -218,7 +195,7 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override protected void setColumnProperties() { - List columnList = new ArrayList<>(); + final List columnList = new ArrayList<>(); columnList.add(SPUILabelDefinitions.VAR_NAME); columnList.add(SPUILabelDefinitions.VAR_STATUS); columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); @@ -251,13 +228,13 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); + final List columnsToBeHidden = new ArrayList<>(); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { + for (final Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } } @@ -267,18 +244,18 @@ public class RolloutGroupListGrid extends AbstractGrid { return cell -> getDescription(cell); } - private void onClickOfRolloutGroupName(RendererClickEvent event) { + private void onClickOfRolloutGroupName(final RendererClickEvent event) { rolloutUIState .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); } private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); + final StatusFontIcon statusFontIcon = statusIconMap.get(value); if (statusFontIcon == null) { return null; } - String codePoint = statusFontIcon.getFontIcon() != null + final String codePoint = statusFontIcon.getFontIcon() != null ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); @@ -298,7 +275,7 @@ public class RolloutGroupListGrid extends AbstractGrid { new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); } - private String getDescription(CellReference cell) { + private String getDescription(final CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { @@ -318,7 +295,7 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + final String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { return "centeralign"; @@ -339,14 +316,14 @@ public class RolloutGroupListGrid extends AbstractGrid { private static final long serialVersionUID = -9205943894818450807L; @Override - public TotalTargetCountStatus convertToModel(String value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public TotalTargetCountStatus convertToModel(final String value, final Class targetType, + final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { return null; } @Override - public String convertToPresentation(TotalTargetCountStatus value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public String convertToPresentation(final TotalTargetCountStatus value, final Class targetType, + final Locale locale) 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 e55b30111..e3bedc7bf 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 @@ -14,9 +14,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; @@ -26,7 +23,6 @@ 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.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -35,7 +31,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -55,29 +50,12 @@ import com.vaadin.spring.annotation.ViewScope; public class RolloutGroupTargetsListGrid extends AbstractGrid { private static final long serialVersionUID = -2244756637458984597L; - - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - + @Autowired private transient RolloutUIState rolloutUIState; private transient Map statusIconMap = new EnumMap<>(Status.class); - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final RolloutEvent event) { @@ -158,7 +136,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { @Override protected void setColumnProperties() { - List columnList = new ArrayList<>(); + final List columnList = new ArrayList<>(); columnList.add(SPUILabelDefinitions.VAR_NAME); columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnList.add(SPUILabelDefinitions.VAR_CREATED_BY); @@ -241,11 +219,11 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { } private String processActionStatus(final Status status) { - StatusFontIcon statusFontIcon = statusIconMap.get(status); + final StatusFontIcon statusFontIcon = statusIconMap.get(status); if (statusFontIcon == null) { return null; } - String codePoint = statusFontIcon.getFontIcon() != null + final String codePoint = statusFontIcon.getFontIcon() != null ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), null); } @@ -286,7 +264,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { } } - private String getDescription(CellReference cell) { + private String getDescription(final CellReference cell) { if (!SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return null; } @@ -304,7 +282,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { return RolloutGroupStatus.READY.toString().toLowerCase(); } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - String ds = rolloutUIState.getRolloutDistributionSet().isPresent() + final String ds = rolloutUIState.getRolloutDistributionSet().isPresent() ? rolloutUIState.getRolloutDistributionSet().get() : ""; return i18n.get("message.dist.already.assigned", new Object[] { ds }); } 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 3f947cfd0..3abd73592 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,14 +24,14 @@ import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.im.authentication.UserPrincipal; import org.eclipse.hawkbit.repository.SoftwareManagement; +import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; -import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; +import org.eclipse.hawkbit.repository.model.NamedEntity; 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.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetInfo.PollStatus; -import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; @@ -868,7 +868,7 @@ public final class HawkbitCommonUtil { /** * Display Target Tag action message. * - * @param targTagName + * @param tagName * as tag name * @param result * as TargetTagAssigmentResult @@ -878,7 +878,7 @@ public final class HawkbitCommonUtil { * I18N * @return message */ - public static String getTargetTagAssigmentMsg(final String targTagName, final TargetTagAssignmentResult result, + public static String createAssignmentMessage(final String tagName, final AssignmentResult result, final I18N i18n) { final StringBuilder formMsg = new StringBuilder(); final int assignedCount = result.getAssigned(); @@ -887,10 +887,10 @@ public final class HawkbitCommonUtil { if (assignedCount == 1) { formMsg.append(i18n.get("message.target.assigned.one", - new Object[] { result.getAssignedTargets().get(0).getName(), targTagName })).append("
"); + new Object[] { result.getAssignedEntity().get(0).getName(), tagName })).append("
"); } else if (assignedCount > 1) { - formMsg.append(i18n.get("message.target.assigned.many", new Object[] { assignedCount, targTagName })) + formMsg.append(i18n.get("message.target.assigned.many", new Object[] { assignedCount, tagName })) .append("
"); if (alreadyAssignedCount > 0) { @@ -902,55 +902,10 @@ public final class HawkbitCommonUtil { if (unassignedCount == 1) { formMsg.append(i18n.get("message.target.unassigned.one", - new Object[] { result.getUnassignedTargets().get(0).getName(), targTagName })).append("
"); + new Object[] { result.getUnassignedEntity().get(0).getName(), tagName })).append("
"); } else if (unassignedCount > 1) { - formMsg.append(i18n.get("message.target.unassigned.many", new Object[] { unassignedCount, targTagName })) - .append("
"); - } - return formMsg.toString(); - } - - /** - * Get message to be displayed after distribution tag assignment. - * - * @param targTagName - * tag name - * @param result - * DistributionSetTagAssigmentResult - * @param tagsClickedList - * list of clicked tags - * @param i18n - * I18N - * @return message - */ - public static String getDistributionTagAssignmentMsg(final String targTagName, - final DistributionSetTagAssignmentResult result, final I18N i18n) { - final StringBuilder formMsg = new StringBuilder(); - final int assignedCount = result.getAssigned(); - final int alreadyAssignedCount = result.getAlreadyAssigned(); - final int unassignedCount = result.getUnassigned(); - - if (assignedCount == 1) { - formMsg.append(i18n.get("message.target.assigned.one", - new Object[] { result.getAssignedDs().get(0).getName(), targTagName })).append("
"); - - } else if (assignedCount > 1) { - formMsg.append(i18n.get("message.target.assigned.many", new Object[] { assignedCount, targTagName })) - .append("
"); - - if (alreadyAssignedCount > 0) { - final String alreadyAssigned = i18n.get("message.target.alreadyAssigned", - new Object[] { alreadyAssignedCount }); - formMsg.append(alreadyAssigned).append("
"); - } - } - - if (unassignedCount == 1) { - formMsg.append(i18n.get("message.target.unassigned.one", - new Object[] { result.getUnassignedDs().get(0).getName(), targTagName })).append("
"); - } else if (unassignedCount > 1) { - formMsg.append(i18n.get("message.target.unassigned.many", new Object[] { unassignedCount, targTagName })) + formMsg.append(i18n.get("message.target.unassigned.many", new Object[] { unassignedCount, tagName })) .append("
"); } return formMsg.toString(); From 87661624ba0f57edf3f3e513624b3a59a7eb78d0 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 4 Apr 2016 18:02:43 +0200 Subject: [PATCH 075/344] Refactoring after review - added new method to HawkbitCommenUtil to reduce duplicated code - added early return Signed-off-by: Jonathan Philip Knoblauch --- .../targettable/BulkUploadHandler.java | 14 ++++---- .../ui/rollout/rollout/RolloutListGrid.java | 6 +--- .../rolloutgroup/RolloutGroupListGrid.java | 36 +++++++++---------- .../RolloutGroupTargetsListGrid.java | 6 +--- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 26 +++++++++++--- 5 files changed, 46 insertions(+), 42 deletions(-) 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 1a388c324..d52537a92 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 @@ -325,14 +325,14 @@ public class BulkUploadHandler extends CustomComponent tagData.getName()); } } - if (!deletedTags.isEmpty()) { - if (deletedTags.size() == 1) { - return i18n.get("message.bulk.upload.tag.assignment.failed", deletedTags.get(0)); - } else { - return i18n.get("message.bulk.upload.tag.assignments.failed"); - } + if (deletedTags.isEmpty()) { + return null; + } + if (deletedTags.size() == 1) { + return i18n.get("message.bulk.upload.tag.assignment.failed", deletedTags.get(0)); + } else { + return i18n.get("message.bulk.upload.tag.assignments.failed"); } - return null; } private boolean ifTagsSelected() { 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 d60d72527..f17a93b56 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 @@ -549,11 +549,7 @@ public class RolloutListGrid extends AbstractGrid { private String convertRolloutStatusToString(final RolloutStatus value) { final StatusFontIcon statusFontIcon = statusIconMap.get(value); - if (statusFontIcon == null) { - return null; - } - final String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); } 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 bb4adfe4a..a87bcc525 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 @@ -218,7 +218,7 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override protected void setColumnProperties() { - List columnList = new ArrayList<>(); + final List columnList = new ArrayList<>(); columnList.add(SPUILabelDefinitions.VAR_NAME); columnList.add(SPUILabelDefinitions.VAR_STATUS); columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); @@ -240,7 +240,7 @@ public class RolloutGroupListGrid extends AbstractGrid { createRolloutGroupStatusToFontMap(); getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutGroupStatusConverter()); - + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), new TotalTargetCountStatusConverter()); if (permissionChecker.hasRolloutTargetsReadPermission()) { @@ -251,13 +251,13 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); + final List columnsToBeHidden = new ArrayList<>(); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { + for (final Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } } @@ -267,14 +267,12 @@ public class RolloutGroupListGrid extends AbstractGrid { return cell -> getDescription(cell); } - private void onClickOfRolloutGroupName(RendererClickEvent event) { + private void onClickOfRolloutGroupName(final RendererClickEvent event) { rolloutUIState .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); } - - private void createRolloutGroupStatusToFontMap() { statusIconMap.put(RolloutGroupStatus.FINISHED, new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); @@ -288,7 +286,7 @@ public class RolloutGroupListGrid extends AbstractGrid { new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); } - private String getDescription(CellReference cell) { + private String getDescription(final CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { @@ -308,7 +306,7 @@ public class RolloutGroupListGrid extends AbstractGrid { @Override public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + final String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { return "centeralign"; @@ -329,14 +327,16 @@ public class RolloutGroupListGrid extends AbstractGrid { private static final long serialVersionUID = -9205943894818450807L; @Override - public TotalTargetCountStatus convertToModel(String value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public TotalTargetCountStatus convertToModel(final String value, + final Class targetType, final Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { return null; } @Override - public String convertToPresentation(TotalTargetCountStatus value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + public String convertToPresentation(final TotalTargetCountStatus value, + final Class targetType, final Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); } @@ -381,14 +381,10 @@ public class RolloutGroupListGrid extends AbstractGrid { public Class getPresentationType() { return String.class; } - + private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); - if (statusFontIcon == null) { - return null; - } - String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + final StatusFontIcon statusFontIcon = statusIconMap.get(value); + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); 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 0099dfc95..0a1446169 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 @@ -238,11 +238,7 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { private String processActionStatus(final Status status) { final StatusFontIcon statusFontIcon = statusIconMap.get(status); - if (statusFontIcon == null) { - return null; - } - final String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), null); } 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 e697e220e..a8c66a2a8 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 @@ -37,6 +37,7 @@ import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; import org.eclipse.hawkbit.ui.management.dstable.DistributionTable; import org.eclipse.hawkbit.ui.management.targettable.TargetTable; +import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.userdetails.UserDetails; @@ -1359,12 +1360,12 @@ public final class HawkbitCommonUtil { * details of status and count * @return String */ - public static String getFormattedString(Map details) { - StringBuilder val = new StringBuilder(); + public static String getFormattedString(final Map details) { + final StringBuilder val = new StringBuilder(); if (details == null || details.isEmpty()) { return null; } - for (Entry entry : details.entrySet()) { + for (final Entry entry : details.entrySet()) { val.append(entry.getKey()).append(":").append(entry.getValue()).append(","); } return val.substring(0, val.length() - 1); @@ -1382,8 +1383,8 @@ public final class HawkbitCommonUtil { * label id * @return */ - public static String getStatusLabelDetailsInString(String value, String style, String id) { - StringBuilder val = new StringBuilder(); + public static String getStatusLabelDetailsInString(final String value, final String style, final String id) { + final StringBuilder val = new StringBuilder(); if (!Strings.isNullOrEmpty(value)) { val.append("value:").append(value).append(","); } @@ -1394,4 +1395,19 @@ public final class HawkbitCommonUtil { return val.toString(); } + /** + * Receive the code point of a given StatusFontIcon. + * + * @param statusFontIcon + * the status font icon + * @return the code point of the StatusFontIcon + */ + public static String getCodePoint(final StatusFontIcon statusFontIcon) { + if (statusFontIcon == null) { + return null; + } + return statusFontIcon.getFontIcon() != null ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) + : null; + } + } From 16fff8db979f7052e4a070248eb19fe2084b25b6 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 5 Apr 2016 10:50:31 +0200 Subject: [PATCH 076/344] Refactoring after review - removed else when not needed - return the if statement directly in the isDirectory method Signed-off-by: Jonathan Philip Knoblauch --- .../hawkbit/ui/artifacts/upload/UploadLayout.java | 5 +---- .../ui/management/targettable/BulkUploadHandler.java | 10 ++++------ .../RolloutGroupTargetsListGrid.java | 8 ++++---- 3 files changed, 9 insertions(+), 14 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 3fb735284..7376cce13 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,10 +222,7 @@ public class UploadLayout extends VerticalLayout { } private boolean isDirectory(final Html5File file) { - if (Strings.isNullOrEmpty(file.getType()) && file.getFileSize() % 4096 == 0) { - return true; - } - return false; + return Strings.isNullOrEmpty(file.getType()) && file.getFileSize() % 4096 == 0; } } 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 d52537a92..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 @@ -306,11 +306,10 @@ public class BulkUploadHandler extends CustomComponent final DistributionSetIdName dsSelected = (DistributionSetIdName) comboBox.getValue(); if (distributionSetManagement.findDistributionSetById(dsSelected.getId()) == null) { return i18n.get("message.bulk.upload.assignment.failed"); - } else { - deploymentManagement.assignDistributionSet(targetBulkUpload.getDsNameAndVersion().getId(), actionType, - forcedTimeStamp, targetsList.toArray(new String[targetsList.size()])); - return null; } + deploymentManagement.assignDistributionSet(targetBulkUpload.getDsNameAndVersion().getId(), actionType, + forcedTimeStamp, targetsList.toArray(new String[targetsList.size()])); + return null; } private String tagAssignment() { @@ -330,9 +329,8 @@ public class BulkUploadHandler extends CustomComponent } if (deletedTags.size() == 1) { return i18n.get("message.bulk.upload.tag.assignment.failed", deletedTags.get(0)); - } else { - return i18n.get("message.bulk.upload.tag.assignments.failed"); } + return i18n.get("message.bulk.upload.tag.assignments.failed"); } private boolean ifTagsSelected() { 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 0a1446169..fe17b3cba 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 @@ -248,13 +248,13 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { return HawkbitCommonUtil.getStatusLabelDetailsInString( Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", null); - } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { + } + if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { return HawkbitCommonUtil.getStatusLabelDetailsInString( Integer.toString(FontAwesome.MINUS_CIRCLE.getCodepoint()), "statusIconBlue", null); - } else { - return HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.QUESTION_CIRCLE.getCodepoint()), "statusIconBlue", null); } + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.QUESTION_CIRCLE.getCodepoint()), "statusIconBlue", null); } } From 421bd9154ca545ace4e47fce05b4215ec7c12218 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 5 Apr 2016 12:13:36 +0200 Subject: [PATCH 077/344] fix license header of UrlProtocol enum --- .../src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java index 4dd84b7da..77c23ad0d 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/UrlProtocol.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.api; From 9c9bdf640650ef4108234551f2032c09cf427e1a Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 5 Apr 2016 12:20:49 +0200 Subject: [PATCH 078/344] fix json creator for PagedList for creating clients Signed-off-by: Michael Hirsch --- .../hawkbit/rest/resource/model/PagedList.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java index 880ee0c16..757a6106e 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java @@ -14,9 +14,11 @@ import javax.validation.constraints.NotNull; import org.springframework.hateoas.ResourceSupport; +import com.fasterxml.jackson.annotation.JsonCreator; 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; /** * A list representation with meta data for pagination, e.g. containing the @@ -31,7 +33,9 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; @JsonInclude(Include.NON_NULL) public class PagedList extends ResourceSupport { + @JsonProperty private final List content; + @JsonProperty private final long totalElements; private final int size; @@ -41,14 +45,16 @@ public class PagedList extends ResourceSupport { * * @param content * the actual content of the list - * @param total + * @param totalElements * the total amount of elements * @throws NullPointerException * in case {@code content} is {@code null}. */ - public PagedList(@NotNull final List content, final long total) { + @JsonCreator + public PagedList(@JsonProperty("content") @NotNull final List content, + @JsonProperty("totalElements") final long totalElements) { this.size = content.size(); - this.totalElements = total; + this.totalElements = totalElements; this.content = content; } From c47c29519d9902943f2b3e685f5e35a6d0f31be1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 5 Apr 2016 12:23:26 +0200 Subject: [PATCH 079/344] Add missing @PostConstruct Signed-off-by: SirWayne --- .../ui/common/footer/AbstractDeleteActionsLayout.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 cdf9ac354..f3b8b72e7 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 @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.ui.common.footer; +import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; @@ -41,9 +42,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Parent class for footer layout. * - * - * - * */ public abstract class AbstractDeleteActionsLayout extends VerticalLayout implements DropHandler { @@ -72,6 +70,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme /** * Initialize. */ + @PostConstruct protected void init() { if (hasCountMessage() || hasDeletePermission() || hasUpdatePermission() || hasBulkUploadPermission()) { createComponents(); From 5c0257adb99eb79fb83253a5b9f8c622ef32ecff Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 5 Apr 2016 12:35:01 +0200 Subject: [PATCH 080/344] Reduce more code Signed-off-by: SirWayne --- .../common/tagdetails/AbstractTagToken.java | 27 ++++++++++ .../tagdetails/AbstractTargetTagToken.java | 29 ----------- .../tagdetails/DistributionTagToken.java | 51 ++++--------------- .../ui/common/tagdetails/TargetTagToken.java | 6 +-- 4 files changed, 39 insertions(+), 74 deletions(-) diff --git a/hawkbit-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 index a00b8ce70..4404e1f8a 100644 --- a/hawkbit-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 @@ -13,10 +13,17 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; 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; import org.vaadin.tokenfield.TokenField; import org.vaadin.tokenfield.TokenField.InsertPosition; @@ -52,13 +59,33 @@ public abstract class AbstractTagToken implements Serializable { protected final Map tokensAdded = new HashMap<>(); protected CssLayout tokenLayout = new CssLayout(); + + @Autowired + protected SpPermissionChecker checker; + @Autowired + protected I18N i18n; + + @Autowired + protected UINotification uinotification; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + @Autowired protected ManagementUIState managementUIState; + @PostConstruct protected void init() { createTokenField(); checkIfTagAssignedIsAllowed(); + eventBus.subscribe(this); + } + + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); } private void createTokenField() { 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 efedbe3bc..c38a97228 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,54 +8,25 @@ */ package org.eclipse.hawkbit.ui.common.tagdetails; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.TargetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; -import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.TargetTag; -import org.eclipse.hawkbit.ui.utils.I18N; 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.ui.UI; - /** * Abstract class for target tag token layout. */ public abstract class AbstractTargetTagToken extends AbstractTagToken { private static final long serialVersionUID = 7772876588903171201L; - protected UI ui; - - @Autowired - protected transient EventBus.SessionEventBus eventBus; - - @Autowired - protected I18N i18n; @Autowired protected transient TagManagement tagManagement; - @Autowired - protected SpPermissionChecker checker; - @Override - @PostConstruct - protected void init() { - super.init(); - ui = UI.getCurrent(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } @EventBusListenerMethod(scope = EventScope.SESSION) void onEventTargetTagCreated(final TargetTagCreatedBulkEvent event) { 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 33f838dd0..9a245229b 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,7 +14,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; @@ -22,7 +21,6 @@ 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.SpPermissionChecker; import org.eclipse.hawkbit.repository.TagManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; @@ -31,10 +29,7 @@ import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.UINotification; 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; @@ -52,19 +47,6 @@ import com.vaadin.ui.UI; public class DistributionTagToken extends AbstractTagToken { private static final long serialVersionUID = -8022738301736043396L; - - @Autowired - private SpPermissionChecker spChecker; - - @Autowired - private I18N i18n; - - @Autowired - private UINotification uinotification; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient TagManagement tagManagement; @@ -73,20 +55,9 @@ public class DistributionTagToken extends AbstractTagToken { private DistributionSet selectedDS; - private UI ui; - // To Be Done : have to set this value based on view??? private static final Boolean NOTAGS_SELECTED = Boolean.FALSE; - @Override - @PostConstruct - protected void init() { - super.init(); - ui = UI.getCurrent(); - eventBus.subscribe(this); - - } - @Override protected String getTagStyleName() { return "distribution-tag-"; @@ -140,7 +111,7 @@ public class DistributionTagToken extends AbstractTagToken { @Override protected Boolean isToggleTagAssignmentAllowed() { - return spChecker.hasUpdateDistributionPermission(); + return checker.hasUpdateDistributionPermission(); } @Override @@ -163,18 +134,15 @@ public class DistributionTagToken extends AbstractTagToken { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent distributionTableEvent) { - if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.ON_VALUE_CHANGE) { - ui.access(() -> { - /** - * distributionTableEvent.getDistributionSet() is null when - * table has no data. - */ - if (distributionTableEvent.getDistributionSet() != null) { - selectedDS = distributionTableEvent.getDistributionSet(); - repopulateToken(); - } - }); + if (distributionTableEvent.getDistributionComponentEvent() != DistributionComponentEvent.ON_VALUE_CHANGE) { + return; } + UI.getCurrent().access(() -> { + if (distributionTableEvent.getDistributionSet() != null) { + selectedDS = distributionTableEvent.getDistributionSet(); + repopulateToken(); + } + }); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -234,6 +202,7 @@ public class DistributionTagToken extends AbstractTagToken { return false; } + @Override @PreDestroy void destroy() { eventBus.unsubscribe(this); 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 658501b4d..376e7d905 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 @@ -32,6 +32,7 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Item; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.UI; /** * Implementation of Target tag token. @@ -175,10 +176,7 @@ public class TargetTagToken extends AbstractTargetTagToken { void onEvent(final TargetTableEvent targetTableEvent) { if (targetTableEvent.getTargetComponentEvent() == TargetComponentEvent.SELECTED_TARGET && targetTableEvent.getTarget() != null) { - ui.access(() -> { - /** - * targetTableEvent.getTarget() is null when table has no data. - */ + UI.getCurrent().access(() -> { selectedTarget = targetTableEvent.getTarget(); repopulateToken(); }); From bf168ffb706ec6ca9d438b283796073473d7ef29 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 5 Apr 2016 14:00:57 +0200 Subject: [PATCH 081/344] reduced duplicate code. --- .../model/DistributionSetMetadata.java | 52 ++-------- .../hawkbit/repository/model/MetaData.java | 98 +++++++++++++++++++ .../model/SoftwareModuleMetadata.java | 53 ++-------- 3 files changed, 111 insertions(+), 92 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java 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 7b2e637b9..28afd5517 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,6 @@ */ package org.eclipse.hawkbit.repository.model; -import java.io.Serializable; - -import javax.persistence.Basic; -import javax.persistence.Column; import javax.persistence.ConstraintMode; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -29,24 +25,16 @@ import javax.persistence.Table; @IdClass(DsMetadataCompositeKey.class) @Entity @Table(name = "sp_ds_metadata") -public class DistributionSetMetadata implements Serializable { +public class DistributionSetMetadata extends 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; - @Id @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ds_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_ds")) private DistributionSet distributionSet; public DistributionSetMetadata() { - // Default constructor for JPA. + super(); } /** @@ -57,35 +45,18 @@ public class DistributionSetMetadata implements Serializable { * @param value */ public DistributionSetMetadata(final String key, final DistributionSet distributionSet, final String value) { - this.key = key; + super(key, value); this.distributionSet = distributionSet; - this.value = value; } public DsMetadataCompositeKey getId() { - return new DsMetadataCompositeKey(distributionSet, key); - } - - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; + return new DsMetadataCompositeKey(distributionSet, getKey()); } public void setDistributionSet(final DistributionSet distributionSet) { this.distributionSet = distributionSet; } - public String getValue() { - return value; - } - - public void setValue(final String value) { - this.value = value; - } - public DistributionSet getDistributionSet() { return distributionSet; } @@ -93,9 +64,8 @@ public class DistributionSetMetadata implements Serializable { @Override public int hashCode() { final int prime = 31; - int result = 1; - result = prime * result + (distributionSet == null ? 0 : distributionSet.hashCode()); - result = prime * result + (key == null ? 0 : key.hashCode()); + int result = super.hashCode(); + result = prime * result + ((distributionSet == null) ? 0 : distributionSet.hashCode()); return result; } @@ -104,7 +74,7 @@ public class DistributionSetMetadata implements Serializable { if (this == obj) { return true; } - if (obj == null) { + if (!super.equals(obj)) { return false; } if (!(obj instanceof DistributionSetMetadata)) { @@ -118,14 +88,6 @@ public class DistributionSetMetadata implements Serializable { } else if (!distributionSet.equals(other.distributionSet)) { return false; } - if (key == null) { - if (other.key != null) { - return false; - } - } else if (!key.equals(other.key)) { - return false; - } return true; } - } 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 new file mode 100644 index 000000000..97ffacdcc --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/MetaData.java @@ -0,0 +1,98 @@ +/** + * 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.io.Serializable; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; + +/** + * Meta data for entities. + * + */ +@MappedSuperclass +public abstract class MetaData implements Serializable { + 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 MetaData(final String key, final String value) { + super(); + this.key = key; + this.value = 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 (!(obj instanceof MetaData)) { + 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; + } + +} 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 c7af1f2ae..8783fec96 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,9 +8,6 @@ */ package org.eclipse.hawkbit.repository.model; -import java.io.Serializable; - -import javax.persistence.Column; import javax.persistence.ConstraintMode; import javax.persistence.Entity; import javax.persistence.FetchType; @@ -28,16 +25,9 @@ import javax.persistence.Table; @IdClass(SwMetadataCompositeKey.class) @Entity @Table(name = "sp_sw_metadata") -public class SoftwareModuleMetadata implements Serializable { +public class SoftwareModuleMetadata extends MetaData { private static final long serialVersionUID = 1L; - @Id - @Column(name = "meta_key", length = 128) - private String key; - - @Column(name = "meta_value", length = 4000) - private String value; - @Id @ManyToOne(targetEntity = SoftwareModule.class, fetch = FetchType.LAZY) @JoinColumn(name = "sw_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_sw")) @@ -47,7 +37,7 @@ public class SoftwareModuleMetadata implements Serializable { * Default constructor for JPA. */ public SoftwareModuleMetadata() { - // default constructor for JPA. + super(); } /** @@ -60,21 +50,12 @@ public class SoftwareModuleMetadata implements Serializable { * of the meta data element */ public SoftwareModuleMetadata(final String key, final SoftwareModule softwareModule, final String value) { - this.key = key; + super(key, value); this.softwareModule = softwareModule; - this.value = value; } public SwMetadataCompositeKey getId() { - return new SwMetadataCompositeKey(softwareModule, key); - } - - public String getValue() { - return value; - } - - public void setValue(final String value) { - this.value = value; + return new SwMetadataCompositeKey(softwareModule, getKey()); } public SoftwareModule getSoftwareModule() { @@ -85,24 +66,10 @@ public class SoftwareModuleMetadata implements Serializable { this.softwareModule = softwareModule; } - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; - } - - @Override - public String toString() { - return "SoftwareModuleMetadata [key=" + key + ", value=" + value + ", softwareModule=" + softwareModule + "]"; - } - @Override public int hashCode() { final int prime = 31; - int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); + int result = super.hashCode(); result = prime * result + ((softwareModule == null) ? 0 : softwareModule.hashCode()); return result; } @@ -112,20 +79,13 @@ public class SoftwareModuleMetadata implements Serializable { if (this == obj) { return true; } - if (obj == null) { + if (!super.equals(obj)) { return false; } if (!(obj instanceof SoftwareModuleMetadata)) { return false; } final SoftwareModuleMetadata other = (SoftwareModuleMetadata) obj; - if (key == null) { - if (other.key != null) { - return false; - } - } else if (!key.equals(other.key)) { - return false; - } if (softwareModule == null) { if (other.softwareModule != null) { return false; @@ -135,5 +95,4 @@ public class SoftwareModuleMetadata implements Serializable { } return true; } - } From d8268e8b6bd0b8d6091a566afde4e8b53c96747f Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 5 Apr 2016 14:01:09 +0200 Subject: [PATCH 082/344] Used proper exception --- .../java/org/eclipse/hawkbit/simulator/SimulatorStartup.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 faff1cc6c..60f3055bd 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 @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.simulator; +import java.net.MalformedURLException; import java.net.URL; import org.eclipse.hawkbit.simulator.amqp.SpSenderService; @@ -47,7 +48,7 @@ public class SimulatorStartup implements ApplicationListener Date: Tue, 5 Apr 2016 14:42:00 +0200 Subject: [PATCH 083/344] fix license header in pom.xml Signed-off-by: Michael Hirsch --- hawkbit-security-integration/pom.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hawkbit-security-integration/pom.xml b/hawkbit-security-integration/pom.xml index 591552997..c17317b3d 100644 --- a/hawkbit-security-integration/pom.xml +++ b/hawkbit-security-integration/pom.xml @@ -1,6 +1,13 @@ - + 4.0.0 From 39fc74469f513f879d4e836aee7592cf3d19289e Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 5 Apr 2016 15:02:55 +0200 Subject: [PATCH 084/344] fix paged list json. Signed-off-by: Michael Hirsch --- .../hawkbit/rest/resource/model/PagedList.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java index 757a6106e..9d5cc458c 100644 --- a/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java +++ b/hawkbit-rest-api/src/main/java/org/eclipse/hawkbit/rest/resource/model/PagedList.java @@ -36,7 +36,7 @@ public class PagedList extends ResourceSupport { @JsonProperty private final List content; @JsonProperty - private final long totalElements; + private final long total; private final int size; /** @@ -45,16 +45,15 @@ public class PagedList extends ResourceSupport { * * @param content * the actual content of the list - * @param totalElements + * @param total * the total amount of elements * @throws NullPointerException * in case {@code content} is {@code null}. */ @JsonCreator - public PagedList(@JsonProperty("content") @NotNull final List content, - @JsonProperty("totalElements") final long totalElements) { + public PagedList(@JsonProperty("content") @NotNull final List content, @JsonProperty("total") final long total) { this.size = content.size(); - this.totalElements = totalElements; + this.total = total; this.content = content; } @@ -69,7 +68,7 @@ public class PagedList extends ResourceSupport { * @return the total amount of elements */ public long getTotal() { - return totalElements; + return total; } public List getContent() { From 4884f18deb35403dec062619f4a0fdb259e982be Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 5 Apr 2016 19:06:14 +0200 Subject: [PATCH 085/344] remove local variable which is never read only returned Signed-off-by: Michael Hirsch --- .../hawkbit/amqp/AmqpMessageHandlerService.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) 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 c5fff29ad..41e70f91f 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 @@ -214,19 +214,18 @@ public class AmqpMessageHandlerService extends BaseAmqpService { } private LocalArtifact findLocalArtifactByFileResource(final FileResource fileResource) { - LocalArtifact localArtifact = null; if (fileResource.getSha1() != null) { - localArtifact = artifactManagement.findFirstLocalArtifactsBySHA1(fileResource.getSha1()); + return artifactManagement.findFirstLocalArtifactsBySHA1(fileResource.getSha1()); } else if (fileResource.getFilename() != null) { - localArtifact = artifactManagement.findLocalArtifactByFilename(fileResource.getFilename()).stream() - .findFirst().orElse(null); + return artifactManagement.findLocalArtifactByFilename(fileResource.getFilename()).stream().findFirst() + .orElse(null); } else if (fileResource.getSoftwareModuleFilenameResource() != null) { - localArtifact = artifactManagement + return artifactManagement .findByFilenameAndSoftwareModule(fileResource.getSoftwareModuleFilenameResource().getFilename(), fileResource.getSoftwareModuleFilenameResource().getSoftwareModuleId()) .stream().findFirst().orElse(null); } - return localArtifact; + return null; } private static Artifact convertDbArtifact(final DbArtifact dbArtifact) { From f4f9c10186a0763d9ecd35b8c9a53f7654d9aa89 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 6 Apr 2016 10:57:23 +0200 Subject: [PATCH 086/344] Optimized equals. Signed-off-by: Kai Zimmermann --- .../model/DistributionSetMetadata.java | 15 +------------- .../hawkbit/repository/model/MetaData.java | 2 +- .../model/SoftwareModuleMetadata.java | 20 +------------------ 3 files changed, 3 insertions(+), 34 deletions(-) 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 28afd5517..67a99506c 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 @@ -34,16 +34,9 @@ public class DistributionSetMetadata extends MetaData { private DistributionSet distributionSet; public DistributionSetMetadata() { - super(); + // default public constructor for JPA } - /** - * Parameter constructor. - * - * @param key - * @param distributionSet - * @param value - */ public DistributionSetMetadata(final String key, final DistributionSet distributionSet, final String value) { super(key, value); this.distributionSet = distributionSet; @@ -71,15 +64,9 @@ public class DistributionSetMetadata extends MetaData { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } - if (!(obj instanceof DistributionSetMetadata)) { - return false; - } final DistributionSetMetadata other = (DistributionSetMetadata) obj; if (distributionSet == null) { if (other.distributionSet != null) { 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 97ffacdcc..c41a0e8c9 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 @@ -74,7 +74,7 @@ public abstract class MetaData implements Serializable { if (obj == null) { return false; } - if (!(obj instanceof MetaData)) { + if (!(this.getClass().isInstance(obj))) { return false; } final MetaData other = (MetaData) obj; 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 8783fec96..5ddd273d3 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 @@ -33,22 +33,10 @@ public class SoftwareModuleMetadata extends MetaData { @JoinColumn(name = "sw_id", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_metadata_sw")) private SoftwareModule softwareModule; - /** - * Default constructor for JPA. - */ public SoftwareModuleMetadata() { - super(); + // default public constructor for JPA } - /** - * Standard constructor. - * - * @param key - * of the meta data element - * @param softwareModule - * @param value - * of the meta data element - */ public SoftwareModuleMetadata(final String key, final SoftwareModule softwareModule, final String value) { super(key, value); this.softwareModule = softwareModule; @@ -76,15 +64,9 @@ public class SoftwareModuleMetadata extends MetaData { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } if (!super.equals(obj)) { return false; } - if (!(obj instanceof SoftwareModuleMetadata)) { - return false; - } final SoftwareModuleMetadata other = (SoftwareModuleMetadata) obj; if (softwareModule == null) { if (other.softwareModule != null) { From dc18bfea7b6aaf956e33418cc321a9216bde3bab Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 6 Apr 2016 17:42:02 +0200 Subject: [PATCH 087/344] Refactoring Table, TableHeader and Detail Layout components - Add interfaces to reduce boiler plate code - Add generic to reuse code - Try to remove duplicate code Signed-off-by: SirWayne --- .../ui/artifacts/UploadArtifactView.java | 6 +- .../details/ArtifactDetailsLayout.java | 26 ++- .../artifacts/event/SoftwareModuleEvent.java | 41 ++--- .../footer/SMDeleteActionsLayout.java | 32 +--- .../UploadViewConfirmationWindowLayout.java | 82 ++------- .../SoftwareModuleAddUpdateWindow.java | 9 +- .../smtable/SoftwareModuleDetails.java | 96 ++--------- .../smtable/SoftwareModuleTable.java | 160 ++++-------------- .../smtable/SoftwareModuleTableHeader.java | 7 +- .../artifacts/state/ArtifactUploadState.java | 49 +++--- .../ui/common/ManagmentEntityState.java | 22 +++ .../AbstractConfirmationWindowLayout.java | 55 +++--- ...amedVersionedEntityTableDetailsLayout.java | 28 +++ .../AbstractTableDetailsLayout.java | 96 ++++++----- .../SoftwareModuleDetailsTable.java | 7 +- .../footer/AbstractDeleteActionsLayout.java | 109 ++++++------ .../ui/common/table/AbstractTable.java | 158 +++++++++++++++-- .../ui/common/table/BaseEntityEvent.java | 44 +++++ .../ui/common/table/BaseEntityEventType.java | 17 ++ .../common/tagdetails/AbstractTagToken.java | 28 ++- .../tagdetails/AbstractTargetTagToken.java | 5 +- .../tagdetails/DistributionTagToken.java | 34 +--- .../ui/common/tagdetails/TargetTagToken.java | 20 +-- .../ui/distributions/DistributionsView.java | 11 +- .../dstable/DistributionSetDetails.java | 131 ++++---------- .../dstable/DistributionSetTable.java | 158 +++++------------ .../dstable/DistributionSetTableHeader.java | 6 +- .../footer/DSDeleteActionsLayout.java | 32 +--- ...DistributionsConfirmationWindowLayout.java | 134 +++------------ .../smtable/SwModuleDetails.java | 91 ++-------- .../distributions/smtable/SwModuleTable.java | 137 +++++---------- .../smtable/SwModuleTableHeader.java | 7 +- .../state/ManageDistUIState.java | 16 +- .../hawkbit/ui/management/DeploymentView.java | 10 +- .../actionhistory/ActionHistoryComponent.java | 6 +- .../actionhistory/ActionHistoryTable.java | 8 +- .../DistributionAddUpdateWindowLayout.java | 7 +- .../dstable/DistributionDetails.java | 89 +--------- .../management/dstable/DistributionTable.java | 113 +++++-------- .../dstable/DistributionTableHeader.java | 6 +- .../event/DistributionTableEvent.java | 46 ++--- .../event/TargetAddUpdateWindowEvent.java | 33 +--- .../ui/management/event/TargetTableEvent.java | 64 +++---- .../management/footer/CountMessageLabel.java | 4 +- .../footer/DeleteActionsLayout.java | 7 +- .../ManangementConfirmationWindowLayout.java | 107 +++--------- .../management/state/ManagementUIState.java | 14 +- .../TargetAddUpdateWindowLayout.java | 7 +- .../management/targettable/TargetDetails.java | 91 +++------- .../management/targettable/TargetTable.java | 126 ++++---------- .../targettable/TargetTableHeader.java | 9 +- .../targettag/TargetTagFilterButtons.java | 3 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 77 +-------- 53 files changed, 934 insertions(+), 1747 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java index 54ba5cc8e..b07aa0276 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/UploadArtifactView.java @@ -15,12 +15,12 @@ import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.artifacts.details.ArtifactDetailsLayout; import org.eclipse.hawkbit.ui.artifacts.event.ArtifactDetailsEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.artifacts.footer.SMDeleteActionsLayout; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleTableLayout; import org.eclipse.hawkbit.ui.artifacts.smtype.SMTypeFilterLayout; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.artifacts.upload.UploadLayout; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -111,9 +111,9 @@ public class UploadArtifactView extends VerticalLayout implements View, BrowserW @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent event) { - if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MINIMIZED) { + if (BaseEntityEventType.MINIMIZED == event.getEventType()) { minimizeSwTable(); - } else if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MAXIMIZED) { + } else if (BaseEntityEventType.MAXIMIZED == event.getEventType()) { maximizeSwTable(); } } 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 1bc9da65c..7c5d4153f 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 @@ -24,6 +24,7 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -110,8 +111,6 @@ public class ArtifactDetailsLayout extends VerticalLayout { private boolean fullWindowMode = false; - private UI ui; - private boolean readOnly = false; /** @@ -122,7 +121,6 @@ public class ArtifactDetailsLayout extends VerticalLayout { createComponents(); buildLayout(); eventBus.subscribe(this); - ui = UI.getCurrent(); if (artifactUploadState.getSelectedBaseSoftwareModule().isPresent()) { final SoftwareModule selectedSoftwareModule = artifactUploadState.getSelectedBaseSoftwareModule().get(); populateArtifactDetails(selectedSoftwareModule.getId(), HawkbitCommonUtil @@ -461,23 +459,23 @@ public class ArtifactDetailsLayout extends VerticalLayout { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent softwareModuleEvent) { - if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE) { - ui.access(() -> { - if (softwareModuleEvent.getSoftwareModule() != null) { - populateArtifactDetails(softwareModuleEvent.getSoftwareModule().getId(), - HawkbitCommonUtil.getFormattedNameVersion(softwareModuleEvent.getSoftwareModule().getName(), - softwareModuleEvent.getSoftwareModule().getVersion())); + if (BaseEntityEventType.SELECTED_ENTITY == softwareModuleEvent.getEventType()) { + UI.getCurrent().access(() -> { + if (softwareModuleEvent.getEntity() != null) { + populateArtifactDetails(softwareModuleEvent.getEntity().getId(), + HawkbitCommonUtil.getFormattedNameVersion(softwareModuleEvent.getEntity().getName(), + softwareModuleEvent.getEntity().getVersion())); } else { populateArtifactDetails(null, null); } }); } if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.ARTIFACTS_CHANGED) { - ui.access(() -> { - if (softwareModuleEvent.getSoftwareModule() != null) { - populateArtifactDetails(softwareModuleEvent.getSoftwareModule().getId(), - HawkbitCommonUtil.getFormattedNameVersion(softwareModuleEvent.getSoftwareModule().getName(), - softwareModuleEvent.getSoftwareModule().getVersion())); + UI.getCurrent().access(() -> { + if (softwareModuleEvent.getEntity() != null) { + populateArtifactDetails(softwareModuleEvent.getEntity().getId(), + HawkbitCommonUtil.getFormattedNameVersion(softwareModuleEvent.getEntity().getName(), + softwareModuleEvent.getEntity().getVersion())); } else { populateArtifactDetails(null, null); } 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 3d0897dcd..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 @@ -9,58 +9,53 @@ package org.eclipse.hawkbit.ui.artifacts.event; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** * Event to represent software add, update or delete. - * - * * */ -public class SoftwareModuleEvent { +public class SoftwareModuleEvent extends BaseEntityEvent { /** * Software module events in the Upload UI. - * - * * */ public enum SoftwareModuleEventType { - NEW_SOFTWARE_MODULE, UPDATED_SOFTWARE_MODULE, DELETE_SOFTWARE_MODULE, SELECTED_SOFTWARE_MODULE, MAXIMIZED, MINIMIZED, ARTIFACTS_CHANGED, ASSIGN_SOFTWARE_MODULE + ARTIFACTS_CHANGED, ASSIGN_SOFTWARE_MODULE } private SoftwareModuleEventType softwareModuleEventType; - private SoftwareModule softwareModule; + /** + * Creates software module event. + * + * @param entityEventType + * the event type + * @param softwareModule + * the module + */ + public SoftwareModuleEvent(final BaseEntityEventType entityEventType, final SoftwareModule softwareModule) { + super(entityEventType, softwareModule); + } /** * Creates software module event. * * @param softwareModuleEventType - * reference of {@link SoftwareModuleEventType} + * the event type * @param softwareModule - * reference of {@link SoftwareModule} + * the module */ public SoftwareModuleEvent(final SoftwareModuleEventType softwareModuleEventType, final SoftwareModule softwareModule) { - super(); + super(null, softwareModule); this.softwareModuleEventType = softwareModuleEventType; - this.softwareModule = softwareModule; } public SoftwareModuleEventType getSoftwareModuleEventType() { return softwareModuleEventType; } - public void setSoftwareModuleEventType(final SoftwareModuleEventType softwareModuleEventType) { - this.softwareModuleEventType = softwareModuleEventType; - } - - public SoftwareModule getSoftwareModule() { - return softwareModule; - } - - public void setSoftwareModule(final SoftwareModule softwareModule) { - this.softwareModule = softwareModule; - } - } 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 97451961c..a5cb5c8d0 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 @@ -28,7 +28,6 @@ import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Component; -import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.Table.TableTransferable; import com.vaadin.ui.UI; @@ -191,7 +190,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected Component getUnsavedActionsWindowContent() { - uploadViewConfirmationWindowLayout.init(); + uploadViewConfirmationWindowLayout.inittialize(); return uploadViewConfirmationWindowLayout; } @@ -201,33 +200,4 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { || !artifactUploadState.getSelectedDeleteSWModuleTypes().isEmpty(); } - @Override - protected boolean hasCountMessage() { - return false; - } - - @Override - protected Label getCountMessageLabel() { - return null; - } - - @Override - protected boolean hasBulkUploadPermission() { - return false; - } - - @Override - protected void showBulkUploadWindow() { - /** - * Bulk upload not supported .No implementation required. - */ - } - - @Override - protected void restoreBulkUploadStatusCount() { - /** - * Bulk upload not supported .No implementation required. - */ - } - } 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 49e9ab59f..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,23 +14,17 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.annotation.PostConstruct; - 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; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.AbstractConfirmationWindowLayout; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.ConfirmationTab; -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.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.data.Container; import com.vaadin.data.Item; @@ -39,8 +33,8 @@ 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.ClickListener; import com.vaadin.ui.Table.Align; -import com.vaadin.ui.themes.ValoTheme; /** * Abstract layout of confirm actions window. @@ -62,32 +56,12 @@ public class UploadViewConfirmationWindowLayout extends AbstractConfirmationWind private static final String DISCARD = "Discard"; - @Autowired - private I18N i18n; - @Autowired private transient SoftwareManagement softwareManagement; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ArtifactUploadState artifactUploadState; - /** - * Initialze the component. - */ - @PostConstruct - void init() { - super.inittialize(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.confirmwindow.layout. - * AbstractConfirmationWindowLayout# getConfimrationTabs() - */ @Override protected Map getConfimrationTabs() { final Map tabs = new HashMap<>(); @@ -116,26 +90,13 @@ public class UploadViewConfirmationWindowLayout extends AbstractConfirmationWind // Add the discard action column tab.getTable().addGeneratedColumn(SW_DISCARD_CHGS, (source, itemId, columnId) -> { - final Button deleteswIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - ValoTheme.BUTTON_TINY + " " + "redicon", true, FontAwesome.REPLY, - SPUIButtonStyleSmallNoBorder.class); - deleteswIcon.setData(itemId); - deleteswIcon.setImmediate(true); - deleteswIcon.addClickListener(event -> discardSoftwareDelete(event, itemId, tab)); - return deleteswIcon; + final ClickListener clickListener = event -> discardSoftwareDelete(event, itemId, tab); + return createDiscardButton(itemId, clickListener); }); - // set the visible columns - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(SW_MODULE_NAME_MSG); - visibleColumnIds.add(SW_DISCARD_CHGS); - visibleColumnLabels.add(i18n.get("upload.swModuleTable.header")); - visibleColumnLabels.add(i18n.get("header.second.deletetarget.table")); - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(SW_MODULE_NAME_MSG, SW_DISCARD_CHGS); + tab.getTable().setColumnHeaders(i18n.get("upload.swModuleTable.header"), + i18n.get("header.second.deletetarget.table")); tab.getTable().setColumnExpandRatio(SW_MODULE_NAME_MSG, SPUIDefinitions.TARGET_DISTRIBUTION_COLUMN_WIDTH); tab.getTable().setColumnExpandRatio(SW_DISCARD_CHGS, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -233,30 +194,14 @@ public class UploadViewConfirmationWindowLayout extends AbstractConfirmationWind // Add the discard action column tab.getTable().addGeneratedColumn(DISCARD, (source, itemId, columnId) -> { - final StringBuilder style = new StringBuilder(ValoTheme.BUTTON_TINY); - style.append(' '); - style.append("redicon"); - final Button deleteIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - style.toString(), true, FontAwesome.REPLY, SPUIButtonStyleSmallNoBorder.class); - deleteIcon.setData(itemId); - deleteIcon.setImmediate(true); - deleteIcon.addClickListener(event -> discardSoftwareTypeDelete( - (String) ((Button) event.getComponent()).getData(), itemId, tab)); - return deleteIcon; + final ClickListener clickListener = event -> discardSoftwareTypeDelete( + (String) ((Button) event.getComponent()).getData(), itemId, tab); + return createDiscardButton(itemId, clickListener); }); - // set the visible columns - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(SW_MODULE_TYPE_NAME); - visibleColumnIds.add(DISCARD); - visibleColumnLabels.add(i18n.get("header.first.delete.swmodule.type.table")); - visibleColumnLabels.add(i18n.get("header.second.delete.swmodule.type.table")); - - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(SW_MODULE_TYPE_NAME, DISCARD); + tab.getTable().setColumnHeaders(i18n.get("header.first.delete.swmodule.type.table"), + i18n.get("header.second.delete.swmodule.type.table")); tab.getTable().setColumnExpandRatio(SW_MODULE_TYPE_NAME, 2); tab.getTable().setColumnExpandRatio(SW_DISCARD_CHGS, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -264,9 +209,6 @@ public class UploadViewConfirmationWindowLayout extends AbstractConfirmationWind return tab; } - /** - * @return - */ private Container getSWModuleTypeTableContainer() { final IndexedContainer contactContainer = new IndexedContainer(); contactContainer.addContainerProperty(SW_MODULE_TYPE_NAME, String.class, ""); 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 7e05e8c63..cc08929bb 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,8 +13,8 @@ import java.io.Serializable; 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.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; 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; @@ -282,8 +282,8 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { /* display success message */ uiNotifcation.displaySuccess(i18n.get("message.save.success", new Object[] { newBaseSoftwareModule.getName() + ":" + newBaseSoftwareModule.getVersion() })); - eventBus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.NEW_SOFTWARE_MODULE, - newBaseSoftwareModule)); + eventBus.publish(this, + new SoftwareModuleEvent(BaseEntityEventType.NEW_ENTITY, newBaseSoftwareModule)); } // close the window closeThisWindow(); @@ -302,8 +302,7 @@ public class SoftwareModuleAddUpdateWindow implements Serializable { uiNotifcation.displaySuccess(i18n.get("message.save.success", new Object[] { newSWModule.getName() + ":" + newSWModule.getVersion() })); - eventBus.publish(this, - new SoftwareModuleEvent(SoftwareModuleEventType.UPDATED_SOFTWARE_MODULE, newSWModule)); + eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.UPDATED_ENTITY, newSWModule)); } 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 dc6035089..397f0cf2b 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 @@ -10,9 +10,8 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; 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.state.ArtifactUploadState; -import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; +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; @@ -36,7 +35,7 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class SoftwareModuleDetails extends AbstractTableDetailsLayout { +public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDetailsLayout { private static final long serialVersionUID = -4900381301076646366L; @@ -46,10 +45,6 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { @Autowired private ArtifactUploadState artifactUploadState; - private Long swModuleId; - - private SoftwareModule selectedSwModule; - @Override protected String getEditButtonId() { return SPUIComponetIdProvider.UPLOAD_SW_MODULE_EDIT_BUTTON; @@ -64,21 +59,24 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { @Override protected void onEdit(final ClickEvent event) { - final Window addSoftwareModule = softwareModuleAddUpdateWindow.createUpdateSoftwareModuleWindow(swModuleId); + final Window addSoftwareModule = softwareModuleAddUpdateWindow + .createUpdateSoftwareModuleWindow(getSelectedBaseEntityId()); addSoftwareModule.setCaption(i18n.get("upload.caption.update.swmodule")); UI.getCurrent().addWindow(addSoftwareModule); addSoftwareModule.setVisible(Boolean.TRUE); } - private void populateDetails(final SoftwareModule swModule) { + @Override + protected void populateDetailsWidget() { String maxAssign = HawkbitCommonUtil.SP_STRING_EMPTY; - if (swModule != null) { - if (swModule.getType().getMaxAssignments() == Integer.MAX_VALUE) { + if (selectedBaseEntity != null) { + if (selectedBaseEntity.getType().getMaxAssignments() == Integer.MAX_VALUE) { maxAssign = i18n.get("label.multiAssign.type"); } else { maxAssign = i18n.get("label.singleAssign.type"); } - updateSoftwareModuleDetailsLayout(swModule.getType().getName(), swModule.getVendor(), maxAssign); + updateSoftwareModuleDetailsLayout(selectedBaseEntity.getType().getName(), selectedBaseEntity.getVendor(), + maxAssign); } else { updateSoftwareModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); @@ -109,45 +107,6 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { } - private void populateLog(final SoftwareModule softwareModule) { - if (null != softwareModule) { - updateLogLayout(getLogLayout(), softwareModule.getLastModifiedAt(), softwareModule.getLastModifiedBy(), - softwareModule.getCreatedAt(), softwareModule.getCreatedBy(), i18n); - } else { - updateLogLayout(getLogLayout(), null, HawkbitCommonUtil.SP_STRING_EMPTY, null, null, i18n); - } - } - - public void setSwModuleId(final Long swModuleId) { - this.swModuleId = swModuleId; - } - - private void populateDetailsWidget(final SoftwareModule swModule) { - if (swModule != null) { - setSwModuleId(swModule.getId()); - setName(getDefaultCaption(), - HawkbitCommonUtil.getFormattedNameVersion(swModule.getName(), swModule.getVersion())); - populateDetails(swModule); - populateDescription(swModule); - populateLog(swModule); - } else { - setSwModuleId(null); - setName(getDefaultCaption(), HawkbitCommonUtil.SP_STRING_EMPTY); - populateDetails(null); - populateDescription(null); - populateLog(null); - } - } - - private void populateDescription(final SoftwareModule swModule) { - if (swModule != null) { - updateDescriptionLayout(i18n.get("label.description"), swModule.getDescription()); - } else { - updateDescriptionLayout(i18n.get("label.description"), null); - } - } - - @Override protected String getDefaultCaption() { return i18n.get("upload.swModuleTable.header"); @@ -158,45 +117,14 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { return artifactUploadState.getSelectedBaseSoftwareModule().isPresent(); } - @Override protected Boolean onLoadIsTableMaximized() { return artifactUploadState.isSwModuleTableMaximized(); } - - @Override - protected void populateDetailsWidget() { - populateDetailsWidget(selectedSwModule); - } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent softwareModuleEvent) { - if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE - || softwareModuleEvent - .getSoftwareModuleEventType() == SoftwareModuleEventType.UPDATED_SOFTWARE_MODULE) { - ui.access(() -> { - /** - * softwareModuleEvent.getSoftwareModule() is null when table - * has no data. - */ - if (softwareModuleEvent.getSoftwareModule() != null) { - selectedSwModule = softwareModuleEvent.getSoftwareModule(); - populateData(true); - } else { - populateData(false); - } - }); - } else if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.MINIMIZED) { - showLayout(); - } else if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.MAXIMIZED) { - hideLayout(); - } - } - - @Override - protected void clearDetails() { - populateDetailsWidget(null); + onBaseEntityEvent(softwareModuleEvent); } @Override @@ -204,7 +132,6 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { return permissionChecker.hasUpdateDistributionPermission(); } - @Override protected String getTabSheetId() { return null; @@ -214,4 +141,5 @@ public class SoftwareModuleDetails extends AbstractTableDetailsLayout { protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.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 aea80476a..6164fa3bf 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 @@ -8,29 +8,20 @@ */ package org.eclipse.hawkbit.ui.artifacts.smtable; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; 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; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadViewAcceptCriteria; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.table.AbstractTable; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; 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.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -39,7 +30,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -58,45 +48,19 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class SoftwareModuleTable extends AbstractTable { +public class SoftwareModuleTable extends AbstractTable { private static final long serialVersionUID = 6469417305487144809L; - @Autowired - private I18N i18n; - @Autowired private ArtifactUploadState artifactUploadState; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient SoftwareManagement softwareManagement; @Autowired private UploadViewAcceptCriteria uploadViewAcceptCriteria; - /** - * Initialize the filter layout. - */ - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - setNoDataAvailable(); - } - - @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 SMFilterEvent filterEvent) { UI.getCurrent().access(() -> { @@ -150,74 +114,40 @@ public class SoftwareModuleTable extends AbstractTable { lqc.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); } - @Override - protected void addCustomGeneratedColumns() { - /* No generated columns */ - } - @Override protected boolean isFirstRowSelectedOnLoad() { return artifactUploadState.getSelectedSoftwareModules().isEmpty(); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.SPTable#getItemIdToSelect() - */ @Override protected Object getItemIdToSelect() { return artifactUploadState.getSelectedSoftwareModules(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.SPTable#isMaximized() - */ @Override protected boolean isMaximized() { return artifactUploadState.isSwModuleTableMaximized(); } - @SuppressWarnings("rawtypes") @Override - protected void onValueChange() { - eventBus.publish(this, UploadArtifactUIEvent.HIDE_DROP_HINTS); - @SuppressWarnings("unchecked") - final Set values = (Set) getValue(); - if (values != null && !values.isEmpty()) { - final Iterator iterator = values.iterator(); - Long value = null; - while (iterator.hasNext()) { - value = iterator.next(); - } - if (null != value) { - artifactUploadState.setSelectedBaseSwModuleId(value); - final SoftwareModule baseSoftwareModule = softwareManagement.findSoftwareModuleById(value); - artifactUploadState.setSelectedBaseSoftwareModule(baseSoftwareModule); - artifactUploadState.setSelectedSoftwareModules(values); - eventBus.publish(this, - new SoftwareModuleEvent(SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE, baseSoftwareModule)); - } - } else { - artifactUploadState.setSelectedBaseSwModuleId(null); - artifactUploadState.setSelectedBaseSoftwareModule(null); - artifactUploadState.setSelectedSoftwareModules(Collections.emptySet()); - eventBus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE, null)); - } + protected SoftwareModule findEntityByTableValue(final Long entityTableId) { + return softwareManagement.findSoftwareModuleById(entityTableId); + } + + @Override + protected ArtifactUploadState getManagmentEntityState() { + return artifactUploadState; + } + + @Override + protected void publishEntityAfterValueChange(final SoftwareModule lastSoftwareModule) { + artifactUploadState.setSelectedBaseSoftwareModule(lastSoftwareModule); + eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.SELECTED_ENTITY, lastSoftwareModule)); } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent event) { - if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MINIMIZED) { - UI.getCurrent().access(() -> applyMinTableSettings()); - } else if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MAXIMIZED) { - UI.getCurrent().access(() -> applyMaxTableSettings()); - } else if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.NEW_SOFTWARE_MODULE) { - UI.getCurrent().access(() -> addSoftwareModule(event.getSoftwareModule())); - } + onBaseEntityEvent(event); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -227,51 +157,30 @@ public class SoftwareModuleTable extends AbstractTable { } } - /** - * Add new software module to table. - * - * @param swModule - * new software module - */ @SuppressWarnings("unchecked") - private void addSoftwareModule(final SoftwareModule swModule) { - final Object addItem = addItem(); - final Item item = getItem(addItem); - final String swNameVersion = HawkbitCommonUtil.concatStrings(":", swModule.getName(), swModule.getVersion()); + @Override + protected Item addEntity(final SoftwareModule baseEntity) { + final Item item = super.addEntity(baseEntity); + + final String swNameVersion = HawkbitCommonUtil.concatStrings(":", baseEntity.getName(), + baseEntity.getVersion()); item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue(swNameVersion); - item.getItemProperty("swId").setValue(swModule.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_ID).setValue(swModule.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(swModule.getDescription()); - item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(swModule.getVersion()); - item.getItemProperty(SPUILabelDefinitions.VAR_NAME).setValue(swModule.getName()); - item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(swModule.getVendor()); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY).setValue(swModule.getCreatedBy()); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setValue(swModule.getLastModifiedBy()); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(swModule.getCreatedAt())); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(swModule.getLastModifiedAt())); + item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); + item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(baseEntity.getVendor()); if (!artifactUploadState.getSelectedSoftwareModules().isEmpty()) { - artifactUploadState.getSelectedSoftwareModules().stream().forEach(swmNameId -> unselect(swmNameId)); + artifactUploadState.getSelectedSoftwareModules().stream().forEach(this::unselect); } - select(swModule.getId()); + select(baseEntity.getId()); + return item; + } @Override protected List getTableVisibleColumns() { - final List columnList = new ArrayList<>(); + final List columnList = super.getTableVisibleColumns(); if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2F)); } else { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.8F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2F)); @@ -297,12 +206,9 @@ public class SoftwareModuleTable extends AbstractTable { }; } - private void setNoDataAvailable() { - final int containerSize = getContainerDataSource().size(); - if (containerSize == 0) { - artifactUploadState.setNoDataAvilableSoftwareModule(true); - } else { - artifactUploadState.setNoDataAvilableSoftwareModule(false); - } + @Override + protected void setDataAvailable(final boolean available) { + artifactUploadState.setNoDataAvilableSoftwareModule(!available); + } } diff --git a/hawkbit-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 index 5f1c56636..16ef3154c 100644 --- a/hawkbit-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 @@ -10,10 +10,10 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; 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.state.ArtifactUploadState; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -51,7 +51,6 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { } } - @Override protected String getHeaderCaption() { return i18n.get("upload.swModuleTable.header"); @@ -131,14 +130,14 @@ public class SoftwareModuleTableHeader extends AbstractTableHeader { @Override public void maximizeTable() { artifactUploadState.setSwModuleTableMaximized(Boolean.TRUE); - eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MAXIMIZED, null)); + eventbus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.MAXIMIZED, null)); } @Override public void minimizeTable() { artifactUploadState.setSwModuleTableMaximized(Boolean.FALSE); - eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null)); + eventbus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.MINIMIZED, null)); } @Override 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 a502b341c..b975ad1fd 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.Optional; import java.util.Set; import org.eclipse.hawkbit.repository.model.SoftwareModule; +import org.eclipse.hawkbit.ui.common.ManagmentEntityState; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -29,7 +30,7 @@ import com.vaadin.spring.annotation.VaadinSessionScope; */ @VaadinSessionScope @SpringComponent -public class ArtifactUploadState implements Serializable { +public class ArtifactUploadState implements ManagmentEntityState, Serializable { private static final long serialVersionUID = 8273440375917450859L; @@ -88,29 +89,6 @@ public class ArtifactUploadState implements Serializable { return selectedBaseSwModuleId != null ? Optional.of(selectedBaseSwModuleId) : Optional.empty(); } - /** - * @param selectedBaseSwModuleId - * the selectedBaseSwModuleId to set - */ - public void setSelectedBaseSwModuleId(final Long selectedBaseSwModuleId) { - this.selectedBaseSwModuleId = selectedBaseSwModuleId; - } - - /** - * @return the selectedBaseSoftwareModule - */ - public Optional getSelectedBaseSoftwareModule() { - return selectedBaseSoftwareModule == null ? Optional.empty() : Optional.of(selectedBaseSoftwareModule); - } - - /** - * @param selectedBaseSoftwareModule - * the selectedBaseSoftwareModule to set - */ - public void setSelectedBaseSoftwareModule(final SoftwareModule selectedBaseSoftwareModule) { - this.selectedBaseSoftwareModule = selectedBaseSoftwareModule; - } - /** * @return the baseSwModuleList */ @@ -125,12 +103,15 @@ public class ArtifactUploadState implements Serializable { return selectedSoftwareModules; } - /** - * @param selectedSoftwareModules - * the selectedSoftwareModules to set - */ - public void setSelectedSoftwareModules(final Set selectedSoftwareModules) { - this.selectedSoftwareModules = selectedSoftwareModules; + @Override + public void setLastSelectedEntity(final Long value) { + this.selectedBaseSwModuleId = value; + + } + + @Override + public void setSelectedEnitities(final Set values) { + this.selectedSoftwareModules = values; } /** @@ -197,4 +178,12 @@ public class ArtifactUploadState implements Serializable { this.noDataAvilableSoftwareModule = noDataAvilableSoftwareModule; } + public Optional getSelectedBaseSoftwareModule() { + return selectedBaseSoftwareModule == null ? Optional.empty() : Optional.of(selectedBaseSoftwareModule); + } + + public void setSelectedBaseSoftwareModule(final SoftwareModule selectedBaseSoftwareModule) { + this.selectedBaseSoftwareModule = selectedBaseSoftwareModule; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java new file mode 100644 index 000000000..8b2318ace --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.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.ui.common; + +import java.util.Set; + +/** + * + */ +public interface ManagmentEntityState { + + void setSelectedEnitities(Set values); + + void setLastSelectedEntity(T value); + +} diff --git a/hawkbit-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 index 8a89ee821..a737fabbf 100644 --- a/hawkbit-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 @@ -11,21 +11,29 @@ package org.eclipse.hawkbit.ui.common.confirmwindow.layout; import java.util.Map; import java.util.Map.Entry; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import javax.annotation.PostConstruct; +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.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.spring.events.EventBus; + +import com.vaadin.server.FontAwesome; import com.vaadin.ui.Accordion; import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.themes.ValoTheme; /** * Abstract layout of confirm actions window. * - * - * - * */ public abstract class AbstractConfirmationWindowLayout extends VerticalLayout { @@ -37,33 +45,25 @@ public abstract class AbstractConfirmationWindowLayout extends VerticalLayout { private String consolidatedMessage; - protected void inittialize() { - // Remove all components + @Autowired + protected I18N i18n; + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + + @PostConstruct + public void inittialize() { removeAllComponents(); consolidatedMessage = ""; - - // create components again createComponents(); - - // Build layout. buildLayout(); } - /** - * Create accordion and add respective tabs. - */ private void createComponents() { - // create accordion createAccordian(); - - // create action message label createActionMessgaeLabel(); } - /** - * Create a message label to show the results of any actions which user does - * in the confirmation window. - */ private void createActionMessgaeLabel() { actionMessage = SPUIComponentProvider.getLabel("", null); actionMessage.addStyleName(SPUIStyleDefinitions.CONFIRM_WINDOW_INFO_BOX); @@ -138,4 +138,15 @@ public abstract class AbstractConfirmationWindowLayout extends VerticalLayout { public String getConsolidatedMessage() { return consolidatedMessage; } + + protected Button createDiscardButton(final Object itemId, final ClickListener clickListener) { + final Button deletesDsIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, + ValoTheme.BUTTON_TINY + " " + SPUIStyleDefinitions.REDICON, true, FontAwesome.REPLY, + SPUIButtonStyleSmallNoBorder.class); + deletesDsIcon.setData(itemId); + deletesDsIcon.setImmediate(true); + deletesDsIcon.addClickListener(clickListener); + return deletesDsIcon; + } + } diff --git a/hawkbit-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 new file mode 100644 index 000000000..31fbe5996 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/detailslayout/AbstractNamedVersionedEntityTableDetailsLayout.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.ui.common.detailslayout; + +import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; +import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; + +/** + * + * + */ +public abstract class AbstractNamedVersionedEntityTableDetailsLayout + extends AbstractTableDetailsLayout { + + private static final long serialVersionUID = 1L; + + @Override + protected String getName() { + return HawkbitCommonUtil.getFormattedNameVersion(selectedBaseEntity.getName(), selectedBaseEntity.getVersion()); + } + +} 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 20a107ba6..02b1f0044 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 @@ -13,8 +13,12 @@ import java.util.Map; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +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; @@ -40,7 +44,7 @@ import com.vaadin.ui.VerticalLayout; * * */ -public abstract class AbstractTableDetailsLayout extends VerticalLayout { +public abstract class AbstractTableDetailsLayout extends VerticalLayout { private static final long serialVersionUID = 4862529368471627190L; @@ -53,7 +57,7 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { @Autowired protected SpPermissionChecker permissionChecker; - protected UI ui; + protected T selectedBaseEntity; private Label caption; @@ -74,13 +78,8 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { */ @PostConstruct protected void init() { - ui = UI.getCurrent(); createComponents(); buildLayout(); - /** - * On load of UI/Refresh details will be loaded based on the row - * selected in table. - */ restoreState(); eventBus.subscribe(this); } @@ -90,6 +89,18 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { eventBus.unsubscribe(this); } + protected void onBaseEntityEvent(final BaseEntityEvent baseEntityEvent) { + final BaseEntityEventType eventType = baseEntityEvent.getEventType(); + if (BaseEntityEventType.SELECTED_ENTITY == eventType + || BaseEntityEventType.UPDATED_ENTITY == eventType) { + UI.getCurrent().access(() -> populateData(baseEntityEvent.getEntity())); + } else if (BaseEntityEventType.MINIMIZED == eventType) { + UI.getCurrent().access(() -> setVisible(true)); + } else if (BaseEntityEventType.MAXIMIZED == eventType) { + UI.getCurrent().access(() -> setVisible(false)); + } + } + private void createComponents() { /** * Default caption is set.Reset on selecting table row. @@ -156,44 +167,29 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { private void restoreState() { if (onLoadIsTableRowSelected()) { - populateData(true); + populateData(null); + editButton.setEnabled(true); } if (onLoadIsTableMaximized()) { - /** - * If table is maximized hide details layout. - */ - hideLayout(); + setVisible(false); } } - protected void showLayout() { - setVisible(true); - } - - protected void hideLayout() { - setVisible(false); - } - /** * If no data in table (i,e no row selected),then disable the edit button. * If row is selected ,enable edit button. */ - protected void populateData(final Boolean isRowSelected) { - if (isRowSelected) { - populateDetailsWidget(); - enableEditButton(); + private void populateData(final T selectedBaseEntity) { + this.selectedBaseEntity = selectedBaseEntity; + editButton.setEnabled(selectedBaseEntity != null); + if (selectedBaseEntity == null) { + setName(getDefaultCaption(), StringUtils.EMPTY); } else { - disableEditButton(); - clearDetails(); + setName(getDefaultCaption(), getName()); } - } - - protected void enableEditButton() { - editButton.setEnabled(true); - } - - protected void disableEditButton() { - editButton.setEnabled(false); + populateLog(); + populateDescription(); + populateDetailsWidget(); } protected void updateLogLayout(final VerticalLayout changeLogLayout, final Long lastModifiedAt, @@ -297,13 +293,6 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { protected abstract String getTabSheetId(); - /** - * Populate details layout. - */ - protected abstract void populateDetailsWidget(); - - protected abstract void clearDetails(); - protected abstract Boolean hasEditPermission(); public VerticalLayout getDetailsLayout() { @@ -314,6 +303,31 @@ public abstract class AbstractTableDetailsLayout extends VerticalLayout { return logLayout; } + private void populateLog() { + if (selectedBaseEntity == null) { + updateLogLayout(getLogLayout(), null, StringUtils.EMPTY, null, null, i18n); + return; + } + updateLogLayout(getLogLayout(), selectedBaseEntity.getLastModifiedAt(), selectedBaseEntity.getLastModifiedBy(), + selectedBaseEntity.getCreatedAt(), selectedBaseEntity.getCreatedBy(), i18n); + } + + private void populateDescription() { + if (selectedBaseEntity != null) { + updateDescriptionLayout(i18n.get("label.description"), selectedBaseEntity.getDescription()); + } else { + updateDescriptionLayout(i18n.get("label.description"), null); + } + } + + protected abstract void populateDetailsWidget(); + + protected Long getSelectedBaseEntityId() { + return selectedBaseEntity == null ? null : selectedBaseEntity.getId(); + } + protected abstract String getDetailsHeaderCaptionId(); + protected abstract String getName(); + } 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 40acb6581..c0ecf9869 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,12 +16,12 @@ 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.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; @@ -214,9 +214,8 @@ public class SoftwareModuleDetailsTable extends Table { .getItem(event.getButton().getId()).getItemProperty(SOFT_MODULE).getValue(), alreadyAssignedSwModules); final DistributionSet newDistributionSet = distributionSetManagement.unassignSoftwareModule(distributionSet, unAssignedSw); - manageDistUIState.setLastSelectedDistribution(newDistributionSet.getDistributionSetIdName()); - eventBus.publish(this, - new DistributionTableEvent(DistributionComponentEvent.ON_VALUE_CHANGE, newDistributionSet)); + manageDistUIState.setLastSelectedEntity(newDistributionSet.getDistributionSetIdName()); + 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/common/footer/AbstractDeleteActionsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java index f3b8b72e7..0f5e2de32 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 @@ -182,40 +182,45 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme } protected void setUploadStatusButtonCaption(final Long count) { - if (null != bulkUploadStatusButton) { - bulkUploadStatusButton.setCaption("
" + count + "
"); + if (bulkUploadStatusButton == null) { + return; } + bulkUploadStatusButton.setCaption("
" + count + "
"); } protected void enableBulkUploadStatusButton() { - if (null != bulkUploadStatusButton) { - bulkUploadStatusButton.setVisible(true); + if (bulkUploadStatusButton == null) { + return; } + bulkUploadStatusButton.setVisible(true); } protected void updateUploadBtnIconToComplete() { - if (null != bulkUploadStatusButton) { - bulkUploadStatusButton.removeStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); - bulkUploadStatusButton.setIcon(FontAwesome.UPLOAD); + if (bulkUploadStatusButton == null) { + return; } + bulkUploadStatusButton.removeStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); + bulkUploadStatusButton.setIcon(FontAwesome.UPLOAD); } protected void updateUploadBtnIconToProgressIndicator() { - if (null != bulkUploadStatusButton) { - bulkUploadStatusButton.addStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); - bulkUploadStatusButton.setIcon(null); + if (bulkUploadStatusButton == null) { + return; } + bulkUploadStatusButton.addStyleName(SPUIStyleDefinitions.BULK_UPLOAD_PROGRESS_INDICATOR_STYLE); + bulkUploadStatusButton.setIcon(null); } protected void actionButtonClicked() { - if (hasUnsavedActions()) { - unsavedActionsWindow = SPUIComponentProvider.getWindow(getUnsavedActionsWindowCaption(), - SPUIComponetIdProvider.SAVE_ACTIONS_POPUP, SPUIDefinitions.CONFIRMATION_WINDOW); - unsavedActionsWindow.addCloseListener(event -> unsavedActionsWindowClosed()); - unsavedActionsWindow.setContent(getUnsavedActionsWindowContent()); - unsavedActionsWindow.setId(SPUIComponetIdProvider.CONFIRMATION_POPUP_ID); - UI.getCurrent().addWindow(unsavedActionsWindow); + if (!hasUnsavedActions()) { + return; } + unsavedActionsWindow = SPUIComponentProvider.getWindow(getUnsavedActionsWindowCaption(), + SPUIComponetIdProvider.SAVE_ACTIONS_POPUP, SPUIDefinitions.CONFIRMATION_WINDOW); + unsavedActionsWindow.addCloseListener(event -> unsavedActionsWindowClosed()); + unsavedActionsWindow.setContent(getUnsavedActionsWindowContent()); + unsavedActionsWindow.setId(SPUIComponetIdProvider.CONFIRMATION_POPUP_ID); + UI.getCurrent().addWindow(unsavedActionsWindow); } /** @@ -225,22 +230,11 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme UI.getCurrent().removeWindow(unsavedActionsWindow); } - /* - * (non-Javadoc) - * - * @see com.vaadin.event.dd.DropHandler#getAcceptCriterion() - */ @Override public AcceptCriterion getAcceptCriterion() { return getDeleteLayoutAcceptCriteria(); } - /* - * (non-Javadoc) - * - * @see com.vaadin.event.dd.DropHandler#drop(com.vaadin.event.dd. - * DragAndDropEvent) - */ @Override public void drop(final DragAndDropEvent event) { processDroppedComponent(event); @@ -287,6 +281,43 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme } } + /** + * Only in deployment view count message is displayed. + * + * @return + */ + protected boolean hasCountMessage() { + return false; + } + + /** + * + * @return the count message label + */ + protected Label getCountMessageLabel() { + return null; + } + + /** + * @return true if bulk upload is allowed and has required create + * permissions. + */ + protected boolean hasBulkUploadPermission() { + // can be overriden + return false; + } + + protected void showBulkUploadWindow() { + // can be overriden + } + + /** + * restore the upload status count. + */ + protected void restoreBulkUploadStatusCount() { + // can be overriden + } + /** * Check user has delete permission. * @@ -362,11 +393,6 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme */ protected abstract void restoreActionCount(); - /** - * restore the upload status count. - */ - protected abstract void restoreBulkUploadStatusCount(); - /** * This method will be called when unsaved actions window is closed. */ @@ -387,21 +413,4 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme */ protected abstract boolean hasUnsavedActions(); - /** - * Only in deployment view count message is displayed. - * - * @return - */ - protected abstract boolean hasCountMessage(); - - protected abstract Label getCountMessageLabel(); - - /** - * @return true if bulk upload is allowed and has required create - * permissions. - */ - protected abstract boolean hasBulkUploadPermission(); - - protected abstract void showBulkUploadWindow(); - } 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 ae6811ddb..c9487d467 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 @@ -9,29 +9,59 @@ package org.eclipse.hawkbit.ui.common.table; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Set; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; +import org.eclipse.hawkbit.ui.common.ManagmentEntityState; +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.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.TableColumn; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.spring.events.EventBus; +import com.google.gwt.thirdparty.guava.common.collect.Iterables; import com.vaadin.data.Container; +import com.vaadin.data.Item; import com.vaadin.event.dd.DropHandler; import com.vaadin.ui.Table; +import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** - * Parent class for table. - * - * + * Abstract table to handling entity * + * @param + * e is the entity class + * @param + * i is the id of the table */ -public abstract class AbstractTable extends Table { +public abstract class AbstractTable extends Table { private static final long serialVersionUID = 4856562746502217630L; + private static final Logger LOG = LoggerFactory.getLogger(AbstractTable.class); + + @Autowired + protected transient EventBus.SessionEventBus eventBus; + + @Autowired + protected I18N i18n; + /** * Initialize the components. */ + @PostConstruct protected void init() { setStyleName("sp-table"); setSizeFull(); @@ -48,6 +78,52 @@ public abstract class AbstractTable extends Table { addValueChangeListener(event -> onValueChange()); selectRow(); setPageLength(SPUIDefinitions.PAGE_SIZE); + + setDataAvailable(getContainerDataSource().size() != 0); + eventBus.subscribe(this); + } + + @PreDestroy + protected void destroy() { + eventBus.unsubscribe(this); + } + + public static Set getTableValue(final Table table) { + @SuppressWarnings("unchecked") + Set values = (Set) table.getValue(); + if (values == null) { + values = Collections.emptySet(); + } + if (values.remove(null)) { + LOG.warn("Null values in table content. How could this happen?"); + } + return values; + } + + private void onValueChange() { + eventBus.publish(this, UploadArtifactUIEvent.HIDE_DROP_HINTS); + + // TODO Einzelwerte? + + final Set values = getTableValue(this); + + E entity = null; + + final I lastId = Iterables.getLast(values); + if (lastId != null) { + entity = findEntityByTableValue(lastId); + } + setManagementEntitiyStateValues(values, lastId); + publishEntityAfterValueChange(entity); + } + + protected void setManagementEntitiyStateValues(final Set values, final I lastId) { + final ManagmentEntityState managmentEntityState = getManagmentEntityState(); + if (managmentEntityState == null) { + return; + } + managmentEntityState.setLastSelectedEntity(lastId); + managmentEntityState.setSelectedEnitities(values); } private void setDefault() { @@ -118,6 +194,51 @@ public abstract class AbstractTable extends Table { selectRow(); } + /** + * Add new software module to table. + * + * @param baseEntity + * new software module + */ + protected Item addEntity(final E baseEntity) { + final Object addItem = addItem(); + final Item item = getItem(addItem); + updateEntity(baseEntity, item); + return item; + } + + @SuppressWarnings("unchecked") + protected void updateEntity(final E baseEntity, final Item item) { + item.getItemProperty(SPUILabelDefinitions.VAR_NAME).setValue(baseEntity.getName()); + item.getItemProperty(SPUILabelDefinitions.VAR_ID).setValue(baseEntity.getId()); + item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(baseEntity.getDescription()); + item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY) + .setValue(HawkbitCommonUtil.getIMUser(baseEntity.getCreatedBy())); + item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY) + .setValue(HawkbitCommonUtil.getIMUser(baseEntity.getLastModifiedBy())); + item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_DATE) + .setValue(SPDateTimeUtil.getFormattedDate(baseEntity.getCreatedAt())); + item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) + .setValue(SPDateTimeUtil.getFormattedDate(baseEntity.getLastModifiedAt())); + + } + + protected void onBaseEntityEvent(final BaseEntityEvent event) { + if (BaseEntityEventType.MINIMIZED == event.getEventType()) { + UI.getCurrent().access(() -> applyMinTableSettings()); + } else if (BaseEntityEventType.MAXIMIZED == event.getEventType()) { + UI.getCurrent().access(() -> applyMaxTableSettings()); + } else if (BaseEntityEventType.NEW_ENTITY == event.getEventType()) { + UI.getCurrent().access(() -> addEntity(event.getEntity())); + } + } + + protected abstract E findEntityByTableValue(I lastSelectedId); + + protected abstract void publishEntityAfterValueChange(E selectedLastEntity); + + protected abstract ManagmentEntityState getManagmentEntityState(); + /** * Get Id of the table. * @@ -141,7 +262,9 @@ public abstract class AbstractTable extends Table { /** * Add any generated columns if required. */ - protected abstract void addCustomGeneratedColumns(); + protected void addCustomGeneratedColumns() { + // can be overriden + } /** * Check if first row should be selected by default on load. @@ -157,11 +280,6 @@ public abstract class AbstractTable extends Table { */ protected abstract Object getItemIdToSelect(); - /** - * On select of row. - */ - protected abstract void onValueChange(); - /** * Check if the table is maximized or minimized. * @@ -174,7 +292,23 @@ public abstract class AbstractTable extends Table { * * @return List list of visible columns */ - protected abstract List getTableVisibleColumns(); + protected List getTableVisibleColumns() { + final List columnList = new ArrayList<>(); + if (isMaximized()) { + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); + columnList + .add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); + columnList.add( + new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), + 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2F)); + } else { + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.8F)); + } + return columnList; + } /** * Get drop handler for the table. @@ -183,4 +317,6 @@ public abstract class AbstractTable extends Table { */ protected abstract DropHandler getTableDropHandler(); + protected abstract void setDataAvailable(boolean available); + } diff --git a/hawkbit-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 new file mode 100644 index 000000000..b0b7551ac --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEvent.java @@ -0,0 +1,44 @@ +/** + * 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.table; + +import org.eclipse.hawkbit.repository.model.BaseEntity; + +/** + * Event to represent add, update or delete. + * + */ +public class BaseEntityEvent { + + private final BaseEntityEventType eventType; + + private final T entity; + + /** + * Base entity event + * + * @param eventType + * the event type + * @param entity + * the entity reference + */ + public BaseEntityEvent(final BaseEntityEventType eventType, final T entity) { + this.eventType = eventType; + this.entity = entity; + } + + public T getEntity() { + return entity; + } + + public BaseEntityEventType getEventType() { + return eventType; + } + +} diff --git a/hawkbit-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 new file mode 100644 index 000000000..bfaf593fb --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/BaseEntityEventType.java @@ -0,0 +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.table; + +/** + * + * + */ +public enum BaseEntityEventType { + NEW_ENTITY, UPDATED_ENTITY, DELETE_ENTITY, SELECTED_ENTITY, MAXIMIZED, MINIMIZED; +} diff --git a/hawkbit-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 index 4404e1f8a..30aeba925 100644 --- a/hawkbit-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 @@ -17,6 +17,9 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.BaseEntity; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -35,6 +38,7 @@ import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.combobox.FilteringMode; import com.vaadin.ui.Button; import com.vaadin.ui.CssLayout; +import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; /** @@ -44,7 +48,7 @@ import com.vaadin.ui.themes.ValoTheme; * * */ -public abstract class AbstractTagToken implements Serializable { +public abstract class AbstractTagToken implements Serializable { private static final String COLOR_PROPERTY = "color"; @@ -59,7 +63,7 @@ public abstract class AbstractTagToken implements Serializable { protected final Map tokensAdded = new HashMap<>(); protected CssLayout tokenLayout = new CssLayout(); - + @Autowired protected SpPermissionChecker checker; @@ -71,23 +75,37 @@ public abstract class AbstractTagToken implements Serializable { @Autowired protected transient EventBus.SessionEventBus eventBus; - + @Autowired protected ManagementUIState managementUIState; + protected T selectedEntity; + @PostConstruct protected void init() { createTokenField(); checkIfTagAssignedIsAllowed(); eventBus.subscribe(this); } - @PreDestroy - void destroy() { + protected void destroy() { eventBus.unsubscribe(this); } + protected void onBaseEntityEvent(final BaseEntityEvent baseEntityEvent) { + if (BaseEntityEventType.SELECTED_ENTITY != baseEntityEvent.getEventType()) { + return; + } + UI.getCurrent().access(() -> { + final T entity = baseEntityEvent.getEntity(); + if (entity != null) { + selectedEntity = entity; + repopulateToken(); + } + }); + } + private void createTokenField() { final Container tokenContainer = createContainer(); tokenField = createTokenField(tokenContainer); 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 c38a97228..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 @@ -11,6 +11,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.model.BaseEntity; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -19,15 +20,13 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; /** * Abstract class for target tag token layout. */ -public abstract class AbstractTargetTagToken extends AbstractTagToken { +public abstract class AbstractTargetTagToken extends AbstractTagToken { private static final long serialVersionUID = 7772876588903171201L; @Autowired protected transient TagManagement tagManagement; - - @EventBusListenerMethod(scope = EventScope.SESSION) void onEventTargetTagCreated(final TargetTagCreatedBulkEvent event) { for (final TargetTag tag : event.getEntities()) { 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 9a245229b..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 @@ -14,8 +14,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.DistributionSetTagAssigmentResultEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagCreatedBulkEvent; import org.eclipse.hawkbit.eventbus.event.DistributionSetTagDeletedEvent; @@ -26,7 +24,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.ui.management.event.DistributionTableEvent; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -36,7 +33,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Item; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.UI; /** * Implementation of target/ds tag token layout. @@ -44,7 +40,7 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class DistributionTagToken extends AbstractTagToken { +public class DistributionTagToken extends AbstractTagToken { private static final long serialVersionUID = -8022738301736043396L; @Autowired @@ -53,8 +49,6 @@ public class DistributionTagToken extends AbstractTagToken { @Autowired private transient DistributionSetManagement distributionSetManagement; - private DistributionSet selectedDS; - // To Be Done : have to set this value based on view??? private static final Boolean NOTAGS_SELECTED = Boolean.FALSE; @@ -82,9 +76,9 @@ public class DistributionTagToken extends AbstractTagToken { private DistributionSetTagAssignmentResult toggleAssignment(final String tagNameSelected) { final Set distributionList = new HashSet<>(); - distributionList.add(selectedDS.getId()); - final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, - tagNameSelected); + distributionList.add(selectedEntity.getId()); + final DistributionSetTagAssignmentResult result = distributionSetManagement + .toggleTagAssignment(distributionList, tagNameSelected); uinotification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(tagNameSelected, result, i18n)); return result; } @@ -117,8 +111,8 @@ public class DistributionTagToken extends AbstractTagToken { @Override public void displayAlreadyAssignedTags() { removePreviouslyAddedTokens(); - if (selectedDS != null) { - for (final DistributionSetTag tag : selectedDS.getTags()) { + if (selectedEntity != null) { + for (final DistributionSetTag tag : selectedEntity.getTags()) { addNewToken(tag.getId()); } } @@ -134,15 +128,7 @@ public class DistributionTagToken extends AbstractTagToken { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent distributionTableEvent) { - if (distributionTableEvent.getDistributionComponentEvent() != DistributionComponentEvent.ON_VALUE_CHANGE) { - return; - } - UI.getCurrent().access(() -> { - if (distributionTableEvent.getDistributionSet() != null) { - selectedDS = distributionTableEvent.getDistributionSet(); - repopulateToken(); - } - }); + onBaseEntityEvent(distributionTableEvent); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -202,10 +188,4 @@ public class DistributionTagToken extends AbstractTagToken { return false; } - @Override - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - } 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 376e7d905..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 @@ -22,7 +22,6 @@ import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; -import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +31,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Item; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.UI; /** * Implementation of Target tag token. @@ -41,7 +39,7 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class TargetTagToken extends AbstractTargetTagToken { +public class TargetTagToken extends AbstractTargetTagToken { private static final long serialVersionUID = 7124887018280196721L; @@ -54,8 +52,6 @@ public class TargetTagToken extends AbstractTargetTagToken { @Autowired private transient TargetManagement targetManagement; - private Target selectedTarget; - @Override protected String getTagStyleName() { return "target-tag-"; @@ -80,7 +76,7 @@ public class TargetTagToken extends AbstractTargetTagToken { private TargetTagAssignmentResult toggleAssignment(final String tagNameSelected) { final Set targetList = new HashSet<>(); - targetList.add(selectedTarget.getControllerId()); + targetList.add(selectedEntity.getControllerId()); final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, tagNameSelected); uinotification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(tagNameSelected, result, i18n)); return result; @@ -114,8 +110,8 @@ public class TargetTagToken extends AbstractTargetTagToken { @Override protected void displayAlreadyAssignedTags() { removePreviouslyAddedTokens(); - if (selectedTarget != null) { - for (final TargetTag tag : selectedTarget.getTags()) { + if (selectedEntity != null) { + for (final TargetTag tag : selectedEntity.getTags()) { addNewToken(tag.getId()); } } @@ -174,13 +170,7 @@ public class TargetTagToken extends AbstractTargetTagToken { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent targetTableEvent) { - if (targetTableEvent.getTargetComponentEvent() == TargetComponentEvent.SELECTED_TARGET - && targetTableEvent.getTarget() != null) { - UI.getCurrent().access(() -> { - selectedTarget = targetTableEvent.getTarget(); - repopulateToken(); - }); - } + onBaseEntityEvent(targetTableEvent); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java index 451a16ea7..ab41bc579 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/DistributionsView.java @@ -13,7 +13,7 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.distributions.disttype.DSTypeFilterLayout; import org.eclipse.hawkbit.ui.distributions.dstable.DistributionSetTableLayout; import org.eclipse.hawkbit.ui.distributions.event.DragEvent; @@ -22,7 +22,6 @@ import org.eclipse.hawkbit.ui.distributions.smtable.SwModuleTableLayout; import org.eclipse.hawkbit.ui.distributions.smtype.DistSMTypeFilterLayout; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; @@ -160,18 +159,18 @@ public class DistributionsView extends VerticalLayout implements View, BrowserWi @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent event) { - if (event.getDistributionComponentEvent() == DistributionComponentEvent.MINIMIZED) { + if (BaseEntityEventType.MINIMIZED == event.getEventType()) { minimizeDistTable(); - } else if (event.getDistributionComponentEvent() == DistributionComponentEvent.MAXIMIZED) { + } else if (BaseEntityEventType.MAXIMIZED == event.getEventType()) { maximizeDistTable(); } } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent event) { - if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MINIMIZED) { + if (BaseEntityEventType.MINIMIZED == event.getEventType()) { minimizeSwTable(); - } else if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MAXIMIZED) { + } else if (BaseEntityEventType.MAXIMIZED == event.getEventType()) { maximizeSwTable(); } } 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 02916ae7c..64a9819bb 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 @@ -21,7 +21,7 @@ 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.AbstractTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; import org.eclipse.hawkbit.ui.common.tagdetails.DistributionTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -31,7 +31,6 @@ import org.eclipse.hawkbit.ui.distributions.event.SoftwareModuleAssignmentDiscar 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.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.springframework.beans.factory.annotation.Autowired; @@ -58,7 +57,7 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class DistributionSetDetails extends AbstractTableDetailsLayout { +public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDetailsLayout { private static final long serialVersionUID = -4595004466943546669L; @@ -85,10 +84,6 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { private VerticalLayout tagsLayout; - private DistributionSet selectedDsModule; - - private Long dsId; - Map assignedSWModule = new HashMap<>(); /** @@ -106,28 +101,15 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { return tagsLayout; } - private void populateDetailsWidget(final DistributionSet ds) { - if (ds != null) { - setDsId(ds.getId()); - setName(getDefaultCaption(), HawkbitCommonUtil.getFormattedNameVersion(ds.getName(), ds.getVersion())); - populateDetails(ds); - populateDescription(ds); - populateLog(ds); - populteModule(ds); - populateTags(ds); - } else { - setDsId(null); - setName(getDefaultCaption(), HawkbitCommonUtil.SP_STRING_EMPTY); - populateDetails(null); - populateDescription(null); - populteModule(null); - populateTags(null); - populateLog(null); - } + @Override + protected void populateDetailsWidget() { + populateDetails(); + populateModule(); + populateTags(); } - private void populteModule(final DistributionSet distributionSet) { - softwareModuleTable.populateModule(distributionSet); + private void populateModule() { + softwareModuleTable.populateModule(selectedBaseEntity); showUnsavedAssignment(); } @@ -159,7 +141,7 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { assignedSWModule.put(softwareModule.getType().getName(), new StringBuilder().append("").append( getUnsavedAssigedSwModule(softwareModule.getName(), softwareModule.getVersion())) - .append("")); + .append("")); } } @@ -243,38 +225,22 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { return softwareLayout; } - private void populateTags(final DistributionSet ds) { + private void populateTags() { tagsLayout.removeAllComponents(); - if (null != ds) { + if (null != selectedBaseEntity) { tagsLayout.addComponent(distributionTagToken.getTokenField()); } } - private void populateLog(final DistributionSet ds) { - if (null != ds) { - updateLogLayout(getLogLayout(), ds.getLastModifiedAt(), ds.getLastModifiedBy(), ds.getCreatedAt(), - ds.getCreatedBy(), i18n); - } else { - updateLogLayout(getLogLayout(), null, HawkbitCommonUtil.SP_STRING_EMPTY, null, null, i18n); - } - } - - private void populateDetails(final DistributionSet ds) { - if (ds != null) { - updateDistributionSetDetailsLayout(ds.getType().getName(), ds.isRequiredMigrationStep()); + private void populateDetails() { + if (selectedBaseEntity != null) { + updateDistributionSetDetailsLayout(selectedBaseEntity.getType().getName(), + selectedBaseEntity.isRequiredMigrationStep()); } else { updateDistributionSetDetailsLayout(null, null); } } - private void populateDescription(final DistributionSet ds) { - if (ds != null) { - updateDescriptionLayout(i18n.get("label.description"), ds.getDescription()); - } else { - updateDescriptionLayout(i18n.get("label.description"), null); - } - } - private void updateDistributionSetDetailsLayout(final String type, final Boolean isMigrationRequired) { final VerticalLayout detailsTabLayout = getDetailsLayout(); detailsTabLayout.removeAllComponents(); @@ -293,18 +259,10 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { } } - public Long getDsId() { - return dsId; - } - - public void setDsId(final Long dsId) { - this.dsId = dsId; - } - @Override protected void onEdit(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); - distributionAddUpdateWindowLayout.populateValuesOfDistribution(getDsId()); + distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId()); newDistWindow.setCaption(i18n.get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); @@ -326,11 +284,6 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { return manageDistUIState.isDsTableMaximized(); } - @Override - protected void populateDetailsWidget() { - populateDetailsWidget(selectedDsModule); - } - @Override protected String getDefaultCaption() { return i18n.get("distribution.details.header"); @@ -345,11 +298,6 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); } - @Override - protected void clearDetails() { - populateDetailsWidget(null); - } - @Override protected Boolean hasEditPermission() { return permissionChecker.hasUpdateDistributionPermission(); @@ -358,59 +306,40 @@ public class DistributionSetDetails extends AbstractTableDetailsLayout { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent event) { if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.ASSIGN_SOFTWARE_MODULE) { - ui.access(() -> updateSoftwareModule(event.getSoftwareModule())); + UI.getCurrent().access(() -> updateSoftwareModule(event.getEntity())); } } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent distributionTableEvent) { - if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.ON_VALUE_CHANGE - || distributionTableEvent - .getDistributionComponentEvent() == DistributionComponentEvent.EDIT_DISTRIBUTION) { - assignedSWModule.clear(); - ui.access(() -> { - /** - * distributionTableEvent.getDistributionSet() is null when - * table has no data. - */ - if (distributionTableEvent.getDistributionSet() != null) { - selectedDsModule = distributionTableEvent.getDistributionSet(); - populateData(true); - } else { - populateData(false); - } - }); - } else if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.MINIMIZED) { - ui.access(() -> showLayout()); - } else if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.MAXIMIZED) { - ui.access(() -> hideLayout()); - } + onBaseEntityEvent(distributionTableEvent); } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleAssignmentDiscardEvent softwareModuleAssignmentDiscardEvent) { if (softwareModuleAssignmentDiscardEvent.getDistributionSetIdName() != null) { - ui.access(() -> { + UI.getCurrent().access(() -> { final DistributionSetIdName distIdName = softwareModuleAssignmentDiscardEvent .getDistributionSetIdName(); - if (distIdName.getId().equals(selectedDsModule.getId()) - && distIdName.getName().equals(selectedDsModule.getName())) { - selectedDsModule = distributionSetManagement - .findDistributionSetByIdWithDetails(selectedDsModule.getId()); - populteModule(selectedDsModule); + if (distIdName.getId().equals(getSelectedBaseEntityId()) + && distIdName.getName().equals(selectedBaseEntity.getName())) { + selectedBaseEntity = distributionSetManagement + .findDistributionSetByIdWithDetails(getSelectedBaseEntityId()); + populateModule(); } }); } } - + @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SaveActionWindowEvent saveActionWindowEvent) { if ((saveActionWindowEvent == SaveActionWindowEvent.SAVED_ASSIGNMENTS || saveActionWindowEvent == SaveActionWindowEvent.DISCARD_ALL_ASSIGNMENTS) - && selectedDsModule != null) { + && selectedBaseEntity != null) { assignedSWModule.clear(); - selectedDsModule = distributionSetManagement.findDistributionSetByIdWithDetails(selectedDsModule.getId()); - ui.access(() -> populteModule(selectedDsModule)); + selectedBaseEntity = distributionSetManagement + .findDistributionSetByIdWithDetails(getSelectedBaseEntityId()); + UI.getCurrent().access(() -> populateModule()); } } 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 8d22f6782..51f30117a 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 @@ -12,15 +12,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; @@ -33,17 +29,15 @@ 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.table.AbstractTable; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; 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.management.event.DistributionTableEvent; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; 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.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -56,7 +50,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -77,7 +70,7 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class DistributionSetTable extends AbstractTable { +public class DistributionSetTable extends AbstractTable { private static final long serialVersionUID = -7731776093470487988L; @@ -86,18 +79,12 @@ public class DistributionSetTable extends AbstractTable { private static final List DISPLAY_DROP_HINT_EVENTS = new ArrayList<>( Arrays.asList(DragEvent.SOFTWAREMODULE_DRAG)); - @Autowired - private I18N i18n; - @Autowired private SpPermissionChecker permissionChecker; @Autowired private ManageDistUIState manageDistUIState; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient DistributionSetManagement distributionSetManagement; @@ -117,12 +104,9 @@ public class DistributionSetTable extends AbstractTable { * Initialize the component. */ @Override - @PostConstruct protected void init() { super.init(); addTableStyleGenerator(); - setNoDataAvailable(); - eventBus.subscribe(this); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -171,13 +155,6 @@ public class DistributionSetTable extends AbstractTable { Boolean.class, null, false, true); } - @Override - protected void addCustomGeneratedColumns() { - /** - * No generated columns. - */ - } - @Override protected boolean isFirstRowSelectedOnLoad() { return !manageDistUIState.getSelectedDistributions().isPresent() @@ -193,37 +170,19 @@ public class DistributionSetTable extends AbstractTable { } @Override - protected void onValueChange() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - @SuppressWarnings("unchecked") - final Set values = (Set) getValue(); - DistributionSetIdName value = null; - if (values != null && !values.isEmpty()) { - final Iterator iterator = values.iterator(); + protected DistributionSet findEntityByTableValue(final DistributionSetIdName entityTableId) { + return distributionSetManagement.findDistributionSetByIdWithDetails(entityTableId.getId()); + } - while (iterator.hasNext()) { - value = iterator.next(); - } - /** - * Adding null check to make to avoid NPE.Its weird that at times - * getValue returns null. - */ - if (null != value) { - manageDistUIState.setSelectedDistributions(values); - manageDistUIState.setLastSelectedDistribution(value); + @Override + protected ManageDistUIState getManagmentEntityState() { + return manageDistUIState; + } - final DistributionSet lastSelectedDistSet = distributionSetManagement - .findDistributionSetByIdWithDetails(value.getId()); - eventBus.publish(this, - new DistributionTableEvent(DistributionComponentEvent.ON_VALUE_CHANGE, lastSelectedDistSet)); - } - } else { - manageDistUIState.setSelectedDistributions(null); - manageDistUIState.setLastSelectedDistribution(null); - eventBus.publish(this, new DistributionTableEvent(DistributionComponentEvent.ON_VALUE_CHANGE, null)); - } + @Override + protected void publishEntityAfterValueChange(final DistributionSet distributionSet) { + eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, distributionSet)); eventBus.publish(this, DistributionsUIEvent.ORDER_BY_DISTRIBUTION); - } @Override @@ -233,7 +192,13 @@ public class DistributionSetTable extends AbstractTable { @Override protected List getTableVisibleColumns() { - return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), false, i18n); + final List columnList = super.getTableVisibleColumns(); + if (isMaximized()) { + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1f)); + } else { + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2f)); + } + return columnList; } @Override @@ -331,10 +296,6 @@ public class DistributionSetTable extends AbstractTable { updateDropedDetails(distributionSetIdName, softwareModules); } - /** - * @param distId - * @param softwareModule - */ private void publishAssignEvent(final Long distId, final SoftwareModule softwareModule) { if (manageDistUIState.getLastSelectedDistribution().isPresent() && manageDistUIState.getLastSelectedDistribution().get().getId().equals(distId)) { @@ -343,11 +304,6 @@ public class DistributionSetTable extends AbstractTable { } } - /** - * @param map - * @param softwareModule - * @param softwareModuleIdName - */ private void handleFirmwareCase(final Map> map, final SoftwareModule softwareModule, final SoftwareModuleIdName softwareModuleIdName) { if (softwareModule.getType().getMaxAssignments() == 1) { @@ -361,11 +317,6 @@ public class DistributionSetTable extends AbstractTable { } } - /** - * @param map - * @param softwareModule - * @param softwareModuleIdName - */ private void handleSoftwareCase(final Map> map, final SoftwareModule softwareModule, final SoftwareModuleIdName softwareModuleIdName) { if (softwareModule.getType().getMaxAssignments() == Integer.MAX_VALUE) { @@ -475,37 +426,6 @@ public class DistributionSetTable extends AbstractTable { return true; } - /** - * Add new software module to table. - * - * @param swModule - * new software module - */ - @SuppressWarnings("unchecked") - private void addDistributionSet(final DistributionSet distributionSet) { - final Object addItem = addItem(); - final Item item = getItem(addItem); - - item.getItemProperty(SPUILabelDefinitions.VAR_NAME).setValue(distributionSet.getName()); - item.getItemProperty(SPUILabelDefinitions.DIST_ID).setValue(distributionSet.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_ID).setValue(distributionSet.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(distributionSet.getDescription()); - item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(distributionSet.getVersion()); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY) - .setValue(HawkbitCommonUtil.getIMUser(distributionSet.getCreatedBy())); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY) - .setValue(HawkbitCommonUtil.getIMUser(distributionSet.getLastModifiedBy())); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); - item.getItemProperty(SPUILabelDefinitions.VAR_IS_DISTRIBUTION_COMPLETE).setValue(distributionSet.isComplete()); - if (manageDistUIState.getSelectedDistributions().isPresent()) { - manageDistUIState.getSelectedDistributions().get().stream().forEach(dsNameId -> unselect(dsNameId)); - } - select(distributionSet.getDistributionSetIdName()); - } - private void addTableStyleGenerator() { setCellStyleGenerator((source, itemId, propertyId) -> { if (propertyId == null) { @@ -525,13 +445,7 @@ public class DistributionSetTable extends AbstractTable { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent event) { - if (event.getDistributionComponentEvent() == DistributionComponentEvent.MINIMIZED) { - UI.getCurrent().access(() -> applyMinTableSettings()); - } else if (event.getDistributionComponentEvent() == DistributionComponentEvent.MAXIMIZED) { - UI.getCurrent().access(() -> applyMaxTableSettings()); - } else if (event.getDistributionComponentEvent() == DistributionComponentEvent.ADD_DISTRIBUTION) { - UI.getCurrent().access(() -> addDistributionSet(event.getDistributionSet())); - } + onBaseEntityEvent(event); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -556,21 +470,25 @@ public class DistributionSetTable extends AbstractTable { } } - @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); + @Override + @SuppressWarnings("unchecked") + protected Item addEntity(final DistributionSet baseEntity) { + final Item item = super.addEntity(baseEntity); + item.getItemProperty(SPUILabelDefinitions.DIST_ID).setValue(baseEntity.getId()); + item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); + item.getItemProperty(SPUILabelDefinitions.VAR_IS_DISTRIBUTION_COMPLETE).setValue(baseEntity.isComplete()); + + if (manageDistUIState.getSelectedDistributions().isPresent()) { + manageDistUIState.getSelectedDistributions().get().stream().forEach(dsNameId -> unselect(dsNameId)); + } + select(baseEntity.getDistributionSetIdName()); + return item; } - private void setNoDataAvailable() { - final int containerSize = getContainerDataSource().size(); - if (containerSize == 0) { - manageDistUIState.setNoDataAvailableDist(true); - } else { - manageDistUIState.setNoDataAvailableDist(false); - } + @Override + protected void setDataAvailable(final boolean available) { + manageDistUIState.setNoDataAvailableDist(!available); + } + } 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 6ac4a1007..a42563505 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 @@ -9,12 +9,12 @@ package org.eclipse.hawkbit.ui.distributions.dstable; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DragEvent; 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.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.springframework.beans.factory.annotation.Autowired; @@ -125,13 +125,13 @@ public class DistributionSetTableHeader extends AbstractTableHeader { @Override public void maximizeTable() { manageDistUIstate.setDsTableMaximized(Boolean.TRUE); - eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MAXIMIZED, null)); + eventbus.publish(this, new DistributionTableEvent(BaseEntityEventType.MAXIMIZED, null)); } @Override public void minimizeTable() { manageDistUIstate.setDsTableMaximized(Boolean.FALSE); - eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MINIMIZED, null)); + eventbus.publish(this, new DistributionTableEvent(BaseEntityEventType.MINIMIZED, null)); } @Override 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 8b7d2ada0..ea33a2ea3 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 @@ -37,7 +37,6 @@ import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Component; -import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.Table.TableTransferable; import com.vaadin.ui.UI; @@ -296,7 +295,7 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected Component getUnsavedActionsWindowContent() { - distConfirmationWindowLayout.init(); + distConfirmationWindowLayout.inittialize(); return distConfirmationWindowLayout; } @@ -316,35 +315,6 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { return unSavedActionsTables || unSavedActionsTypes; } - @Override - protected boolean hasCountMessage() { - return false; - } - - @Override - protected Label getCountMessageLabel() { - return null; - } - - @Override - protected boolean hasBulkUploadPermission() { - return false; - } - - @Override - protected void showBulkUploadWindow() { - /** - * Bulk upload not supported No implementation required. - */ - } - - @Override - protected void restoreBulkUploadStatusCount() { - /** - * No implementation required.As no bulk upload in Distribution view. - */ - } - private DistributionSetType getCurrentDistributionSetType() { return systemManagement.getTenantMetadata().getDefaultDsType(); } 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 2299054f3..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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.footer; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -17,8 +16,6 @@ import java.util.Map.Entry; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; - import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -32,13 +29,11 @@ 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.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.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -48,6 +43,7 @@ import com.vaadin.data.util.IndexedContainer; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Table.Align; import com.vaadin.ui.themes.ValoTheme; @@ -83,12 +79,6 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW private ConfirmationTab assignmnetTab; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient DistributionSetManagement dsManagement; @@ -98,20 +88,6 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW @Autowired private ManageDistUIState manageDistUIState; - /** - * Initialze the component. - */ - @PostConstruct - public void init() { - super.inittialize(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.confirmwindow.layout. - * AbstractConfirmationWindowLayout# getConfimrationTabs() - */ @Override protected Map getConfimrationTabs() { final Map tabs = new HashMap<>(); @@ -161,26 +137,13 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW /* Add the discard action column */ tab.getTable().addGeneratedColumn(SW_DISCARD_CHGS, (source, itemId, columnId) -> { - final Button deleteswIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - ValoTheme.BUTTON_TINY + " " + SPUIStyleDefinitions.REDICON, true, FontAwesome.REPLY, - SPUIButtonStyleSmallNoBorder.class); - deleteswIcon.setData(itemId); - deleteswIcon.setImmediate(true); - deleteswIcon.addClickListener(event -> discardSoftwareDelete(event, itemId, tab)); - return deleteswIcon; + final ClickListener clickListener = event -> discardSoftwareDelete(event, itemId, tab); + return createDiscardButton(itemId, clickListener); }); - /* set the visible columns */ - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(SW_MODULE_NAME_MSG); - visibleColumnIds.add(SW_DISCARD_CHGS); - visibleColumnLabels.add(i18n.get("upload.swModuleTable.header")); - visibleColumnLabels.add(i18n.get("header.second.deletetarget.table")); - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(SW_MODULE_NAME_MSG, SW_DISCARD_CHGS); + tab.getTable().setColumnHeaders(i18n.get("upload.swModuleTable.header"), + i18n.get("header.second.deletetarget.table")); tab.getTable().setColumnExpandRatio(SW_MODULE_NAME_MSG, SPUIDefinitions.TARGET_DISTRIBUTION_COLUMN_WIDTH); tab.getTable().setColumnExpandRatio(SW_DISCARD_CHGS, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -295,18 +258,9 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW return deleteIcon; }); - // set the visible columns - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(SW_MODULE_TYPE_NAME); - visibleColumnIds.add(DISCARD); - visibleColumnLabels.add(i18n.get("header.first.delete.swmodule.type.table")); - visibleColumnLabels.add(i18n.get("header.second.delete.swmodule.type.table")); - - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(SW_MODULE_TYPE_NAME, DISCARD); + tab.getTable().setColumnHeaders(i18n.get("header.first.delete.swmodule.type.table"), + i18n.get("header.second.delete.swmodule.type.table")); tab.getTable().setColumnExpandRatio(SW_MODULE_TYPE_NAME, 2); tab.getTable().setColumnExpandRatio(SW_DISCARD_CHGS, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -383,26 +337,14 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW /* Add the discard action column */ tab.getTable().addGeneratedColumn(DISCARD, (source, itemId, columnId) -> { - final Button deleteswIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - ValoTheme.BUTTON_TINY + " " + SPUIStyleDefinitions.REDICON, true, FontAwesome.REPLY, - SPUIButtonStyleSmallNoBorder.class); - deleteswIcon.setData(itemId); - deleteswIcon.setImmediate(true); - deleteswIcon.addClickListener(event -> discardDistDelete(event, itemId, tab)); - return deleteswIcon; + final ClickListener clickListener = event -> discardDistDelete(event, itemId, tab); + return createDiscardButton(itemId, clickListener); + }); - /* set the visible columns */ - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(DIST_NAME); - visibleColumnIds.add(DISCARD); - visibleColumnLabels.add(i18n.get("header.one.deletedist.table")); - visibleColumnLabels.add(i18n.get("header.second.deletedist.table")); - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(DIST_NAME, DISCARD); + tab.getTable().setColumnHeaders(i18n.get("header.one.deletedist.table"), + i18n.get("header.second.deletedist.table")); tab.getTable().setColumnExpandRatio(DIST_NAME, SPUIDefinitions.TARGET_DISTRIBUTION_COLUMN_WIDTH); tab.getTable().setColumnExpandRatio(DISCARD, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -495,30 +437,15 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW // Add the discard action column tab.getTable().addGeneratedColumn(DISCARD, (source, itemId, columnId) -> { - final StringBuilder style = new StringBuilder(ValoTheme.BUTTON_TINY); - style.append(' '); - style.append(SPUIStyleDefinitions.REDICON); - final Button deleteIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - style.toString(), true, FontAwesome.REPLY, SPUIButtonStyleSmallNoBorder.class); - deleteIcon.setData(itemId); - deleteIcon.setImmediate(true); - deleteIcon.addClickListener( - event -> discardDistTypeDelete((String) ((Button) event.getComponent()).getData(), itemId, tab)); - return deleteIcon; + final ClickListener clickListener = event -> discardDistTypeDelete( + (String) ((Button) event.getComponent()).getData(), itemId, tab); + return createDiscardButton(itemId, clickListener); + }); - // set the visible columns - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(DIST_SET_NAME); - visibleColumnIds.add(DISCARD); - visibleColumnLabels.add(i18n.get("header.first.delete.dist.type.table")); - visibleColumnLabels.add(i18n.get("header.second.delete.dist.type.table")); - - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(DIST_SET_NAME, DISCARD); + tab.getTable().setColumnHeaders(i18n.get("header.first.delete.dist.type.table"), + i18n.get("header.second.delete.dist.type.table")); tab.getTable().setColumnExpandRatio(DIST_SET_NAME, 2); tab.getTable().setColumnExpandRatio(DISCARD, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -610,20 +537,9 @@ public class DistributionsConfirmationWindowLayout extends AbstractConfirmationW return deleteIcon; }); - // set the visible columns - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(DIST_NAME); - visibleColumnIds.add(SOFTWARE_MODULE_NAME); - visibleColumnIds.add(DISCARD); - visibleColumnLabels.add(i18n.get("header.dist.first.assignment.table")); - visibleColumnLabels.add(i18n.get("header.dist.second.assignment.table")); - visibleColumnLabels.add(i18n.get("header.third.assignment.table")); - - } - assignmnetTab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - assignmnetTab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + assignmnetTab.getTable().setVisibleColumns(DIST_NAME, SOFTWARE_MODULE_NAME, DISCARD); + assignmnetTab.getTable().setColumnHeaders(i18n.get("header.dist.first.assignment.table"), + i18n.get("header.dist.second.assignment.table"), i18n.get("header.third.assignment.table")); assignmnetTab.getTable().setColumnExpandRatio(DIST_NAME, 2); assignmnetTab.getTable().setColumnExpandRatio(SOFTWARE_MODULE_NAME, 2); 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 7aa7d6f31..e1c39ee89 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 @@ -10,9 +10,8 @@ package org.eclipse.hawkbit.ui.distributions.smtable; 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.smtable.SoftwareModuleAddUpdateWindow; -import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -36,7 +35,7 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class SwModuleDetails extends AbstractTableDetailsLayout { +public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLayout { private static final long serialVersionUID = -1052279281066089812L; @@ -46,37 +45,15 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { @Autowired private ManageDistUIState manageDistUIState; - private Long swModuleId; - - private SoftwareModule selectedSwModule; - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent softwareModuleEvent) { - if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE - || softwareModuleEvent - .getSoftwareModuleEventType() == SoftwareModuleEventType.UPDATED_SOFTWARE_MODULE) { - ui.access(() -> { - /** - * softwareModuleEvent.getSoftwareModule() is null when table - * has no data. - */ - if (softwareModuleEvent.getSoftwareModule() != null) { - selectedSwModule = softwareModuleEvent.getSoftwareModule(); - populateData(true); - } else { - populateData(false); - } - }); - } else if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.MINIMIZED) { - showLayout(); - } else if (softwareModuleEvent.getSoftwareModuleEventType() == SoftwareModuleEventType.MAXIMIZED) { - hideLayout(); - } + onBaseEntityEvent(softwareModuleEvent); } @Override protected void onEdit(final ClickEvent event) { - final Window addSoftwareModule = softwareModuleAddUpdateWindow.createUpdateSoftwareModuleWindow(swModuleId); + final Window addSoftwareModule = softwareModuleAddUpdateWindow + .createUpdateSoftwareModuleWindow(getSelectedBaseEntityId()); addSoftwareModule.setCaption(i18n.get("upload.caption.update.swmodule")); UI.getCurrent().addWindow(addSoftwareModule); addSoftwareModule.setVisible(Boolean.TRUE); @@ -109,16 +86,6 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { return manageDistUIState.isSwModuleTableMaximized(); } - @Override - protected void populateDetailsWidget() { - populateDetailsWidget(selectedSwModule); - } - - @Override - protected void clearDetails() { - populateDetailsWidget(null); - } - @Override protected Boolean hasEditPermission() { return permissionChecker.hasUpdateDistributionPermission(); @@ -129,29 +96,22 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { return null; } - private void populateDetails(final SoftwareModule swModule) { + private void populateDetails() { String maxAssign = HawkbitCommonUtil.SP_STRING_EMPTY; - if (swModule != null) { - if (swModule.getType().getMaxAssignments() == Integer.MAX_VALUE) { + if (selectedBaseEntity != null) { + if (selectedBaseEntity.getType().getMaxAssignments() == Integer.MAX_VALUE) { maxAssign = i18n.get("label.multiAssign.type"); } else { maxAssign = i18n.get("label.singleAssign.type"); } - updateSwModuleDetailsLayout(swModule.getType().getName(), swModule.getVendor(), maxAssign); + updateSwModuleDetailsLayout(selectedBaseEntity.getType().getName(), selectedBaseEntity.getVendor(), + maxAssign); } else { updateSwModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); } } - private void populateDescription(final SoftwareModule sw) { - if (sw != null) { - updateDescriptionLayout(i18n.get("label.description"), sw.getDescription()); - } else { - updateDescriptionLayout(i18n.get("label.description"), null); - } - } - private void updateSwModuleDetailsLayout(final String type, final String vendor, final String maxAssign) { final VerticalLayout detailsTabLayout = getDetailsLayout(); @@ -176,34 +136,9 @@ public class SwModuleDetails extends AbstractTableDetailsLayout { } - private void populateLog(final SoftwareModule softwareModule) { - if (null != softwareModule) { - updateLogLayout(getLogLayout(), softwareModule.getLastModifiedAt(), softwareModule.getLastModifiedBy(), - softwareModule.getCreatedAt(), softwareModule.getCreatedBy(), i18n); - } else { - updateLogLayout(getLogLayout(), null, HawkbitCommonUtil.SP_STRING_EMPTY, null, null, i18n); - } - } - - public void setSwModuleId(final Long swModuleId) { - this.swModuleId = swModuleId; - } - - private void populateDetailsWidget(final SoftwareModule swModule) { - if (swModule != null) { - setSwModuleId(swModule.getId()); - setName(getDefaultCaption(), - HawkbitCommonUtil.getFormattedNameVersion(swModule.getName(), swModule.getVersion())); - populateDetails(swModule); - populateDescription(swModule); - populateLog(swModule); - } else { - setSwModuleId(null); - setName(getDefaultCaption(), HawkbitCommonUtil.SP_STRING_EMPTY); - populateDetails(null); - populateDescription(null); - populateLog(null); - } + @Override + protected void populateDetailsWidget() { + populateDetails(); } @Override 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 9218198b9..dac8d2ecf 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 @@ -9,33 +9,26 @@ package org.eclipse.hawkbit.ui.distributions.smtable; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - 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; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; +import org.eclipse.hawkbit.ui.common.ManagmentEntityState; import org.eclipse.hawkbit.ui.common.table.AbstractTable; +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.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; -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.I18N; -import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -45,7 +38,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -71,19 +63,13 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class SwModuleTable extends AbstractTable { +public class SwModuleTable extends AbstractTable { private static final long serialVersionUID = 6785314784507424750L; - @Autowired - private I18N i18n; - @Autowired private ManageDistUIState manageDistUIState; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient SoftwareManagement softwareManagement; @@ -97,21 +83,9 @@ public class SwModuleTable extends AbstractTable { * Initialize the filter layout. */ @Override - @PostConstruct protected void init() { super.init(); - eventBus.subscribe(this); styleTableOnDistSelection(); - setNoDataAvailable(); - } - - @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); } /* All event Listeners */ @@ -148,13 +122,7 @@ public class SwModuleTable extends AbstractTable { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final SoftwareModuleEvent event) { - if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MINIMIZED) { - UI.getCurrent().access(() -> applyMinTableSettings()); - } else if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.MAXIMIZED) { - UI.getCurrent().access(() -> applyMaxTableSettings()); - } else if (event.getSoftwareModuleEventType() == SoftwareModuleEventType.NEW_SOFTWARE_MODULE) { - UI.getCurrent().access(() -> addSoftwareModule(event.getSoftwareModule())); - } + onBaseEntityEvent(event); } @Override @@ -237,52 +205,38 @@ public class SwModuleTable extends AbstractTable { return manageDistUIState.isSwModuleTableMaximized(); } - @SuppressWarnings("rawtypes") @Override - protected void onValueChange() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - @SuppressWarnings("unchecked") - final Set values = (Set) getValue(); - if (values != null && !values.isEmpty()) { - final Iterator iterator = values.iterator(); - Long value = null; - while (iterator.hasNext()) { - value = iterator.next(); - } - if (null != value) { - manageDistUIState.setSelectedBaseSwModuleId(value); - final SoftwareModule baseSoftwareModule = softwareManagement.findSoftwareModuleById(value); - manageDistUIState.setSelectedSoftwareModules(values); - eventBus.publish(this, - new SoftwareModuleEvent(SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE, baseSoftwareModule)); - } - } else { - manageDistUIState.setSelectedBaseSwModuleId(null); - manageDistUIState.setSelectedSoftwareModules(Collections.emptySet()); - eventBus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.SELECTED_SOFTWARE_MODULE, null)); - } + protected void publishEntityAfterValueChange(final SoftwareModule selectedLastEntity) { + eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.SELECTED_ENTITY, selectedLastEntity)); + } + + @Override + protected void setManagementEntitiyStateValues(final Set values, final Long lastId) { + manageDistUIState.setSelectedBaseSwModuleId(lastId); + manageDistUIState.setSelectedSoftwareModules(values); + } + + @Override + protected SoftwareModule findEntityByTableValue(final Long lastSelectedId) { + return softwareManagement.findSoftwareModuleById(lastSelectedId); + } + + @Override + protected ManagmentEntityState getManagmentEntityState() { + return null; } @Override protected List getTableVisibleColumns() { final List columnList = new ArrayList<>(); if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F)); + columnList.addAll(super.getTableVisibleColumns()); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2F)); } else { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.7F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.ARTIFACT_ICON, "", 0.1F)); - } return columnList; } @@ -369,30 +323,24 @@ public class SwModuleTable extends AbstractTable { return name + "." + version; } + @Override @SuppressWarnings("unchecked") - private void addSoftwareModule(final SoftwareModule swModule) { - final Object addItem = addItem(); - final Item item = getItem(addItem); - final String swNameVersion = HawkbitCommonUtil.concatStrings(":", swModule.getName(), swModule.getVersion()); - item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue(swNameVersion); - item.getItemProperty("swId").setValue(swModule.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_ID).setValue(swModule.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(swModule.getDescription()); - item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(swModule.getVersion()); - item.getItemProperty(SPUILabelDefinitions.VAR_NAME).setValue(swModule.getName()); - item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(swModule.getVendor()); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY).setValue(swModule.getCreatedBy()); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setValue(swModule.getLastModifiedBy()); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(swModule.getCreatedAt())); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(swModule.getLastModifiedAt())); + protected Item addEntity(final SoftwareModule baseEntity) { + final Item item = super.addEntity(baseEntity); + + final String swNameVersion = HawkbitCommonUtil.concatStrings(":", baseEntity.getName(), + baseEntity.getVersion()); + item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue(swNameVersion); + item.getItemProperty("swId").setValue(baseEntity.getId()); + item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); + item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(baseEntity.getVendor()); + item.getItemProperty(SPUILabelDefinitions.VAR_COLOR).setValue(baseEntity.getType().getColour()); - item.getItemProperty(SPUILabelDefinitions.VAR_COLOR).setValue(swModule.getType().getColour()); if (!manageDistUIState.getSelectedSoftwareModules().isEmpty()) { manageDistUIState.getSelectedSoftwareModules().stream().forEach(swmNameId -> unselect(swmNameId)); } - select(swModule.getId()); + select(baseEntity.getId()); + return item; } private void showArtifactDetailsWindow(final Long itemId, final String nameVersionStr) { @@ -431,13 +379,10 @@ public class SwModuleTable extends AbstractTable { UI.getCurrent().addWindow(atrifactDtlsWindow); } - private void setNoDataAvailable() { - final int conatinerSize = getContainerDataSource().size(); - if (conatinerSize == 0) { - manageDistUIState.setNoDataAvilableSwModule(true); - } else { - manageDistUIState.setNoDataAvilableSwModule(false); - } + @Override + protected void setDataAvailable(final boolean available) { + manageDistUIState.setNoDataAvilableSwModule(!available); + } } diff --git a/hawkbit-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 index badbc1492..e02dffa8e 100644 --- a/hawkbit-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 @@ -10,9 +10,9 @@ package org.eclipse.hawkbit.ui.distributions.smtable; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; -import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent.SoftwareModuleEventType; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.state.ManageDistUIState; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -37,7 +37,6 @@ public class SwModuleTableHeader extends AbstractTableHeader { private static final long serialVersionUID = 242961845006626297L; - @Autowired private ManageDistUIState manageDistUIState; @@ -123,14 +122,14 @@ public class SwModuleTableHeader extends AbstractTableHeader { @Override public void maximizeTable() { manageDistUIState.setSwModuleTableMaximized(Boolean.TRUE); - eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MAXIMIZED, null)); + eventbus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.MAXIMIZED, null)); } @Override public void minimizeTable() { manageDistUIState.setSwModuleTableMaximized(Boolean.FALSE); - eventbus.publish(this, new SoftwareModuleEvent(SoftwareModuleEventType.MINIMIZED, null)); + eventbus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.MINIMIZED, null)); } @Override diff --git a/hawkbit-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 index ce31f649b..b3475cb8b 100644 --- a/hawkbit-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 @@ -18,6 +18,7 @@ import java.util.Set; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; +import org.eclipse.hawkbit.ui.common.ManagmentEntityState; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -30,7 +31,7 @@ import com.vaadin.spring.annotation.VaadinSessionScope; */ @SpringComponent @VaadinSessionScope -public class ManageDistUIState implements Serializable { +public class ManageDistUIState implements ManagmentEntityState, Serializable { private static final long serialVersionUID = -7569047247017742928L; @@ -111,16 +112,13 @@ public class ManageDistUIState implements Serializable { return lastSelectedDistribution == null ? Optional.empty() : Optional.of(lastSelectedDistribution); } - /** - * @param lastSelectedDistribution - * the lastSelectedDistribution to set - */ - public void setLastSelectedDistribution(final DistributionSetIdName lastSelectedDistribution) { - this.lastSelectedDistribution = lastSelectedDistribution; + @Override + public void setLastSelectedEntity(final DistributionSetIdName value) { + this.lastSelectedDistribution = value; } - public void setSelectedDistributions(final Set slectedDistributions) { - selectedDistributions = slectedDistributions; + public void setSelectedEnitities(final java.util.Set values) { + selectedDistributions = values; } /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java index 9069858aa..e260a3bf4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java @@ -12,6 +12,7 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.HawkbitUI; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.management.actionhistory.ActionHistoryComponent; import org.eclipse.hawkbit.ui.management.dstable.DistributionTableLayout; import org.eclipse.hawkbit.ui.management.dstag.DistributionTagLayout; @@ -108,19 +109,18 @@ public class DeploymentView extends VerticalLayout implements View, BrowserWindo @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent event) { - if (event.getDistributionComponentEvent() == DistributionTableEvent.DistributionComponentEvent.MINIMIZED) { + if (BaseEntityEventType.MINIMIZED == event.getEventType()) { minimizeDistTable(); - } else if (event - .getDistributionComponentEvent() == DistributionTableEvent.DistributionComponentEvent.MAXIMIZED) { + } else if (BaseEntityEventType.MAXIMIZED == event.getEventType()) { maximizeDistTable(); } } @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent event) { - if (event.getTargetComponentEvent() == TargetTableEvent.TargetComponentEvent.MINIMIZED) { + if (BaseEntityEventType.MINIMIZED == event.getEventType()) { minimizeTargetTable(); - } else if (event.getTargetComponentEvent() == TargetTableEvent.TargetComponentEvent.MAXIMIZED) { + } else if (BaseEntityEventType.MAXIMIZED == event.getEventType()) { maximizeTargetTable(); } } diff --git a/hawkbit-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 index 908c8c18f..25448fbe1 100644 --- a/hawkbit-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 @@ -12,8 +12,8 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; -import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; @@ -62,9 +62,9 @@ public class ActionHistoryComponent extends VerticalLayout { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent targetUIEvent) { - if (targetUIEvent.getTargetComponentEvent() == TargetComponentEvent.SELECTED_TARGET) { + if (BaseEntityEventType.SELECTED_ENTITY == targetUIEvent.getEventType()) { setData(SPUIDefinitions.DATA_AVAILABLE); - UI.getCurrent().access(() -> populateActionHistoryDetails(targetUIEvent.getTarget())); + UI.getCurrent().access(() -> populateActionHistoryDetails(targetUIEvent.getEntity())); } } 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 3f7b7eee5..834566f7e 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 @@ -25,11 +25,11 @@ import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.ActionWithStatusCount; 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.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.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; @@ -855,11 +855,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { } private void updateTargetAndDsTable() { - /* - * Update the target status in the Target table and update the color - * settings for DS in DS table. - */ - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.EDIT_TARGET, target)); + eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.UPDATED_ENTITY, target)); updateDistributionTableStyle(); } 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 9bbc1c05d..80c1b5700 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,10 +23,10 @@ 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.common.DistributionSetTypeBeanQuery; +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.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; @@ -260,8 +260,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { notificationMessage.displaySuccess(i18n.get("message.new.dist.save.success", new Object[] { currentDS.getName(), currentDS.getVersion() })); // update table row+details layout - eventBus.publish(this, - new DistributionTableEvent(DistributionComponentEvent.EDIT_DISTRIBUTION, currentDS)); + eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.UPDATED_ENTITY, currentDS)); } catch (final EntityAlreadyExistsException entityAlreadyExistsException) { LOG.error("Update distribution failed {}", entityAlreadyExistsException); notificationMessage.displayValidationError( @@ -307,7 +306,7 @@ public class DistributionAddUpdateWindowLayout extends VerticalLayout { /* close the window */ closeThisWindow(); - eventBus.publish(this, new DistributionTableEvent(DistributionComponentEvent.ADD_DISTRIBUTION, newDist)); + eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.NEW_ENTITY, newDist)); } } 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 a0de88fda..aedce157e 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 @@ -9,14 +9,12 @@ package org.eclipse.hawkbit.ui.management.dstable; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; +import org.eclipse.hawkbit.ui.common.detailslayout.AbstractNamedVersionedEntityTableDetailsLayout; import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetailsTable; 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.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -36,11 +34,10 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class DistributionDetails extends AbstractTableDetailsLayout { +public class DistributionDetails extends AbstractNamedVersionedEntityTableDetailsLayout { private static final long serialVersionUID = 350360207334118826L; - @Autowired private ManagementUIState managementUIState; @@ -52,10 +49,6 @@ public class DistributionDetails extends AbstractTableDetailsLayout { private SoftwareModuleDetailsTable softwareModuleTable; - private Long dsId; - - private DistributionSet selectedDsModule; - @Override protected void init() { softwareModuleTable = new SoftwareModuleDetailsTable(); @@ -63,29 +56,9 @@ public class DistributionDetails extends AbstractTableDetailsLayout { super.init(); } - @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent distributionTableEvent) { - if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.ON_VALUE_CHANGE - || distributionTableEvent - .getDistributionComponentEvent() == DistributionComponentEvent.EDIT_DISTRIBUTION) { - ui.access(() -> { - /** - * distributionTableEvent.getDistributionSet() is null when - * table has no data. - */ - if (distributionTableEvent.getDistributionSet() != null) { - selectedDsModule = distributionTableEvent.getDistributionSet(); - populateData(true); - } else { - populateData(false); - } - }); - } else if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.MINIMIZED) { - ui.access(() -> showLayout()); - } else if (distributionTableEvent.getDistributionComponentEvent() == DistributionComponentEvent.MAXIMIZED) { - ui.access(() -> hideLayout()); - } + onBaseEntityEvent(distributionTableEvent); } @Override @@ -105,7 +78,7 @@ public class DistributionDetails extends AbstractTableDetailsLayout { @Override protected void onEdit(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); - distributionAddUpdateWindowLayout.populateValuesOfDistribution(getDsId()); + distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId()); newDistWindow.setCaption(i18n.get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); @@ -127,16 +100,6 @@ public class DistributionDetails extends AbstractTableDetailsLayout { return managementUIState.isDsTableMaximized(); } - @Override - protected void populateDetailsWidget() { - populateDetailsWidget(selectedDsModule); - } - - @Override - protected void clearDetails() { - populateDetailsWidget(null); - } - @Override protected Boolean hasEditPermission() { return permissionChecker.hasUpdateDistributionPermission(); @@ -147,31 +110,11 @@ public class DistributionDetails extends AbstractTableDetailsLayout { return SPUIComponetIdProvider.DISTRIBUTION_DETAILS_TABSHEET; } - private void populateDetailsWidget(final DistributionSet dist) { - if (dist != null) { - setDsId(dist.getId()); - setName(getDefaultCaption(), HawkbitCommonUtil.getFormattedNameVersion(dist.getName(), dist.getVersion())); - populateDetails(dist); - populateDescription(dist); - populateLog(dist); - softwareModuleTable.populateModule(dist); - } else { - setDsId(null); - setName(getDefaultCaption(), HawkbitCommonUtil.SP_STRING_EMPTY); - populateDetails(null); - populateDescription(null); - softwareModuleTable.populateModule(null); - populateLog(null); - } - } + @Override + protected void populateDetailsWidget() { + softwareModuleTable.populateModule(selectedBaseEntity); + populateDetails(selectedBaseEntity); - private void populateLog(final DistributionSet ds) { - if (null != ds) { - updateLogLayout(getLogLayout(), ds.getLastModifiedAt(), ds.getLastModifiedBy(), ds.getCreatedAt(), - ds.getCreatedBy(), i18n); - } else { - updateLogLayout(getLogLayout(), null, HawkbitCommonUtil.SP_STRING_EMPTY, null, null, i18n); - } } private void populateDetails(final DistributionSet ds) { @@ -182,14 +125,6 @@ public class DistributionDetails extends AbstractTableDetailsLayout { } } - private void populateDescription(final DistributionSet ds) { - if (ds != null) { - updateDescriptionLayout(i18n.get("label.description"), ds.getDescription()); - } else { - updateDescriptionLayout(i18n.get("label.description"), null); - } - } - private void updateDistributionDetailsLayout(final String type, final Boolean isMigrationRequired) { final VerticalLayout detailsTabLayout = getDetailsLayout(); detailsTabLayout.removeAllComponents(); @@ -221,14 +156,6 @@ public class DistributionDetails extends AbstractTableDetailsLayout { return tagsLayout; } - public Long getDsId() { - return dsId; - } - - public void setDsId(final Long dsId) { - this.dsId = dsId; - } - @Override protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.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 6bcfb55ae..5e546b79a 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 @@ -11,15 +11,12 @@ package org.eclipse.hawkbit.ui.management.dstable; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.TargetManagement; @@ -29,9 +26,9 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.table.AbstractTable; +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.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -40,8 +37,6 @@ 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.I18N; -import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; @@ -52,7 +47,6 @@ 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.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -76,22 +70,16 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class DistributionTable extends AbstractTable { +public class DistributionTable extends AbstractTable { private static final long serialVersionUID = -1928335256399519494L; - @Autowired - private I18N i18n; - @Autowired private SpPermissionChecker permissionChecker; @Autowired private UINotification notification; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManagementUIState managementUIState; @@ -111,17 +99,9 @@ public class DistributionTable extends AbstractTable { private Button distributinPinnedBtn; @Override - @PostConstruct protected void init() { super.init(); - eventBus.subscribe(this); notAllowedMsg = i18n.get("message.action.not.allowed"); - setNoDataAvailable(); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); } /** @@ -151,13 +131,7 @@ public class DistributionTable extends AbstractTable { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final DistributionTableEvent event) { - if (event.getDistributionComponentEvent() == DistributionComponentEvent.MINIMIZED) { - UI.getCurrent().access(() -> applyMinTableSettings()); - } else if (event.getDistributionComponentEvent() == DistributionComponentEvent.MAXIMIZED) { - UI.getCurrent().access(() -> applyMaxTableSettings()); - } else if (event.getDistributionComponentEvent() == DistributionComponentEvent.EDIT_DISTRIBUTION) { - UI.getCurrent().access(() -> updateDistributionInTable(event.getDistributionSet())); - } + onBaseEntityEvent(event); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -272,31 +246,18 @@ public class DistributionTable extends AbstractTable { } @Override - protected void onValueChange() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - final Set values = HawkbitCommonUtil.getSelectedDSDetails(this); - DistributionSetIdName value = null; - if (values != null && !values.isEmpty()) { - final Iterator iterator = values.iterator(); + protected DistributionSet findEntityByTableValue(final DistributionSetIdName lastSelectedId) { + return distributionSetManagement.findDistributionSetByIdWithDetails(lastSelectedId.getId()); + } - while (iterator.hasNext()) { - value = iterator.next(); - } - - if (null != value) { - managementUIState.setSelectedDsIdName(values); - managementUIState.setLastSelectedDsIdName(value); - final DistributionSet lastSelectedDistSet = distributionSetManagement - .findDistributionSetByIdWithDetails(value.getId()); - eventBus.publish(this, - new DistributionTableEvent(DistributionComponentEvent.ON_VALUE_CHANGE, lastSelectedDistSet)); - } - } else { - managementUIState.setSelectedDsIdName(null); - managementUIState.setLastSelectedDsIdName(null); - eventBus.publish(this, new DistributionTableEvent(DistributionComponentEvent.ON_VALUE_CHANGE, null)); - } + @Override + protected void publishEntityAfterValueChange(final DistributionSet selectedLastEntity) { + eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, selectedLastEntity)); + } + @Override + protected ManagementUIState getManagmentEntityState() { + return managementUIState; } @Override @@ -306,7 +267,16 @@ public class DistributionTable extends AbstractTable { @Override protected List getTableVisibleColumns() { - return HawkbitCommonUtil.getTableVisibleColumns(isMaximized(), true, i18n); + final List columnList = new ArrayList<>(); + if (isMaximized()) { + columnList.addAll(super.getTableVisibleColumns()); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1f)); + } else { + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.7f)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2f)); + columnList.add(new TableColumn(SPUILabelDefinitions.PIN_COLUMN, StringUtils.EMPTY, 0.1f)); + } + return columnList; } @Override @@ -345,7 +315,7 @@ public class DistributionTable extends AbstractTable { private void assignDsTag(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); final Table distTable = (Table) taregtDet.getTarget(); - final Set distsSelected = HawkbitCommonUtil.getSelectedDSDetails(distTable); + final Set distsSelected = getTableValue(distTable); final Set distList = new HashSet<>(); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); @@ -390,7 +360,7 @@ public class DistributionTable extends AbstractTable { private void assignTargetToDs(final DragAndDropEvent event) { final TableTransferable transferable = (TableTransferable) event.getTransferable(); final Table source = transferable.getSourceComponent(); - final Set targetsSelected = HawkbitCommonUtil.getSelectedTargetDetails(source); + final Set targetsSelected = getTableValue(source); final Set targetDetailsList = new HashSet<>(); if (!targetsSelected.contains(transferable.getData("itemId"))) { @@ -502,17 +472,14 @@ public class DistributionTable extends AbstractTable { private void updateDistributionInTable(final DistributionSet editedDs) { final Item item = getContainerDataSource() .getItem(new DistributionSetIdName(editedDs.getId(), editedDs.getName(), editedDs.getVersion())); - item.getItemProperty(SPUILabelDefinitions.VAR_NAME).setValue(editedDs.getName()); - item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(editedDs.getVersion()); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY) - .setValue(HawkbitCommonUtil.getIMUser(editedDs.getCreatedBy())); - item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(editedDs.getCreatedAt())); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY) - .setValue(HawkbitCommonUtil.getIMUser(editedDs.getLastModifiedBy())); - item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) - .setValue(SPDateTimeUtil.getFormattedDate(editedDs.getLastModifiedAt())); - item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(editedDs.getDescription()); + updateEntity(editedDs, item); + + } + + @Override + protected void updateEntity(final DistributionSet baseEntity, final Item item) { + super.updateEntity(baseEntity, item); + item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); } private void restoreDistributionTableStyle() { @@ -703,12 +670,10 @@ public class DistributionTable extends AbstractTable { this.distributinPinnedBtn = distributinPinnedBtn; } - private void setNoDataAvailable() { - final int size = getContainerDataSource().size(); - if (size == 0) { - managementUIState.setNoDataAvailableDistribution(true); - } else { - managementUIState.setNoDataAvailableDistribution(false); - } + @Override + protected void setDataAvailable(final boolean available) { + managementUIState.setNoDataAvailableDistribution(!available); + } + } 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 6d4343878..2ccbac961 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 @@ -9,8 +9,8 @@ package org.eclipse.hawkbit.ui.management.dstable; import org.eclipse.hawkbit.ui.common.table.AbstractTableHeader; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; -import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent.DistributionComponentEvent; import org.eclipse.hawkbit.ui.management.event.DistributionTableFilterEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -127,13 +127,13 @@ public class DistributionTableHeader extends AbstractTableHeader { @Override public void maximizeTable() { managementUIState.setDsTableMaximized(Boolean.TRUE); - eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MAXIMIZED, null)); + eventbus.publish(this, new DistributionTableEvent(BaseEntityEventType.MAXIMIZED, null)); } @Override public void minimizeTable() { managementUIState.setDsTableMaximized(Boolean.FALSE); - eventbus.publish(this, new DistributionTableEvent(DistributionComponentEvent.MINIMIZED, null)); + eventbus.publish(this, new DistributionTableEvent(BaseEntityEventType.MINIMIZED, null)); } @Override 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 7690bf109..14eeaf26e 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 @@ -9,50 +9,26 @@ package org.eclipse.hawkbit.ui.management.event; import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** * * * */ -public class DistributionTableEvent { +public class DistributionTableEvent extends BaseEntityEvent { /** - * - * + * Constructor. + * + * @param eventType + * the event type + * @param entity + * the distribution set */ - public enum DistributionComponentEvent { - ADD_DISTRIBUTION, EDIT_DISTRIBUTION, DELETE_DISTRIBUTION, ON_VALUE_CHANGE, MAXIMIZED, MINIMIZED - } - - private DistributionComponentEvent distributionComponentEvent; - - private DistributionSet distributionSet; - - /** - * @param distributionComponentEvent - * @param distributionSet - */ - public DistributionTableEvent(final DistributionComponentEvent distributionComponentEvent, - final DistributionSet distributionSet) { - this.distributionComponentEvent = distributionComponentEvent; - this.distributionSet = distributionSet; - } - - public DistributionComponentEvent getDistributionComponentEvent() { - return distributionComponentEvent; - } - - public void setDistributionComponentEvent(final DistributionComponentEvent distributionComponentEvent) { - this.distributionComponentEvent = distributionComponentEvent; - } - - public DistributionSet getDistributionSet() { - return distributionSet; - } - - public void setDistributionSet(final DistributionSet distributionSet) { - this.distributionSet = distributionSet; + public DistributionTableEvent(final BaseEntityEventType eventType, final DistributionSet entity) { + super(eventType, entity); } } diff --git a/hawkbit-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 index f1bc5d8ec..cf2661c60 100644 --- a/hawkbit-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 @@ -9,7 +9,8 @@ package org.eclipse.hawkbit.ui.management.event; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** * @@ -17,34 +18,18 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentE * * */ -public class TargetAddUpdateWindowEvent { - - private final TargetComponentEvent targetComponentEvent; - - private final Target target; +public class TargetAddUpdateWindowEvent extends BaseEntityEvent { /** + * Constructor. + * * @param eventType * the event type - * @param target - * the target which has been created or modified + * @param entity + * the entity */ - public TargetAddUpdateWindowEvent(final TargetComponentEvent eventType, final Target target) { - this.targetComponentEvent = eventType; - this.target = target; + public TargetAddUpdateWindowEvent(final BaseEntityEventType eventType, final Target entity) { + super(eventType, entity); } - /** - * @return the targetComponentEvent - */ - public TargetComponentEvent getTargetComponentEvent() { - return targetComponentEvent; - } - - /** - * @return the target - */ - public Target getTarget() { - return target; - } } 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 1706361f0..04dd917a9 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 @@ -9,77 +9,51 @@ package org.eclipse.hawkbit.ui.management.event; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.repository.model.TargetIdName; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; /** * * * */ -public class TargetTableEvent { +public class TargetTableEvent extends BaseEntityEvent { /** * Target table components events. * */ public enum TargetComponentEvent { - REFRESH_TARGETS, EDIT_TARGET, DELETE_TARGET, SELECTED_TARGET, MAXIMIZED, MINIMIZED, SELLECT_ALL, BULK_TARGET_CREATED, BULK_UPLOAD_COMPLETED, BULK_TARGET_UPLOAD_STARTED, BULK_UPLOAD_PROCESS_STARTED + REFRESH_TARGETS, SELLECT_ALL, BULK_TARGET_CREATED, BULK_UPLOAD_COMPLETED, BULK_TARGET_UPLOAD_STARTED, BULK_UPLOAD_PROCESS_STARTED } private TargetComponentEvent targetComponentEvent; - private Target target; - - private TargetIdName targetIdName; + /** + * Constructor. + * + * @param eventType + * the event type. + * @param entity + * the entity + */ + public TargetTableEvent(final BaseEntityEventType eventType, final Target entity) { + super(eventType, entity); + } /** + * The component event. + * * @param targetComponentEvent + * the target component event. */ public TargetTableEvent(final TargetComponentEvent targetComponentEvent) { - super(); + super(null, null); this.targetComponentEvent = targetComponentEvent; } - /** - * @param targetComponentEvent - * @param target - */ - public TargetTableEvent(final TargetComponentEvent targetComponentEvent, final Target target) { - this(targetComponentEvent); - this.target = target; - } - - /** - * @param targetComponentEvent - * @param targetIdName - */ - public TargetTableEvent(final TargetComponentEvent targetComponentEvent, final TargetIdName targetIdName) { - this(targetComponentEvent); - this.targetIdName = targetIdName; - } - public TargetComponentEvent getTargetComponentEvent() { return targetComponentEvent; } - public void setTargetComponentEvent(final TargetComponentEvent targetComponentEvent) { - this.targetComponentEvent = targetComponentEvent; - } - - public Target getTarget() { - return target; - } - - public void setTarget(final Target target) { - this.target = target; - } - - public TargetIdName getTargetIdName() { - return targetIdName; - } - - public void setTargetIdName(final TargetIdName targetIdName) { - this.targetIdName = targetIdName; - } - } 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 7ff9f53e4..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 @@ -95,8 +95,8 @@ public class CountMessageLabel extends Label { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent event) { - if (event.getTargetComponentEvent() == TargetTableEvent.TargetComponentEvent.SELLECT_ALL - || event.getTargetComponentEvent() == TargetComponentEvent.REFRESH_TARGETS) { + if (TargetTableEvent.TargetComponentEvent.SELLECT_ALL == event.getTargetComponentEvent() + || TargetComponentEvent.REFRESH_TARGETS == event.getTargetComponentEvent()) { 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 b8c5494a3..4a95df51a 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 @@ -15,6 +15,7 @@ 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; +import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.management.event.BulkUploadPopupEvent; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; @@ -211,7 +212,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected Component getUnsavedActionsWindowContent() { - manangementConfirmationWindowLayout.init(); + manangementConfirmationWindowLayout.inittialize(); return manangementConfirmationWindowLayout; } @@ -257,7 +258,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } private void addInDeleteDistributionList(final Table sourceTable, final TableTransferable transferable) { - final Set distSelected = HawkbitCommonUtil.getSelectedDSDetails(sourceTable); + final Set distSelected = AbstractTable.getTableValue(sourceTable); final Set distributionIdNameSet = new HashSet<>(); if (!distSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { @@ -311,7 +312,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } private void addInDeleteTargetList(final Table sourceTable, final TableTransferable transferable) { - final Set targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(sourceTable); + final Set targetSelected = AbstractTable.getTableValue(sourceTable); final Set targetIdNameSet = new HashSet<>(); if (!targetSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { 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 c0f681c7a..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 @@ -19,8 +19,6 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; - import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -31,20 +29,15 @@ import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.AbstractConfirmationWindowLayout; import org.eclipse.hawkbit.ui.common.confirmwindow.layout.ConfirmationTab; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.PinUnpinEvent; 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.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.springframework.beans.factory.annotation.Autowired; -import org.vaadin.spring.events.EventBus; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; @@ -52,8 +45,8 @@ 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.ClickListener; import com.vaadin.ui.Table.Align; -import com.vaadin.ui.themes.ValoTheme; /** * Confirmation window for target/ds delete and assignment. @@ -79,12 +72,6 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin @Autowired private ManagementUIState managementUIState; - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private transient TargetManagement targetManagement; @@ -99,14 +86,6 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin private ConfirmationTab assignmnetTab; - /** - * Initialze the component. - */ - @PostConstruct - public void init() { - super.inittialize(); - } - @Override protected Map getConfimrationTabs() { final Map tabs = new HashMap<>(); @@ -130,6 +109,7 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin 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().addClickListener(event -> discardAllAssignments(assignmnetTab)); @@ -139,35 +119,17 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin // Add the discard action column assignmnetTab.getTable().addGeneratedColumn(DISCARD_CHANGES, (source, itemId, columnId) -> { - final StringBuilder style = new StringBuilder(ValoTheme.BUTTON_TINY); - style.append(' '); - style.append(SPUIStyleDefinitions.REDICON); - final Button deleteIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - style.toString(), true, FontAwesome.REPLY, SPUIButtonStyleSmallNoBorder.class); - deleteIcon.setData(itemId); - deleteIcon.setImmediate(true); - deleteIcon.addClickListener(event -> discardAssignment( - (TargetIdName) ((Button) event.getComponent()).getData(), assignmnetTab)); - return deleteIcon; + final ClickListener clickListener = event -> discardAssignment( + (TargetIdName) ((Button) event.getComponent()).getData(), assignmnetTab); + return createDiscardButton(itemId, clickListener); }); - // set the visible columns - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(TARGET_NAME); - visibleColumnIds.add(DISTRIBUTION_NAME); - visibleColumnIds.add(DISCARD_CHANGES); - visibleColumnLabels.add(i18n.get("header.first.assignment.table")); - visibleColumnLabels.add(i18n.get("header.second.assignment.table")); - visibleColumnLabels.add(i18n.get("header.third.assignment.table")); - } - assignmnetTab.getTable().setColumnExpandRatio(TARGET_NAME, 2); assignmnetTab.getTable().setColumnExpandRatio(DISTRIBUTION_NAME, 2); assignmnetTab.getTable().setColumnExpandRatio(DISCARD_CHANGES, 1); - assignmnetTab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - assignmnetTab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + assignmnetTab.getTable().setVisibleColumns(TARGET_NAME, DISTRIBUTION_NAME, DISCARD_CHANGES); + assignmnetTab.getTable().setColumnHeaders(i18n.get("header.first.assignment.table"), + i18n.get("header.second.assignment.table"), i18n.get("header.third.assignment.table")); assignmnetTab.getTable().setColumnAlignment(DISCARD_CHANGES, Align.CENTER); actionTypeOptionGroupLayout.selectDefaultOption(); @@ -326,27 +288,15 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin /* Add the discard action column */ tab.getTable().addGeneratedColumn(DISCARD_CHANGES, (source, itemId, columnId) -> { - final Button deletestargetIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - ValoTheme.BUTTON_TINY + " " + SPUIStyleDefinitions.REDICON, true, FontAwesome.REPLY, - SPUIButtonStyleSmallNoBorder.class); - deletestargetIcon.setData(itemId); - deletestargetIcon.setImmediate(true); - deletestargetIcon.addClickListener(event -> discardTargetDelete( - (TargetIdName) ((Button) event.getComponent()).getData(), itemId, tab)); - return deletestargetIcon; + final ClickListener clickListener = event -> discardTargetDelete( + (TargetIdName) ((Button) event.getComponent()).getData(), itemId, tab); + return createDiscardButton(itemId, clickListener); + }); - /* set the visible columns */ - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(TARGET_NAME); - visibleColumnIds.add(DISCARD_CHANGES); - visibleColumnLabels.add(i18n.get("header.first.deletetarget.table")); - visibleColumnLabels.add(i18n.get("header.second.deletetarget.table")); - } - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(TARGET_NAME, DISCARD_CHANGES); + tab.getTable().setColumnHeaders(i18n.get("header.first.deletetarget.table"), + i18n.get("header.second.deletetarget.table")); tab.getTable().setColumnExpandRatio(TARGET_NAME, SPUIDefinitions.TARGET_DISTRIBUTION_COLUMN_WIDTH); tab.getTable().setColumnExpandRatio(DISCARD_CHANGES, SPUIDefinitions.DISCARD_COLUMN_WIDTH); @@ -371,30 +321,17 @@ public class ManangementConfirmationWindowLayout extends AbstractConfirmationWin /* Add the discard action column */ tab.getTable().addGeneratedColumn(DISCARD_CHANGES, (source, itemId, columnId) -> { - final Button deletesDsIcon = SPUIComponentProvider.getButton("", "", SPUILabelDefinitions.DISCARD, - ValoTheme.BUTTON_TINY + " " + SPUIStyleDefinitions.REDICON, true, FontAwesome.REPLY, - SPUIButtonStyleSmallNoBorder.class); - deletesDsIcon.setData(itemId); - deletesDsIcon.setImmediate(true); - deletesDsIcon.addClickListener(event -> discardDSDelete( - (DistributionSetIdName) ((Button) event.getComponent()).getData(), itemId, tab)); - return deletesDsIcon; - }); + final ClickListener clickListener = event -> discardDSDelete( + (DistributionSetIdName) ((Button) event.getComponent()).getData(), itemId, tab); + return createDiscardButton(itemId, clickListener); - /* set the visible columns */ - final List visibleColumnIds = new ArrayList<>(); - final List visibleColumnLabels = new ArrayList<>(); - if (visibleColumnIds.isEmpty() && visibleColumnLabels.isEmpty()) { - visibleColumnIds.add(DISTRIBUTION_NAME); - visibleColumnIds.add(DISCARD_CHANGES); - visibleColumnLabels.add(i18n.get("header.one.deletedist.table")); - visibleColumnLabels.add(i18n.get("header.second.deletedist.table")); - } + }); tab.getTable().setColumnExpandRatio(DISTRIBUTION_NAME, SPUIDefinitions.TARGET_DISTRIBUTION_COLUMN_WIDTH); tab.getTable().setColumnExpandRatio(DISCARD_CHANGES, SPUIDefinitions.DISCARD_COLUMN_WIDTH); - tab.getTable().setVisibleColumns(visibleColumnIds.toArray()); - tab.getTable().setColumnHeaders(visibleColumnLabels.toArray(new String[0])); + tab.getTable().setVisibleColumns(DISTRIBUTION_NAME, DISCARD_CHANGES); + tab.getTable().setColumnHeaders(i18n.get("header.one.deletedist.table"), + i18n.get("header.second.deletedist.table")); tab.getTable().setColumnAlignment(DISCARD_CHANGES, Align.CENTER); return tab; } 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 3184bf923..73e2ed1a7 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 @@ -19,6 +19,7 @@ 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.ManagmentEntityState; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -31,7 +32,7 @@ import com.vaadin.spring.annotation.VaadinSessionScope; */ @VaadinSessionScope @SpringComponent -public class ManagementUIState implements Serializable { +public class ManagementUIState implements ManagmentEntityState, Serializable { private static final long serialVersionUID = 7301409196969723794L; @@ -266,12 +267,15 @@ public class ManagementUIState implements Serializable { return lastSelectedDsIdName; } - public void setLastSelectedDsIdName(final DistributionSetIdName lastSelectedDsIdName) { - this.lastSelectedDsIdName = lastSelectedDsIdName; + @Override + public void setLastSelectedEntity(final DistributionSetIdName value) { + this.lastSelectedDsIdName = value; } - public void setSelectedDsIdName(final Set selectedDsIdName) { - this.selectedDsIdName = selectedDsIdName; + @Override + public void setSelectedEnitities(final Set values) { + this.selectedDsIdName = values; + } public Optional> getSelectedDsIdName() { 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 48f0ad2bf..973d61857 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,11 +14,11 @@ 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.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.management.event.TargetTableEvent.TargetComponentEvent; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -56,6 +56,8 @@ import com.vaadin.ui.themes.ValoTheme; @SpringComponent @VaadinSessionScope public class TargetAddUpdateWindowLayout extends CustomComponent { + private static final long serialVersionUID = -6659290471705262389L; + @Autowired private I18N i18n; @@ -68,7 +70,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { @Autowired private transient UINotification uINotification; - private static final long serialVersionUID = -6659290471705262389L; private TextField controllerIDTextField; private TextField nameTextField; private TextArea descTextArea; @@ -218,7 +219,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { /* display success msg */ uINotification.displaySuccess(i18n.get("message.update.success", new Object[] { latestTarget.getName() })); // publishing through event bus - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.EDIT_TARGET, latestTarget)); + eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.UPDATED_ENTITY, latestTarget)); /* close the window */ closeThisWindow(); 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 87854b22c..6105409bf 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 @@ -18,7 +18,6 @@ import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; import org.eclipse.hawkbit.ui.common.tagdetails.TargetTagToken; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; 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.SPDateTimeUtil; @@ -50,7 +49,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class TargetDetails extends AbstractTableDetailsLayout { +public class TargetDetails extends AbstractTableDetailsLayout { private static final long serialVersionUID = 4571732743399605843L; @@ -63,8 +62,6 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Autowired private TargetTagToken targetTagToken; - private Target selectedTarget = null; - private VerticalLayout assignedDistLayout; private VerticalLayout installedDistLayout; @@ -112,13 +109,14 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected void onEdit(final ClickEvent event) { - if (selectedTarget != null) { - final Window newDistWindow = targetAddUpdateWindowLayout.getWindow(); - targetAddUpdateWindowLayout.populateValuesOfTarget(selectedTarget.getControllerId()); - newDistWindow.setCaption(i18n.get("caption.update.dist")); - UI.getCurrent().addWindow(newDistWindow); - newDistWindow.setVisible(Boolean.TRUE); + if (selectedBaseEntity == null) { + return; } + final Window newDistWindow = targetAddUpdateWindowLayout.getWindow(); + targetAddUpdateWindowLayout.populateValuesOfTarget(selectedBaseEntity.getControllerId()); + newDistWindow.setCaption(i18n.get("caption.update.dist")); + UI.getCurrent().addWindow(newDistWindow); + newDistWindow.setVisible(Boolean.TRUE); } @Override @@ -138,50 +136,24 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected void populateDetailsWidget() { - if (selectedTarget != null) { - setName(getDefaultCaption(), selectedTarget.getName()); - } - populateDetailsWidget(selectedTarget); - } - - private void populateDetailsWidget(final Target target) { - if (target != null) { - setName(getDefaultCaption(), target.getName()); - updateDetailsLayout(target.getControllerId(), target.getTargetInfo().getAddress(), - target.getSecurityToken(), - SPDateTimeUtil.getFormattedDate(target.getTargetInfo().getLastTargetQuery())); - populateDescription(target); - populateDistributionDtls(installedDistLayout, target.getTargetInfo().getInstalledDistributionSet()); - populateDistributionDtls(assignedDistLayout, target.getAssignedDistributionSet()); - updateLogLayout(getLogLayout(), target.getLastModifiedAt(), target.getLastModifiedBy(), - target.getCreatedAt(), target.getCreatedBy(), i18n); - populateAttributes(target); + if (selectedBaseEntity != null) { + updateDetailsLayout(selectedBaseEntity.getControllerId(), selectedBaseEntity.getTargetInfo().getAddress(), + selectedBaseEntity.getSecurityToken(), + SPDateTimeUtil.getFormattedDate(selectedBaseEntity.getTargetInfo().getLastTargetQuery())); + populateDistributionDtls(installedDistLayout, + selectedBaseEntity.getTargetInfo().getInstalledDistributionSet()); + populateDistributionDtls(assignedDistLayout, selectedBaseEntity.getAssignedDistributionSet()); } else { - setName(getDefaultCaption(), HawkbitCommonUtil.SP_STRING_EMPTY); updateDetailsLayout(null, null, null, null); - populateDescription(null); populateDistributionDtls(installedDistLayout, null); populateDistributionDtls(assignedDistLayout, null); - updateLogLayout(getLogLayout(), null, HawkbitCommonUtil.SP_STRING_EMPTY, null, null, i18n); - populateAttributes(null); } + updateAttributesLayout(selectedBaseEntity); } - private void populateAttributes(final Target target) { - if (target != null) { - - updateAttributesLayout(target); - } else { - updateAttributesLayout(null); - } - } - - private void populateDescription(final Target target) { - if (target != null) { - updateDescriptionLayout(i18n.get("label.description"), target.getDescription()); - } else { - updateDescriptionLayout(i18n.get("label.description"), null); - } + @Override + protected String getName() { + return selectedBaseEntity.getName(); } private void updateDetailsLayout(final String controllerId, final URI address, final String securityToken, @@ -262,11 +234,6 @@ public class TargetDetails extends AbstractTableDetailsLayout { return SPUIComponentProvider.createNameValueLabel(labelName + " : ", swModule.getName(), swModule.getVersion()); } - @Override - protected void clearDetails() { - populateDetailsWidget(null); - } - @Override protected Boolean hasEditPermission() { return permissionChecker.hasUpdateTargetPermission(); @@ -274,25 +241,7 @@ public class TargetDetails extends AbstractTableDetailsLayout { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent targetTableEvent) { - // Get the event type - final TargetComponentEvent event = targetTableEvent.getTargetComponentEvent(); - - if (event == TargetComponentEvent.SELECTED_TARGET || event == TargetComponentEvent.EDIT_TARGET) { - UI.getCurrent().access(() -> { - // If selected or edited, populate the fresh details. - if (targetTableEvent.getTarget() != null) { - selectedTarget = targetTableEvent.getTarget(); - } else { - selectedTarget = null; - } - populateData(selectedTarget != null); - - }); - } else if (event == TargetComponentEvent.MINIMIZED) { - UI.getCurrent().access(() -> showLayout()); - } else if (event == TargetComponentEvent.MAXIMIZED) { - UI.getCurrent().access(() -> hideLayout()); - } + onBaseEntityEvent(targetTableEvent); } @Override 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 6884e8906..559169f2e 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,9 +18,6 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import org.eclipse.hawkbit.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetInfoUpdateEvent; @@ -34,7 +31,9 @@ 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.ManagmentEntityState; import org.eclipse.hawkbit.ui.common.table.AbstractTable; +import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.filter.FilterExpression; import org.eclipse.hawkbit.ui.filter.Filters; import org.eclipse.hawkbit.ui.filter.target.CustomTargetFilter; @@ -53,7 +52,6 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentE import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.management.state.TargetTableFilters; 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.SPUIDefinitions; @@ -69,7 +67,6 @@ import org.springframework.data.domain.Sort; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; -import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; @@ -102,7 +99,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class TargetTable extends AbstractTable implements Handler { +public class TargetTable extends AbstractTable implements Handler { private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class); private static final String TARGET_PINNED = "targetPinned"; @@ -116,9 +113,6 @@ public class TargetTable extends AbstractTable implements Handler { @Autowired private transient TargetManagement targetManagement; - @Autowired - private I18N i18n; - @Autowired private ManagementUIState managementUIState; @@ -128,9 +122,6 @@ public class TargetTable extends AbstractTable implements Handler { @Autowired private UINotification notification; - @Autowired - private transient EventBus.SessionEventBus eventBus; - @Autowired private ManagementViewAcceptCriteria managementViewAcceptCriteria; @@ -141,19 +132,11 @@ public class TargetTable extends AbstractTable implements Handler { private ShortcutAction actionUnSelectAll; @Override - @PostConstruct 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")); - eventBus.subscribe(this); - setNoDataAvailable(); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); } /** @@ -199,9 +182,10 @@ public class TargetTable extends AbstractTable implements Handler { @EventBusListenerMethod(scope = EventScope.SESSION) void addOrEditEvent(final TargetAddUpdateWindowEvent targetUIEvent) { - if (targetUIEvent.getTargetComponentEvent() == TargetComponentEvent.EDIT_TARGET) { - UI.getCurrent().access(() -> updateTarget(targetUIEvent.getTarget())); + if (BaseEntityEventType.UPDATED_ENTITY != targetUIEvent.getEventType()) { + return; } + UI.getCurrent().access(() -> updateTarget(targetUIEvent.getEntity())); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -239,33 +223,14 @@ public class TargetTable extends AbstractTable implements Handler { @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final TargetTableEvent event) { - if (event.getTargetComponentEvent() == TargetComponentEvent.MINIMIZED) { - UI.getCurrent().access(() -> applyMinTableSettings()); - } else if (event.getTargetComponentEvent() == TargetComponentEvent.MAXIMIZED) { - UI.getCurrent().access(() -> applyMaxTableSettings()); - } else if (event.getTargetComponentEvent() == TargetComponentEvent.EDIT_TARGET) { - UI.getCurrent().access(() -> updateTarget(event.getTarget())); - } + onBaseEntityEvent(event); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#getTableId() - */ @Override protected String getTableId() { return SPUIComponetIdProvider.TARGET_TABLE_ID; } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.hawkbit.server.ui.common.table.AbstractTable#createContainer( - * ) - */ @Override protected Container createContainer() { // ADD all the filters to the query config @@ -311,12 +276,6 @@ public class TargetTable extends AbstractTable implements Handler { } } - /* - * (non-Javadoc) - * - * @see org.eclipse.hawkbit.server.ui.common.table.AbstractTable# - * addCustomGeneratedColumns () - */ @Override protected void addCustomGeneratedColumns() { addGeneratedColumn(SPUIDefinitions.TARGET_STATUS_PIN_TOGGLE_ICON, @@ -340,22 +299,24 @@ public class TargetTable extends AbstractTable implements Handler { } @Override - protected void onValueChange() { - eventBus.publish(this, DragEvent.HIDE_DROP_HINT); - @SuppressWarnings("unchecked") - final Set values = HawkbitCommonUtil.getSelectedTargetDetails(this); - if (values != null && !values.isEmpty()) { - final TargetIdName lastSelectedItem = getLastSelectedItem(values); - managementUIState.setSelectedTargetIdName(values); - managementUIState.setLastSelectedTargetIdName(lastSelectedItem); - final Target target = targetManagement - .findTargetByControllerIDWithDetails(lastSelectedItem.getControllerId()); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELECTED_TARGET, target)); - } else { - managementUIState.setSelectedTargetIdName(null); - managementUIState.setLastSelectedTargetIdName(null); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELECTED_TARGET, (Target) null)); - } + protected void publishEntityAfterValueChange(final Target selectedLastEntity) { + eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.SELECTED_ENTITY, selectedLastEntity)); + } + + @Override + protected Target findEntityByTableValue(final TargetIdName lastSelectedId) { + return targetManagement.findTargetByControllerIDWithDetails(lastSelectedId.getControllerId()); + } + + @Override + protected void setManagementEntitiyStateValues(final Set values, final TargetIdName lastId) { + managementUIState.setSelectedTargetIdName(values); + managementUIState.setLastSelectedTargetIdName(lastId); + } + + @Override + protected ManagmentEntityState getManagmentEntityState() { + return null; } @Override @@ -365,30 +326,15 @@ public class TargetTable extends AbstractTable implements Handler { @Override protected List getTableVisibleColumns() { - final List columnList = new ArrayList<>(); - if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1f)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2f)); - } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.8f)); + final List columnList = super.getTableVisibleColumns(); + 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; + } - /* - * (non-Javadoc) - * - * @see hawkbit.server.ui.common.table.AbstractTable#getTableDropHandler() - */ @Override protected DropHandler getTableDropHandler() { return new DropHandler() { @@ -630,7 +576,7 @@ public class TargetTable extends AbstractTable implements Handler { private void tagAssignment(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); final Table targetTable = (Table) taregtDet.getTarget(); - final Set targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(targetTable); + final Set targetSelected = getTableValue(targetTable); final Set targetList = new HashSet<>(); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); final Object targetItemId = dropData.getItemIdOver(); @@ -688,7 +634,7 @@ public class TargetTable extends AbstractTable implements Handler { private static Set getDraggedDistributionSet(final TableTransferable transferable, final Table source) { - final Set distSelected = HawkbitCommonUtil.getSelectedDSDetails(source); + final Set distSelected = getTableValue(source); final Set distributionIdSet = new HashSet<>(); if (!distSelected.contains(transferable.getData(ITEMID))) { distributionIdSet.add((DistributionSetIdName) transferable.getData(ITEMID)); @@ -962,7 +908,7 @@ public class TargetTable extends AbstractTable implements Handler { refreshTargets(); } if (lastSelectedTarget != null) { - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELECTED_TARGET, lastSelectedTarget)); + eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.SELECTED_ENTITY, lastSelectedTarget)); } } @@ -1042,13 +988,9 @@ public class TargetTable extends AbstractTable implements Handler { setValue(null); } - private void setNoDataAvailable() { - final int tableSize = getContainerDataSource().size(); - if (tableSize == 0) { - managementUIState.setNoDataAvilableTarget(true); - } else { - managementUIState.setNoDataAvilableTarget(false); - } + @Override + protected void setDataAvailable(final boolean available) { + managementUIState.setNoDataAvilableTarget(!available); } /** 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 5ad6e3c28..cb00c2338 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 @@ -12,7 +12,9 @@ import java.util.HashSet; import java.util.Set; import org.eclipse.hawkbit.repository.model.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; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.BulkUploadPopupEvent; @@ -254,13 +256,13 @@ public class TargetTableHeader extends AbstractTableHeader { @Override public void maximizeTable() { managementUIState.setTargetTableMaximized(Boolean.TRUE); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.MAXIMIZED)); + eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.MAXIMIZED,null)); } @Override public void minimizeTable() { managementUIState.setTargetTableMaximized(Boolean.FALSE); - eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.MINIMIZED)); + eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.MINIMIZED,null)); } @Override @@ -377,8 +379,7 @@ public class TargetTableHeader extends AbstractTableHeader { } private Set getDropppedDistributionDetails(final TableTransferable transferable) { - final Set distSelected = HawkbitCommonUtil - .getSelectedDSDetails(transferable.getSourceComponent()); + final Set distSelected = AbstractTable.getTableValue(transferable.getSourceComponent()); final Set distributionIdSet = new HashSet<>(); if (!distSelected.contains(transferable.getData("itemId"))) { distributionIdSet.add((DistributionSetIdName) transferable.getData("itemId")); 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 54f4c382b..c60ab37ca 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 @@ -22,6 +22,7 @@ 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.ui.common.filterlayout.AbstractFilterButtons; +import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.ManagementViewAcceptCriteria; @@ -217,7 +218,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { final TableTransferable transferable = (TableTransferable) event.getTransferable(); final Table source = transferable.getSourceComponent(); - final Set targetSelected = HawkbitCommonUtil.getSelectedTargetDetails(source); + final Set targetSelected = AbstractTable.getTableValue(source); final Set targetList = new HashSet<>(); if (transferable.getData(ITEMID) != null) { if (!targetSelected.contains(transferable.getData(ITEMID))) { 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 3abd73592..2552fcf9a 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 @@ -14,29 +14,23 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.im.authentication.UserPrincipal; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; -import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.NamedEntity; 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.TargetIdName; 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; -import org.eclipse.hawkbit.ui.management.dstable.DistributionTable; -import org.eclipse.hawkbit.ui.management.targettable.TargetTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.userdetails.UserDetails; @@ -878,8 +872,8 @@ public final class HawkbitCommonUtil { * I18N * @return message */ - public static String createAssignmentMessage(final String tagName, final AssignmentResult result, - final I18N i18n) { + public static String createAssignmentMessage(final String tagName, + final AssignmentResult result, final I18N i18n) { final StringBuilder formMsg = new StringBuilder(); final int assignedCount = result.getAssigned(); final int alreadyAssignedCount = result.getAlreadyAssigned(); @@ -959,43 +953,6 @@ public final class HawkbitCommonUtil { lqc.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); } - /** - * Get visible columns in table. - * - * @param isMaximized - * true if table is maximized - * @param isShowPinColumn - * if true pin column will be displayed. - * @param i18n - * I18N - * @return List list of columns to be displayed. - */ - public static List getTableVisibleColumns(final Boolean isMaximized, final Boolean isShowPinColumn, - final I18N i18n) { - final List columnList = new ArrayList<>(); - if (isMaximized) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get(HEADER_NAME), 0.2f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get(HEADER_VERSION), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1f)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2f)); - } else if (isShowPinColumn) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get(HEADER_NAME), 0.7f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get(HEADER_VERSION), 0.2f)); - columnList.add(new TableColumn(SPUILabelDefinitions.PIN_COLUMN, SP_STRING_EMPTY, 0.1f)); - } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get(HEADER_NAME), 0.8f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get(HEADER_VERSION), 0.2f)); - } - return columnList; - - } - /** * Reset the software module table rows highlight css. * @@ -1102,36 +1059,6 @@ public final class HawkbitCommonUtil { return DELETE_TAG_DROP_REMOVE_SCRIPT; } - /** - * Get the details of selected rows of {@link TargetTable}. - * - * @param sourceTable - * @return set of {@link TargetIdName} - */ - public static Set getSelectedTargetDetails(final Table sourceTable) { - Set targetSelected = null; - if (sourceTable.getValue() != null) { - targetSelected = new LinkedHashSet<>((Set) sourceTable.getValue()); - targetSelected.remove(null); - } - return targetSelected; - } - - /** - * Get the details of selected rows of {@link DistributionTable}. - * - * @param sourceTable - * @return set of {@link DistributionSetIdName} - */ - public static Set getSelectedDSDetails(final Table sourceTable) { - Set distSelected = null; - if (sourceTable.getValue() != null) { - distSelected = new LinkedHashSet<>((Set) sourceTable.getValue()); - distSelected.remove(null); - } - return distSelected; - } - /** * * Add target table container properties. From e09ff4a716bd83bd9c91c12b610da5e1f80798ee Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 10:32:59 +0200 Subject: [PATCH 088/344] Refactor TableHeader Signed-off-by: SirWayne --- .../smtable/SoftwareModuleTable.java | 1 - .../ui/common/table/AbstractTable.java | 30 ++++++++----------- 2 files changed, 13 insertions(+), 18 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 6164fa3bf..4f668ee8e 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 @@ -182,7 +182,6 @@ public class SoftwareModuleTable extends AbstractTable { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.8F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2F)); } return columnList; 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 c9487d467..be77cfaf2 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 @@ -94,7 +94,7 @@ public abstract class AbstractTable extends Table { if (values == null) { values = Collections.emptySet(); } - if (values.remove(null)) { + if (values.contains(null)) { LOG.warn("Null values in table content. How could this happen?"); } return values; @@ -103,14 +103,12 @@ public abstract class AbstractTable extends Table { private void onValueChange() { eventBus.publish(this, UploadArtifactUIEvent.HIDE_DROP_HINTS); - // TODO Einzelwerte? - final Set values = getTableValue(this); E entity = null; - - final I lastId = Iterables.getLast(values); - if (lastId != null) { + I lastId = null; + if (!values.isEmpty()) { + lastId = Iterables.getLast(values); entity = findEntityByTableValue(lastId); } setManagementEntitiyStateValues(values, lastId); @@ -294,19 +292,17 @@ public abstract class AbstractTable extends Table { */ protected List getTableVisibleColumns() { final List columnList = new ArrayList<>(); - if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), - 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2F)); - } else { + if (!isMaximized()) { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.8F)); + return columnList; } + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); + columnList.add( + new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2F)); return columnList; } From 927ef461b9abc7941132323dfed172f98e7b5493 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 12:01:08 +0200 Subject: [PATCH 089/344] Update Distribution Set in table Signed-off-by: SirWayne --- .../hawkbit/ui/management/dstable/DistributionTable.java | 5 +++++ 1 file changed, 5 insertions(+) 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 5e546b79a..44574fb3a 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 @@ -132,6 +132,11 @@ public class DistributionTable extends AbstractTable updateDistributionInTable(event.getEntity())); + } @EventBusListenerMethod(scope = EventScope.SESSION) From 6f2383b07723e3e6302be8f6dafe4ee5f018f0f7 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 12:23:56 +0200 Subject: [PATCH 090/344] Add Javadoc Signed-off-by: SirWayne --- .../hawkbit/ui/common/ManagmentEntityState.java | 15 ++++++++++++++- .../detailslayout/AbstractTableDetailsLayout.java | 11 ++++++++--- .../ui/common/table/BaseEntityEventType.java | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java index 8b2318ace..ecc378ad7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ManagmentEntityState.java @@ -11,12 +11,25 @@ package org.eclipse.hawkbit.ui.common; import java.util.Set; /** - * + * Interface for all entity states UI to show the details to a entity. */ public interface ManagmentEntityState { + /** + * The selected entities for the detail. + * + * @param values + * the selected entities. + * + */ void setSelectedEnitities(Set values); + /** + * The last selected value. + * + * @param value + * the value + */ void setLastSelectedEntity(T value); } 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 02b1f0044..334eee90f 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 @@ -41,7 +41,7 @@ import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; /** - * + * Abstract Layout to show the entity details. * */ public abstract class AbstractTableDetailsLayout extends VerticalLayout { @@ -89,10 +89,15 @@ public abstract class AbstractTableDetailsLayout extends eventBus.unsubscribe(this); } + /** + * Default implementation to handle a entity event. + * + * @param baseEntityEvent + * the event + */ protected void onBaseEntityEvent(final BaseEntityEvent baseEntityEvent) { final BaseEntityEventType eventType = baseEntityEvent.getEventType(); - if (BaseEntityEventType.SELECTED_ENTITY == eventType - || BaseEntityEventType.UPDATED_ENTITY == eventType) { + if (BaseEntityEventType.SELECTED_ENTITY == eventType || BaseEntityEventType.UPDATED_ENTITY == eventType) { UI.getCurrent().access(() -> populateData(baseEntityEvent.getEntity())); } else if (BaseEntityEventType.MINIMIZED == eventType) { UI.getCurrent().access(() -> setVisible(true)); diff --git a/hawkbit-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 index bfaf593fb..d9f7f544c 100644 --- a/hawkbit-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 @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.common.table; /** - * + * Types of the entity event. * */ public enum BaseEntityEventType { From fdee1528850a69a3b8b3f3273755867cfb4fe8d4 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 12:42:50 +0200 Subject: [PATCH 091/344] Fix typo Signed-off-by: SirWayne --- .../hawkbit/ui/artifacts/footer/SMDeleteActionsLayout.java | 2 +- .../confirmwindow/layout/AbstractConfirmationWindowLayout.java | 2 +- .../hawkbit/ui/distributions/footer/DSDeleteActionsLayout.java | 2 +- .../hawkbit/ui/management/footer/DeleteActionsLayout.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 a5cb5c8d0..ee2fc356f 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 @@ -190,7 +190,7 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected Component getUnsavedActionsWindowContent() { - uploadViewConfirmationWindowLayout.inittialize(); + uploadViewConfirmationWindowLayout.initialize(); return uploadViewConfirmationWindowLayout; } diff --git a/hawkbit-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 index a737fabbf..bc5de63ff 100644 --- a/hawkbit-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 @@ -52,7 +52,7 @@ public abstract class AbstractConfirmationWindowLayout extends VerticalLayout { protected transient EventBus.SessionEventBus eventBus; @PostConstruct - public void inittialize() { + public void initialize() { removeAllComponents(); consolidatedMessage = ""; createComponents(); 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 ea33a2ea3..dba8155db 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 @@ -295,7 +295,7 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected Component getUnsavedActionsWindowContent() { - distConfirmationWindowLayout.inittialize(); + distConfirmationWindowLayout.initialize(); return distConfirmationWindowLayout; } 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 4a95df51a..678a5704f 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 @@ -212,7 +212,7 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { @Override protected Component getUnsavedActionsWindowContent() { - manangementConfirmationWindowLayout.inittialize(); + manangementConfirmationWindowLayout.initialize(); return manangementConfirmationWindowLayout; } From c069b904b21a7dc5fbb1a975458e332b16367a1c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 13:00:39 +0200 Subject: [PATCH 092/344] Use Optional.ofNullable instead of a if statement Signed-off-by: SirWayne --- .../hawkbit/ui/artifacts/state/ArtifactUploadState.java | 4 ++-- .../AbstractNamedVersionedEntityTableDetailsLayout.java | 1 - .../hawkbit/ui/distributions/state/ManageDistUIState.java | 6 +++--- .../hawkbit/ui/management/state/ManagementUIState.java | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) 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 b975ad1fd..d387ff105 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 @@ -86,7 +86,7 @@ public class ArtifactUploadState implements ManagmentEntityState, Serializ * @return the selectedBaseSwModuleId */ public Optional getSelectedBaseSwModuleId() { - return selectedBaseSwModuleId != null ? Optional.of(selectedBaseSwModuleId) : Optional.empty(); + return Optional.ofNullable(selectedBaseSwModuleId); } /** @@ -179,7 +179,7 @@ public class ArtifactUploadState implements ManagmentEntityState, Serializ } public Optional getSelectedBaseSoftwareModule() { - return selectedBaseSoftwareModule == null ? Optional.empty() : Optional.of(selectedBaseSoftwareModule); + return Optional.ofNullable(selectedBaseSoftwareModule); } public void setSelectedBaseSoftwareModule(final SoftwareModule selectedBaseSoftwareModule) { diff --git a/hawkbit-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 index 31fbe5996..19bfb324e 100644 --- a/hawkbit-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 @@ -24,5 +24,4 @@ public abstract class AbstractNamedVersionedEntityTableDetailsLayout> getSelectedDistributions() { - return selectedDistributions == null ? Optional.empty() : Optional.of(selectedDistributions); + return Optional.ofNullable(selectedDistributions); } /** * @return the lastSelectedDistribution */ public Optional getLastSelectedDistribution() { - return lastSelectedDistribution == null ? Optional.empty() : Optional.of(lastSelectedDistribution); + return Optional.ofNullable(lastSelectedDistribution); } @Override @@ -139,7 +139,7 @@ public class ManageDistUIState implements ManagmentEntityState getSelectedBaseSwModuleId() { - return selectedBaseSwModuleId != null ? Optional.of(selectedBaseSwModuleId) : Optional.empty(); + return Optional.ofNullable(selectedBaseSwModuleId); } /** 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 73e2ed1a7..653075735 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 @@ -171,7 +171,7 @@ public class ManagementUIState implements ManagmentEntityState> getSelectedTargetIdName() { - return selectedTargetIdName == null ? Optional.empty() : Optional.of(selectedTargetIdName); + return Optional.ofNullable(selectedTargetIdName); } public void setSelectedTargetIdName(final Set selectedTargetIdName) { @@ -279,7 +279,7 @@ public class ManagementUIState implements ManagmentEntityState> getSelectedDsIdName() { - return selectedDsIdName == null ? Optional.empty() : Optional.of(selectedDsIdName); + return Optional.ofNullable(selectedDsIdName); } /** From 15702cb5c98d62f9fd1f5ed38cae35a8171af31f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 13:11:16 +0200 Subject: [PATCH 093/344] Improve javadoc Signed-off-by: SirWayne --- .../hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 0f5e2de32..615760a1c 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 @@ -282,9 +282,8 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme } /** - * Only in deployment view count message is displayed. * - * @return + * @return true if the count label is displayed false ist not displayed */ protected boolean hasCountMessage() { return false; From 27118e293945e03c8f28b84a155a53d5edd03a7f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 13:23:08 +0200 Subject: [PATCH 094/344] fix typo Signed-off-by: SirWayne --- .../hawkbit/ui/common/footer/AbstractDeleteActionsLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 615760a1c..75bd43447 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 @@ -283,7 +283,7 @@ public abstract class AbstractDeleteActionsLayout extends VerticalLayout impleme /** * - * @return true if the count label is displayed false ist not displayed + * @return true if the count label is displayed false is not displayed */ protected boolean hasCountMessage() { return false; From 5e0f07b8527f5c9776052c27ef4901cee56794f5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 14:12:26 +0200 Subject: [PATCH 095/344] Add new abstract table to reduce the visible columns and add entity code Signed-off-by: SirWayne --- .../smtable/SoftwareModuleTable.java | 14 +++--- .../table/AbstractNamedVersionTable.java | 47 +++++++++++++++++++ .../ui/common/table/AbstractTable.java | 7 ++- .../dstable/DistributionSetTable.java | 7 ++- .../distributions/smtable/SwModuleTable.java | 19 ++++---- .../management/dstable/DistributionTable.java | 26 ++++------ 6 files changed, 81 insertions(+), 39 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java 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 4f668ee8e..1ef4b8f7a 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 @@ -19,7 +19,7 @@ import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadViewAcceptCriteria; import org.eclipse.hawkbit.ui.artifacts.state.ArtifactUploadState; -import org.eclipse.hawkbit.ui.common.table.AbstractTable; +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; @@ -48,7 +48,7 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class SoftwareModuleTable extends AbstractTable { +public class SoftwareModuleTable extends AbstractNamedVersionTable { private static final long serialVersionUID = 6469417305487144809L; @@ -165,7 +165,7 @@ public class SoftwareModuleTable extends AbstractTable { final String swNameVersion = HawkbitCommonUtil.concatStrings(":", baseEntity.getName(), baseEntity.getVersion()); item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue(swNameVersion); - item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); + item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(baseEntity.getVendor()); if (!artifactUploadState.getSelectedSoftwareModules().isEmpty()) { artifactUploadState.getSelectedSoftwareModules().stream().forEach(this::unselect); @@ -178,12 +178,10 @@ public class SoftwareModuleTable extends AbstractTable { @Override protected List getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); - if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); - } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2F)); + if (!isMaximized()) { + return columnList; } + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); return columnList; } 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 new file mode 100644 index 000000000..64460bc1c --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractNamedVersionTable.java @@ -0,0 +1,47 @@ +/** + * 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.table; + +import java.util.List; + +import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.TableColumn; + +import com.vaadin.data.Item; + +/** + * Abstract table to handling {@link NamedVersionedEntity} + * + * @param + * e is the entity class + * @param + * i is the id of the table + */ +public abstract class AbstractNamedVersionTable extends AbstractTable { + + private static final long serialVersionUID = 780050712209750719L; + + @Override + protected List getTableVisibleColumns() { + final List columnList = super.getTableVisibleColumns(); + final float versionColumnSize = isMaximized() ? 0.1f : 0.2f; + columnList + .add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), versionColumnSize)); + return columnList; + } + + @SuppressWarnings("unchecked") + @Override + protected void updateEntity(final E baseEntity, final Item item) { + super.updateEntity(baseEntity, item); + item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); + } + +} 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 be77cfaf2..5aea8914f 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 @@ -293,7 +293,8 @@ public abstract class AbstractTable extends Table { protected List getTableVisibleColumns() { final List columnList = new ArrayList<>(); if (!isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.8F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), + getColumnNameMinimizedSize())); return columnList; } columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); @@ -306,6 +307,10 @@ public abstract class AbstractTable extends Table { return columnList; } + protected float getColumnNameMinimizedSize() { + return 0.8F; + } + /** * Get drop handler for the table. * 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 51f30117a..c49a89368 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 @@ -28,7 +28,7 @@ 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.table.AbstractTable; +import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; @@ -70,7 +70,7 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class DistributionSetTable extends AbstractTable { +public class DistributionSetTable extends AbstractNamedVersionTable { private static final long serialVersionUID = -7731776093470487988L; @@ -475,11 +475,10 @@ public class DistributionSetTable extends AbstractTable unselect(dsNameId)); + manageDistUIState.getSelectedDistributions().get().stream().forEach(this::unselect); } select(baseEntity.getDistributionSetIdName()); return item; 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 dac8d2ecf..9c02f1d8a 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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.distributions.smtable; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,7 +19,7 @@ import org.eclipse.hawkbit.ui.artifacts.details.ArtifactDetailsLayout; import org.eclipse.hawkbit.ui.artifacts.event.SMFilterEvent; import org.eclipse.hawkbit.ui.artifacts.event.SoftwareModuleEvent; import org.eclipse.hawkbit.ui.common.ManagmentEntityState; -import org.eclipse.hawkbit.ui.common.table.AbstractTable; +import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; @@ -63,7 +62,7 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class SwModuleTable extends AbstractTable { +public class SwModuleTable extends AbstractNamedVersionTable { private static final long serialVersionUID = 6785314784507424750L; @@ -228,19 +227,20 @@ public class SwModuleTable extends AbstractTable { @Override protected List getTableVisibleColumns() { - final List columnList = new ArrayList<>(); + final List columnList = super.getTableVisibleColumns(); if (isMaximized()) { - columnList.addAll(super.getTableVisibleColumns()); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1f)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1f)); } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.7F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.ARTIFACT_ICON, "", 0.1F)); } return columnList; } + @Override + protected float getColumnNameMinimizedSize() { + return 0.7F; + } + @Override protected DropHandler getTableDropHandler() { return new DropHandler() { @@ -332,12 +332,11 @@ public class SwModuleTable extends AbstractTable { baseEntity.getVersion()); item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue(swNameVersion); item.getItemProperty("swId").setValue(baseEntity.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion()); item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(baseEntity.getVendor()); item.getItemProperty(SPUILabelDefinitions.VAR_COLOR).setValue(baseEntity.getType().getColour()); if (!manageDistUIState.getSelectedSoftwareModules().isEmpty()) { - manageDistUIState.getSelectedSoftwareModules().stream().forEach(swmNameId -> unselect(swmNameId)); + manageDistUIState.getSelectedSoftwareModules().stream().forEach(this::unselect); } select(baseEntity.getId()); return item; 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 44574fb3a..4ba164bde 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 @@ -25,7 +25,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; -import org.eclipse.hawkbit.ui.common.table.AbstractTable; +import org.eclipse.hawkbit.ui.common.table.AbstractNamedVersionTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; @@ -70,7 +70,7 @@ import com.vaadin.ui.UI; */ @SpringComponent @ViewScope -public class DistributionTable extends AbstractTable { +public class DistributionTable extends AbstractNamedVersionTable { private static final long serialVersionUID = -1928335256399519494L; @@ -272,18 +272,19 @@ public class DistributionTable extends AbstractTable getTableVisibleColumns() { - final List columnList = new ArrayList<>(); + final List columnList = super.getTableVisibleColumns(); if (isMaximized()) { - columnList.addAll(super.getTableVisibleColumns()); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1f)); - } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.7f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2f)); - columnList.add(new TableColumn(SPUILabelDefinitions.PIN_COLUMN, StringUtils.EMPTY, 0.1f)); + return columnList; } + columnList.add(new TableColumn(SPUILabelDefinitions.PIN_COLUMN, StringUtils.EMPTY, 0.1f)); return columnList; } + @Override + protected float getColumnNameMinimizedSize() { + return 0.7F; + } + @Override protected DropHandler getTableDropHandler() { return new DropHandler() { @@ -478,13 +479,6 @@ public class DistributionTable extends AbstractTable Date: Thu, 7 Apr 2016 14:13:27 +0200 Subject: [PATCH 096/344] Remove full qualified pakcage Signed-off-by: SirWayne --- .../hawkbit/ui/distributions/state/ManageDistUIState.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-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 index 11a0a0ff2..a68a42e00 100644 --- a/hawkbit-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 @@ -117,7 +117,7 @@ public class ManageDistUIState implements ManagmentEntityState values) { + public void setSelectedEnitities(final Set values) { selectedDistributions = values; } From 08e0dc4b3db62941e96cb5a3f52322afdd075350 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 14:16:43 +0200 Subject: [PATCH 097/344] Add new abstract table to reduce the visible columns and add entity code Signed-off-by: SirWayne --- .../distributions/dstable/DistributionSetTable.java | 12 ------------ 1 file changed, 12 deletions(-) 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 c49a89368..1cd89b30f 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 @@ -42,7 +42,6 @@ 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.TableColumn; import org.eclipse.hawkbit.ui.utils.UINotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -190,17 +189,6 @@ public class DistributionSetTable extends AbstractNamedVersionTable getTableVisibleColumns() { - final List columnList = super.getTableVisibleColumns(); - if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.1f)); - } else { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), 0.2f)); - } - return columnList; - } - @Override protected DropHandler getTableDropHandler() { return new DropHandler() { From 4e2fd2befdf833fb94b4c79fa6c7e2a766d8b817 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 7 Apr 2016 14:33:51 +0200 Subject: [PATCH 098/344] Add missing TargetTagDeletedEvent Signed-off-by: SirWayne --- .../main/java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java | 2 ++ 1 file changed, 2 insertions(+) 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 12bcaacbc..842cfcab5 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 @@ -21,6 +21,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.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.eventbus.event.TargetTagDeletedEvent; /** * The default hawkbit event provider. @@ -34,6 +35,7 @@ public class HawkbitEventProvider implements UIEventProvider { SINGLE_EVENTS.add(TargetTagCreatedBulkEvent.class); SINGLE_EVENTS.add(DistributionSetTagCreatedBulkEvent.class); SINGLE_EVENTS.add(DistributionSetTagDeletedEvent.class); + SINGLE_EVENTS.add(TargetTagDeletedEvent.class); SINGLE_EVENTS.add(DistributionSetTagUpdateEvent.class); SINGLE_EVENTS.add(RolloutGroupChangeEvent.class); SINGLE_EVENTS.add(RolloutChangeEvent.class); From 929916165253b7f11ee072d7eb83069ece848e2b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 7 Apr 2016 14:43:05 +0200 Subject: [PATCH 099/344] Added anonymous download section as part of authentication configuration section Signed-off-by: Jonathan Philip Knoblauch --- .../AuthenticationConfigurationView.java | 20 ++- .../DownloadAnonymousConfigurationView.java | 119 ------------------ .../TenantConfigurationDashboardView.java | 4 - ...wnloadAuthenticationConfigurationItem.java | 86 +++++++++++++ 4 files changed, 105 insertions(+), 124 deletions(-) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java create mode 100644 hawkbit-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/AuthenticationConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java index d00223f5a..f3c42552e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.tenantconfiguration; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.tenantconfiguration.authentication.AnonymousDownloadAuthenticationConfigurationItem; import org.eclipse.hawkbit.ui.tenantconfiguration.authentication.AuthenticationConfigurationItem; import org.eclipse.hawkbit.ui.tenantconfiguration.authentication.CertificateAuthenticationConfigurationItem; import org.eclipse.hawkbit.ui.tenantconfiguration.authentication.GatewaySecurityTokenAuthenticationConfigurationItem; @@ -52,12 +53,17 @@ public class AuthenticationConfigurationView extends BaseConfigurationView @Autowired private GatewaySecurityTokenAuthenticationConfigurationItem gatewaySecurityTokenAuthenticationConfigurationItem; + @Autowired + private AnonymousDownloadAuthenticationConfigurationItem anonymousDownloadAuthenticationConfigurationItem; + private CheckBox gatewaySecTokenCheckBox; private CheckBox targetSecTokenCheckBox; private CheckBox certificateAuthCheckbox; + private CheckBox downloadAnonymousCheckBox; + /** * Initialize Authentication Configuration layout. */ @@ -77,7 +83,7 @@ public class AuthenticationConfigurationView extends BaseConfigurationView headerDisSetType.addStyleName("config-panel-header"); vLayout.addComponent(headerDisSetType); - final GridLayout gridLayout = new GridLayout(2, 3); + final GridLayout gridLayout = new GridLayout(2, 4); gridLayout.setSpacing(true); gridLayout.setImmediate(true); gridLayout.setColumnExpandRatio(1, 1.0F); @@ -105,6 +111,13 @@ public class AuthenticationConfigurationView extends BaseConfigurationView gridLayout.addComponent(gatewaySecTokenCheckBox, 0, 2); gridLayout.addComponent(gatewaySecurityTokenAuthenticationConfigurationItem, 1, 2); + downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); + downloadAnonymousCheckBox.setValue(targetSecurityTokenAuthenticationConfigurationItem.isConfigEnabled()); + downloadAnonymousCheckBox.addValueChangeListener(this); + anonymousDownloadAuthenticationConfigurationItem.addChangeListener(this); + gridLayout.addComponent(downloadAnonymousCheckBox, 0, 3); + gridLayout.addComponent(anonymousDownloadAuthenticationConfigurationItem, 1, 3); + vLayout.addComponent(gridLayout); rootPanel.setContent(vLayout); setCompositionRoot(rootPanel); @@ -115,6 +128,7 @@ public class AuthenticationConfigurationView extends BaseConfigurationView certificateAuthenticationConfigurationItem.save(); targetSecurityTokenAuthenticationConfigurationItem.save(); gatewaySecurityTokenAuthenticationConfigurationItem.save(); + anonymousDownloadAuthenticationConfigurationItem.save(); } @Override @@ -122,9 +136,11 @@ public class AuthenticationConfigurationView extends BaseConfigurationView certificateAuthenticationConfigurationItem.undo(); targetSecurityTokenAuthenticationConfigurationItem.undo(); gatewaySecurityTokenAuthenticationConfigurationItem.undo(); + anonymousDownloadAuthenticationConfigurationItem.undo(); certificateAuthCheckbox.setValue(certificateAuthenticationConfigurationItem.isConfigEnabled()); targetSecTokenCheckBox.setValue(targetSecurityTokenAuthenticationConfigurationItem.isConfigEnabled()); gatewaySecTokenCheckBox.setValue(gatewaySecurityTokenAuthenticationConfigurationItem.isConfigEnabled()); + downloadAnonymousCheckBox.setValue(anonymousDownloadAuthenticationConfigurationItem.isConfigEnabled()); } @Override @@ -150,6 +166,8 @@ public class AuthenticationConfigurationView extends BaseConfigurationView configurationItem = targetSecurityTokenAuthenticationConfigurationItem; } else if (checkBox == certificateAuthCheckbox) { configurationItem = certificateAuthenticationConfigurationItem; + } else if (checkBox == downloadAnonymousCheckBox) { + configurationItem = anonymousDownloadAuthenticationConfigurationItem; } else { return; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java deleted file mode 100644 index e008e03f2..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/DownloadAnonymousConfigurationView.java +++ /dev/null @@ -1,119 +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.tenantconfiguration; - -import javax.annotation.PostConstruct; - -import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.repository.model.TenantConfigurationValue; -import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; -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.SPUILabelDefinitions; -import org.springframework.beans.factory.annotation.Autowired; - -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.GridLayout; -import com.vaadin.ui.Label; -import com.vaadin.ui.Panel; -import com.vaadin.ui.VerticalLayout; - -/** - * View to enable anonymous download. - */ -@SpringComponent -@ViewScope -public class DownloadAnonymousConfigurationView extends BaseConfigurationView - implements ConfigurationItem.ConfigurationItemChangeListener { - - private static final String DIST_CHECKBOX_STYLE = "dist-checkbox-style"; - - private static final long serialVersionUID = 1L; - - @Autowired - private I18N i18n; - - @Autowired - private transient TenantConfigurationManagement tenantConfigurationManagement; - - boolean anonymousDownloadEnabled; - - private CheckBox downloadAnonymousCheckBox; - - /** - * Initialize Default Download Anonymous layout. - */ - @PostConstruct - public void init() { - - final TenantConfigurationValue value = tenantConfigurationManagement - .getConfigurationValue(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, Boolean.class); - anonymousDownloadEnabled = value.getValue(); - - final Panel rootPanel = new Panel(); - rootPanel.setSizeFull(); - rootPanel.addStyleName("config-panel"); - - final VerticalLayout vLayout = new VerticalLayout(); - vLayout.setMargin(true); - vLayout.setSizeFull(); - - final Label headerDisSetType = new Label(i18n.get("enonymous.download.title")); - headerDisSetType.addStyleName("config-panel-header"); - vLayout.addComponent(headerDisSetType); - - final GridLayout gridLayout = new GridLayout(2, 1); - gridLayout.setSpacing(true); - gridLayout.setImmediate(true); - gridLayout.setColumnExpandRatio(1, 1.0F); - gridLayout.setSizeFull(); - - downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); - downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); - downloadAnonymousCheckBox.addValueChangeListener(event -> configurationHasChanged()); - downloadAnonymousCheckBox.setId(SPUIComponetIdProvider.SYSTEM_CONFIGURATION_ANONYMOUS_DOWNLOAD_CHECKBOX); - - gridLayout.addComponent(downloadAnonymousCheckBox); - - final Label configurationLabel = SPUIComponentProvider.getLabel(i18n.get("enonymous.download.label"), - SPUILabelDefinitions.SP_LABEL_SIMPLE); - gridLayout.addComponent(configurationLabel); - gridLayout.setComponentAlignment(configurationLabel, Alignment.MIDDLE_LEFT); - - vLayout.addComponent(gridLayout); - - rootPanel.setContent(vLayout); - setCompositionRoot(rootPanel); - } - - @Override - public void configurationHasChanged() { - anonymousDownloadEnabled = downloadAnonymousCheckBox.getValue(); - notifyConfigurationChanged(); - } - - @Override - public void save() { - tenantConfigurationManagement.addOrUpdateConfiguration(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, - downloadAnonymousCheckBox.getValue()); - } - - @Override - public void undo() { - final TenantConfigurationValue value = tenantConfigurationManagement - .getConfigurationValue(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, Boolean.class); - anonymousDownloadEnabled = value.getValue(); - downloadAnonymousCheckBox.setValue(anonymousDownloadEnabled); - } - -} 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 cada6d167..d021254bc 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 @@ -55,9 +55,6 @@ public class TenantConfigurationDashboardView extends CustomComponent implements @Autowired private PollingConfigurationView pollingConfigurationView; - @Autowired - private DownloadAnonymousConfigurationView downloadAnonymousConfigurationView; - @Autowired private I18N i18n; @@ -80,7 +77,6 @@ public class TenantConfigurationDashboardView extends CustomComponent implements configurationViews.add(defaultDistributionSetTypeLayout); configurationViews.add(authenticationConfigurationView); configurationViews.add(pollingConfigurationView); - configurationViews.add(downloadAnonymousConfigurationView); } @Override diff --git a/hawkbit-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 new file mode 100644 index 000000000..3c5a95df1 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/authentication/AnonymousDownloadAuthenticationConfigurationItem.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.ui.tenantconfiguration.authentication; + +import javax.annotation.PostConstruct; + +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.springframework.beans.factory.annotation.Autowired; + +import com.vaadin.spring.annotation.SpringComponent; +import com.vaadin.spring.annotation.ViewScope; + +/** + * This class represents the UI item for the anonymous download by in the + * authentication configuration view. + */ +@SpringComponent +@ViewScope +public class AnonymousDownloadAuthenticationConfigurationItem extends AbstractAuthenticationTenantConfigurationItem { + + private static final long serialVersionUID = 1L; + + private boolean configurationEnabled = false; + private boolean configurationEnabledChange = false; + + @Autowired + private I18N i18n; + + @Autowired + public AnonymousDownloadAuthenticationConfigurationItem( + final TenantConfigurationManagement tenantConfigurationManagement) { + super(TenantConfigurationKey.ANONYMOUS_DOWNLOAD_MODE_ENABLED, tenantConfigurationManagement); + } + + @PostConstruct + public void init() { + + super.init(i18n.get("enonymous.download.label")); + configurationEnabled = isConfigEnabled(); + + } + + @Override + public void configEnable() { + + if (!configurationEnabled) { + configurationEnabledChange = true; + } + configurationEnabled = true; + } + + @Override + public void configDisable() { + if (configurationEnabled) { + configurationEnabledChange = true; + } + configurationEnabled = false; + } + + @Override + public void save() { + if (!configurationEnabledChange) { + return; + } + getTenantConfigurationManagement().addOrUpdateConfiguration(getConfigurationKey(), configurationEnabled); + + } + + @Override + public void undo() { + + configurationEnabledChange = false; + configurationEnabled = getTenantConfigurationManagement() + .getConfigurationValue(getConfigurationKey(), Boolean.class).getValue(); + + } + +} From 7281c0e84e24d09e15228b972e0cf1edb055224b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 7 Apr 2016 15:25:31 +0200 Subject: [PATCH 100/344] Added description for anonymous download checkbox Signed-off-by: Jonathan Philip Knoblauch --- .../AnonymousDownloadAuthenticationConfigurationItem.java | 2 +- hawkbit-ui/src/main/resources/messages.properties | 3 +-- hawkbit-ui/src/main/resources/messages_de.properties | 4 ++-- hawkbit-ui/src/main/resources/messages_en.properties | 3 +-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/hawkbit-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 index 3c5a95df1..b1da8e0ee 100644 --- a/hawkbit-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 @@ -43,7 +43,7 @@ public class AnonymousDownloadAuthenticationConfigurationItem extends AbstractAu @PostConstruct public void init() { - super.init(i18n.get("enonymous.download.label")); + super.init(i18n.get("label.configuration.anonymous.download")); configurationEnabled = isConfigEnabled(); } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index ebdcfa76f..d2e36dd2d 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -161,6 +161,7 @@ label.tag.name = Tag name label.configuration.auth.header = Allow targets to authenticate via a certificate authenticated by an reverse proxy label.configuration.auth.gatewaytoken = Allow a gateway to authenticate and manage multiple targets through a gateway security token label.configuration.auth.targettoken = Allow targets to authenticate directly with their target security token +label.configuration.anonymous.download = Allow targets to download anonymous label.unsupported.browser.ie=Sorry! current browser is not supported. Please use Internet Explorer 11 and above # Checkbox label prefix with - checkbox @@ -401,8 +402,6 @@ configuration.polling.title=Polling Configuration configuration.polling.time=Polling Time configuration.polling.overduetime=Polling Overdue Time configuration.polling.custom.value=use a custom value -enonymous.download.title=Anonymous download -enonymous.download.label=Allow anonymous download. If you enable this option the download server will accept anonymous download requests. #Calendar calendar.year=year diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 47cb36f31..98ac9edb3 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -159,6 +159,7 @@ label.tag.name = Tag name label.configuration.auth.header = Allow targets to authenticate via a certificate authenticated by an reverse proxy label.configuration.auth.gatewaytoken = Allow a gateway to authenticate and manage multiple targets through a gateway security token label.configuration.auth.targettoken = Allow targets to authenticate directly with their target security token +label.configuration.anonymous.download = Allow targets to download anonymous label.unsupported.browser.ie=Sorry! current browser is not supported. Please use Internet Explorer 11 and above # Checkbox label prefix with - checkbox @@ -389,8 +390,7 @@ configuration.defaultdistributionset.select.label=Wahl des default Distribution configuration.savebutton.tooltip=Konfigurationen speichern configuration.cancellbutton.tooltip=Konfigurationen zur�cksetzen configuration.authentication.title=Authentifikationseinstellungen -enonymous.download.title=Anonymes herunterladen -enonymous.download.label=Erlaube anonymes herunterladen. When diese option aktivert ist, wird der download server anonyme download anfragen erlauben. + #Calendar calendar.year=Jahr calendar.years=Jahre diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 50c04ad46..d6b4b1088 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -160,6 +160,7 @@ label.tag.name = Tag name label.configuration.auth.header = Allow targets to authenticate via a certificate authenticated by an reverse proxy label.configuration.auth.gatewaytoken = Allow a gateway to authenticate and manage multiple targets through a gateway security token label.configuration.auth.targettoken = Allow targets to authenticate directly with their target security token +label.configuration.anonymous.download = Allow targets to download anonymous label.unsupported.browser.ie=Sorry! current browser is not supported. Please use Internet Explorer 11 and above # Checkbox label prefix with - checkbox @@ -383,8 +384,6 @@ configuration.authentication.title=Authentication Configuration controller.polling.title=Polling Configuration controller.polling.time=Polling Time controller.polling.overduetime=Polling Overdue Time -enonymous.download.title=Anonymous download -enonymous.download.label=Allow anonymous download. If you enable this option the download server will accept anonymous download requests. #Calendar calendar.year=year From d815aaf12c28a12f3478c99c55ea7b30cf9842ae Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 7 Apr 2016 15:58:25 +0200 Subject: [PATCH 101/344] Added id to anonymous download checkbox Signed-off-by: Jonathan Philip Knoblauch --- .../ui/tenantconfiguration/AuthenticationConfigurationView.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java index f3c42552e..616acaf3f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java @@ -112,6 +112,7 @@ public class AuthenticationConfigurationView extends BaseConfigurationView gridLayout.addComponent(gatewaySecurityTokenAuthenticationConfigurationItem, 1, 2); downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); + downloadAnonymousCheckBox.setId("downloadanonymouscheckbox"); downloadAnonymousCheckBox.setValue(targetSecurityTokenAuthenticationConfigurationItem.isConfigEnabled()); downloadAnonymousCheckBox.addValueChangeListener(this); anonymousDownloadAuthenticationConfigurationItem.addChangeListener(this); From a7d0306e75299387b693eb87901f27d4d9a424df Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 8 Apr 2016 05:37:21 +0200 Subject: [PATCH 102/344] Removed unnecessary transaction exceptions. Signed-off-by: Kai Zimmermann --- .../MultiTenantJpaTransactionManager.java | 38 ++++++++----------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java index 7b97f5037..1a519ea5b 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit; import javax.persistence.EntityManager; import javax.transaction.Transaction; -import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; import org.eclipse.hawkbit.tenancy.TenantAware; @@ -38,38 +37,31 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { protected void doBegin(final Object transaction, final TransactionDefinition definition) { super.doBegin(transaction, definition); + // ignore transactions on tenant independent calls + if (isTenantManagement(definition) && isCurrentTenantKeyGenerator(definition)) { + return; + } + final EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager .getResource(getEntityManagerFactory()); final EntityManager em = emHolder.getEntityManager(); - if (notTenantManagement(definition) && notCurrentTenantKeyGenerator(definition) - && notRolloutScheduler(definition) && notGetOrCreateTenantMetadata(definition)) { - - final String currentTenant = tenantAware.getCurrentTenant(); - if (currentTenant == null) { - throw new TenantNotExistException("Tenant Unknown. Canceling transaction."); - } - - em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, currentTenant.toUpperCase()); + final String currentTenant = tenantAware.getCurrentTenant(); + if (currentTenant == null) { + throw new TenantNotExistException("Tenant Unknown. Canceling transaction."); } + + em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, currentTenant.toUpperCase()); + } - private boolean notGetOrCreateTenantMetadata(final TransactionDefinition definition) { - return !definition.getName() - .startsWith(SystemManagement.class.getCanonicalName() + ".getOrCreateTenantMetadata"); - } - - private boolean notRolloutScheduler(final TransactionDefinition definition) { - return !definition.getName().startsWith(RolloutManagement.class.getCanonicalName() + ".rolloutScheduler"); - } - - private boolean notCurrentTenantKeyGenerator(final TransactionDefinition definition) { - return !definition.getName() + private boolean isCurrentTenantKeyGenerator(final TransactionDefinition definition) { + return definition.getName() .startsWith(SystemManagement.class.getCanonicalName() + ".currentTenantKeyGenerator"); } - private boolean notTenantManagement(final TransactionDefinition definition) { - return !definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".deleteTenant") + private boolean isTenantManagement(final TransactionDefinition definition) { + return definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".deleteTenant") && !definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".findTenants"); } } From e3de03206d540bea56b5bc1b70edc6d915798fc5 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 8 Apr 2016 05:59:34 +0200 Subject: [PATCH 103/344] Fixed condition --- .../main/java/org/eclipse/hawkbit/ui/HawkbitUI.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java index f4c26a960..4acd6e887 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java @@ -48,15 +48,13 @@ import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; /** - * Vaadin management UI. - * - * - * + * hawkBit Management UI. * */ -@SuppressWarnings("serial") @Title("hawkBit Update Server") public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { + private static final long serialVersionUID = 1L; + private static final Logger LOG = LoggerFactory.getLogger(HawkbitUI.class); private static final String EMPTY_VIEW = ""; @@ -154,6 +152,8 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { } final Navigator navigator = new Navigator(this, content); navigator.addViewChangeListener(new ViewChangeListener() { + private static final long serialVersionUID = 1L; + @Override public boolean beforeViewChange(final ViewChangeEvent event) { return true; @@ -233,6 +233,7 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { } private class ManagementViewProvider implements ViewProvider { + private static final long serialVersionUID = 1L; @Override public String getViewName(final String viewAndParameters) { From 0c800d31490bf66810b382f7f6df22562f642261 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 8 Apr 2016 06:13:16 +0200 Subject: [PATCH 104/344] Fixed condition --- .../org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java index 1a519ea5b..ac6bc8806 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java @@ -38,7 +38,7 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { super.doBegin(transaction, definition); // ignore transactions on tenant independent calls - if (isTenantManagement(definition) && isCurrentTenantKeyGenerator(definition)) { + if (isTenantManagement(definition) || isCurrentTenantKeyGenerator(definition)) { return; } From cf8e4fd2fd55909a8fe66c43a2e59d422da1596e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 8 Apr 2016 06:50:27 +0200 Subject: [PATCH 105/344] Revert "Fixed condition" This reverts commit e3de03206d540bea56b5bc1b70edc6d915798fc5. --- .../main/java/org/eclipse/hawkbit/ui/HawkbitUI.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java index 4acd6e887..f4c26a960 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/HawkbitUI.java @@ -48,13 +48,15 @@ import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; /** - * hawkBit Management UI. + * Vaadin management UI. + * + * + * * */ +@SuppressWarnings("serial") @Title("hawkBit Update Server") public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { - private static final long serialVersionUID = 1L; - private static final Logger LOG = LoggerFactory.getLogger(HawkbitUI.class); private static final String EMPTY_VIEW = ""; @@ -152,8 +154,6 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { } final Navigator navigator = new Navigator(this, content); navigator.addViewChangeListener(new ViewChangeListener() { - private static final long serialVersionUID = 1L; - @Override public boolean beforeViewChange(final ViewChangeEvent event) { return true; @@ -233,7 +233,6 @@ public class HawkbitUI extends DefaultHawkbitUI implements DetachListener { } private class ManagementViewProvider implements ViewProvider { - private static final long serialVersionUID = 1L; @Override public String getViewName(final String viewAndParameters) { From 1e28acb1704d0394550a9db1e65570ec3bed361a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 8 Apr 2016 08:16:47 +0200 Subject: [PATCH 106/344] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 461e12e81..0a9b0b4c6 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ https://hawkbit.eu-gb.mybluemix.net/UI/ # Compile, Run and Getting Started -We are not providing an off the shelf installation ready hawkBit update server. However, we recommend to check out the [Example Application](examples/hawkbit-example-app) for a runtime ready Spring Boot based update server that is empowered by hawkBit. +We are not providing an off the shelf installation ready hawkBit update server. However, we recommend to check out the [Example Application](examples/hawkbit-example-app) for a runtime ready Spring Boot based update server that is empowered by hawkBit. In addition we have [guide](https://github.com/eclipse/hawkbit/wiki/Run-hawkBit) for setting up a complete landscape. #### Clone and build hawkBit ``` From a021630c0491fefc8d8c312116958fa4e5c58f65 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 8 Apr 2016 10:12:16 +0200 Subject: [PATCH 107/344] Remove empty lines Signed-off-by: SirWayne --- .../hawkbit/ui/artifacts/smtable/SoftwareModuleDetails.java | 1 - .../hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java | 1 - .../eclipse/hawkbit/ui/artifacts/state/ArtifactUploadState.java | 1 - .../confirmwindow/layout/AbstractConfirmationWindowLayout.java | 1 - 4 files changed, 4 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 397f0cf2b..d839be40d 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 @@ -141,5 +141,4 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta protected String getDetailsHeaderCaptionId() { return SPUIComponetIdProvider.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 1ef4b8f7a..f101c94a7 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 @@ -206,6 +206,5 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable, Serializ public void setSelectedBaseSoftwareModule(final SoftwareModule selectedBaseSoftwareModule) { this.selectedBaseSoftwareModule = selectedBaseSoftwareModule; } - } diff --git a/hawkbit-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 index bc5de63ff..f4fe21425 100644 --- a/hawkbit-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 @@ -148,5 +148,4 @@ public abstract class AbstractConfirmationWindowLayout extends VerticalLayout { deletesDsIcon.addClickListener(clickListener); return deletesDsIcon; } - } From 3070dcfc3d99d1361bf4e788c3aa0d1d30052114 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 8 Apr 2016 15:01:26 +0200 Subject: [PATCH 108/344] Modify scope of protected attributes to private. Create getter/setter to access the the attribute. see clean code Protected variables should be avoided because: http://programmers.stackexchange.com/questions/162643/why-is-clean-code-suggesting-avoiding-protected-variables Signed-off-by: SirWayne --- .../smtable/SoftwareModuleDetails.java | 30 ++++---- ...amedVersionedEntityTableDetailsLayout.java | 3 +- .../AbstractTableDetailsLayout.java | 30 ++++++-- .../dstable/DistributionSetDetails.java | 58 +++++++------- .../smtable/SwModuleDetails.java | 30 ++++---- .../dstable/DistributionDetails.java | 30 ++++---- .../management/targettable/TargetDetails.java | 76 +++++++++---------- 7 files changed, 135 insertions(+), 122 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 d839be40d..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 @@ -52,16 +52,16 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Override protected void addTabs(final TabSheet detailsTab) { - detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); - detailsTab.addTab(createDescriptionLayout(), i18n.get("caption.tab.description"), null); - detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); + 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); } @Override protected void onEdit(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow .createUpdateSoftwareModuleWindow(getSelectedBaseEntityId()); - addSoftwareModule.setCaption(i18n.get("upload.caption.update.swmodule")); + addSoftwareModule.setCaption(getI18n().get("upload.caption.update.swmodule")); UI.getCurrent().addWindow(addSoftwareModule); addSoftwareModule.setVisible(Boolean.TRUE); } @@ -69,14 +69,14 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Override protected void populateDetailsWidget() { String maxAssign = HawkbitCommonUtil.SP_STRING_EMPTY; - if (selectedBaseEntity != null) { - if (selectedBaseEntity.getType().getMaxAssignments() == Integer.MAX_VALUE) { - maxAssign = i18n.get("label.multiAssign.type"); + if (getSelectedBaseEntity() != null) { + if (getSelectedBaseEntity().getType().getMaxAssignments() == Integer.MAX_VALUE) { + maxAssign = getI18n().get("label.multiAssign.type"); } else { - maxAssign = i18n.get("label.singleAssign.type"); + maxAssign = getI18n().get("label.singleAssign.type"); } - updateSoftwareModuleDetailsLayout(selectedBaseEntity.getType().getName(), selectedBaseEntity.getVendor(), - maxAssign); + updateSoftwareModuleDetailsLayout(getSelectedBaseEntity().getType().getName(), + getSelectedBaseEntity().getVendor(), maxAssign); } else { updateSoftwareModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); @@ -88,19 +88,19 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta detailsTabLayout.removeAllComponents(); - final Label vendorLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.vendor"), + final Label vendorLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.vendor"), HawkbitCommonUtil.trimAndNullIfEmpty(vendor) == null ? "" : vendor); vendorLabel.setId(SPUIComponetIdProvider.DETAILS_VENDOR_LABEL_ID); detailsTabLayout.addComponent(vendorLabel); if (type != null) { - final Label typeLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.type"), + final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } - final Label assignLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.assigned.type"), + final Label assignLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.assigned.type"), HawkbitCommonUtil.trimAndNullIfEmpty(maxAssign) == null ? "" : maxAssign); assignLabel.setId(SPUIComponetIdProvider.SWM_DTLS_MAX_ASSIGN); detailsTabLayout.addComponent(assignLabel); @@ -109,7 +109,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Override protected String getDefaultCaption() { - return i18n.get("upload.swModuleTable.header"); + return getI18n().get("upload.swModuleTable.header"); } @Override @@ -129,7 +129,7 @@ public class SoftwareModuleDetails extends AbstractNamedVersionedEntityTableDeta @Override protected Boolean hasEditPermission() { - return permissionChecker.hasUpdateDistributionPermission(); + return getPermissionChecker().hasUpdateDistributionPermission(); } @Override diff --git a/hawkbit-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 index 19bfb324e..3ccbb8ad7 100644 --- a/hawkbit-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 @@ -22,6 +22,7 @@ public abstract class AbstractNamedVersionedEntityTableDetailsLayout extends private static final long serialVersionUID = 4862529368471627190L; @Autowired - protected I18N i18n; + private I18N i18n; @Autowired - protected transient EventBus.SessionEventBus eventBus; + private transient EventBus.SessionEventBus eventBus; @Autowired - protected SpPermissionChecker permissionChecker; + private SpPermissionChecker permissionChecker; - protected T selectedBaseEntity; + private T selectedBaseEntity; private Label caption; @@ -89,6 +89,26 @@ public abstract class AbstractTableDetailsLayout extends eventBus.unsubscribe(this); } + protected SpPermissionChecker getPermissionChecker() { + return permissionChecker; + } + + protected EventBus.SessionEventBus getEventBus() { + return eventBus; + } + + protected I18N getI18n() { + return i18n; + } + + protected T getSelectedBaseEntity() { + return selectedBaseEntity; + } + + public void setSelectedBaseEntity(final T selectedBaseEntity) { + this.selectedBaseEntity = selectedBaseEntity; + } + /** * Default implementation to handle a entity event. * @@ -118,7 +138,7 @@ public abstract class AbstractTableDetailsLayout extends editButton = SPUIComponentProvider.getButton("", "", "", null, false, FontAwesome.PENCIL_SQUARE_O, SPUIButtonStyleSmallNoBorder.class); editButton.setId(getEditButtonId()); - editButton.addClickListener(event -> onEdit(event)); + editButton.addClickListener(this::onEdit); editButton.setEnabled(false); 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 64a9819bb..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 @@ -92,7 +92,8 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet @Override protected void init() { softwareModuleTable = new SoftwareModuleDetailsTable(); - softwareModuleTable.init(i18n, true, permissionChecker, distributionSetManagement, eventBus, manageDistUIState); + softwareModuleTable.init(getI18n(), true, getPermissionChecker(), distributionSetManagement, getEventBus(), + manageDistUIState); super.init(); } @@ -109,7 +110,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet } private void populateModule() { - softwareModuleTable.populateModule(selectedBaseEntity); + softwareModuleTable.populateModule(getSelectedBaseEntity()); showUnsavedAssignment(); } @@ -157,12 +158,8 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet } } - /** - * @param item - * @param entry - */ private void assignSoftModuleButton(final Item item, final Map.Entry entry) { - if (permissionChecker.hasUpdateDistributionPermission() && distributionSetManagement + if (getPermissionChecker().hasUpdateDistributionPermission() && distributionSetManagement .findDistributionSetById(manageDistUIState.getLastSelectedDistribution().get().getId()) .getAssignedTargets().isEmpty()) { final Button reassignSoftModule = SPUIComponentProvider.getButton(entry.getKey(), "", "", "", true, @@ -227,15 +224,16 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet private void populateTags() { tagsLayout.removeAllComponents(); - if (null != selectedBaseEntity) { - tagsLayout.addComponent(distributionTagToken.getTokenField()); + if (getSelectedBaseEntity() == null) { + return; } + tagsLayout.addComponent(distributionTagToken.getTokenField()); } private void populateDetails() { - if (selectedBaseEntity != null) { - updateDistributionSetDetailsLayout(selectedBaseEntity.getType().getName(), - selectedBaseEntity.isRequiredMigrationStep()); + if (getSelectedBaseEntity() != null) { + updateDistributionSetDetailsLayout(getSelectedBaseEntity().getType().getName(), + getSelectedBaseEntity().isRequiredMigrationStep()); } else { updateDistributionSetDetailsLayout(null, null); } @@ -246,16 +244,16 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet detailsTabLayout.removeAllComponents(); if (type != null) { - final Label typeLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.type"), + final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } if (isMigrationRequired != null) { - detailsTabLayout.addComponent( - SPUIComponentProvider.createNameValueLabel(i18n.get("checkbox.dist.migration.required"), - isMigrationRequired.equals(Boolean.TRUE) ? i18n.get("label.yes") : i18n.get("label.no"))); + detailsTabLayout.addComponent(SPUIComponentProvider.createNameValueLabel( + getI18n().get("checkbox.dist.migration.required"), + isMigrationRequired.equals(Boolean.TRUE) ? getI18n().get("label.yes") : getI18n().get("label.no"))); } } @@ -263,7 +261,7 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet protected void onEdit(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId()); - newDistWindow.setCaption(i18n.get("caption.update.dist")); + newDistWindow.setCaption(getI18n().get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); } @@ -286,21 +284,21 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet @Override protected String getDefaultCaption() { - return i18n.get("distribution.details.header"); + return getI18n().get("distribution.details.header"); } @Override protected void addTabs(final TabSheet detailsTab) { - detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); - detailsTab.addTab(createDescriptionLayout(), i18n.get("caption.tab.description"), null); - detailsTab.addTab(createSoftwareModuleTab(), i18n.get("caption.softwares.distdetail.tab"), null); - detailsTab.addTab(createTagsLayout(), i18n.get("caption.tags.tab"), null); - detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); + detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); + detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); + 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); } @Override protected Boolean hasEditPermission() { - return permissionChecker.hasUpdateDistributionPermission(); + return getPermissionChecker().hasUpdateDistributionPermission(); } @EventBusListenerMethod(scope = EventScope.SESSION) @@ -322,9 +320,9 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet final DistributionSetIdName distIdName = softwareModuleAssignmentDiscardEvent .getDistributionSetIdName(); if (distIdName.getId().equals(getSelectedBaseEntityId()) - && distIdName.getName().equals(selectedBaseEntity.getName())) { - selectedBaseEntity = distributionSetManagement - .findDistributionSetByIdWithDetails(getSelectedBaseEntityId()); + && distIdName.getName().equals(getSelectedBaseEntity().getName())) { + setSelectedBaseEntity( + distributionSetManagement.findDistributionSetByIdWithDetails(getSelectedBaseEntityId())); populateModule(); } }); @@ -335,10 +333,10 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet void onEvent(final SaveActionWindowEvent saveActionWindowEvent) { if ((saveActionWindowEvent == SaveActionWindowEvent.SAVED_ASSIGNMENTS || saveActionWindowEvent == SaveActionWindowEvent.DISCARD_ALL_ASSIGNMENTS) - && selectedBaseEntity != null) { + && getSelectedBaseEntity() != null) { assignedSWModule.clear(); - selectedBaseEntity = distributionSetManagement - .findDistributionSetByIdWithDetails(getSelectedBaseEntityId()); + setSelectedBaseEntity( + distributionSetManagement.findDistributionSetByIdWithDetails(getSelectedBaseEntityId())); UI.getCurrent().access(() -> populateModule()); } } 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 e1c39ee89..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 @@ -54,7 +54,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay protected void onEdit(final ClickEvent event) { final Window addSoftwareModule = softwareModuleAddUpdateWindow .createUpdateSoftwareModuleWindow(getSelectedBaseEntityId()); - addSoftwareModule.setCaption(i18n.get("upload.caption.update.swmodule")); + addSoftwareModule.setCaption(getI18n().get("upload.caption.update.swmodule")); UI.getCurrent().addWindow(addSoftwareModule); addSoftwareModule.setVisible(Boolean.TRUE); } @@ -66,14 +66,14 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Override protected void addTabs(final TabSheet detailsTab) { - detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); - detailsTab.addTab(createDescriptionLayout(), i18n.get("caption.tab.description"), null); - detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); + 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); } @Override protected String getDefaultCaption() { - return i18n.get("upload.swModuleTable.header"); + return getI18n().get("upload.swModuleTable.header"); } @Override @@ -88,7 +88,7 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay @Override protected Boolean hasEditPermission() { - return permissionChecker.hasUpdateDistributionPermission(); + return getPermissionChecker().hasUpdateDistributionPermission(); } @Override @@ -98,14 +98,14 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay private void populateDetails() { String maxAssign = HawkbitCommonUtil.SP_STRING_EMPTY; - if (selectedBaseEntity != null) { - if (selectedBaseEntity.getType().getMaxAssignments() == Integer.MAX_VALUE) { - maxAssign = i18n.get("label.multiAssign.type"); + if (getSelectedBaseEntity() != null) { + if (getSelectedBaseEntity().getType().getMaxAssignments() == Integer.MAX_VALUE) { + maxAssign = getI18n().get("label.multiAssign.type"); } else { - maxAssign = i18n.get("label.singleAssign.type"); + maxAssign = getI18n().get("label.singleAssign.type"); } - updateSwModuleDetailsLayout(selectedBaseEntity.getType().getName(), selectedBaseEntity.getVendor(), - maxAssign); + updateSwModuleDetailsLayout(getSelectedBaseEntity().getType().getName(), + getSelectedBaseEntity().getVendor(), maxAssign); } else { updateSwModuleDetailsLayout(HawkbitCommonUtil.SP_STRING_EMPTY, HawkbitCommonUtil.SP_STRING_EMPTY, maxAssign); @@ -117,19 +117,19 @@ public class SwModuleDetails extends AbstractNamedVersionedEntityTableDetailsLay final VerticalLayout detailsTabLayout = getDetailsLayout(); detailsTabLayout.removeAllComponents(); - final Label vendorLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.vendor"), + final Label vendorLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.vendor"), HawkbitCommonUtil.trimAndNullIfEmpty(vendor) == null ? "" : vendor); vendorLabel.setId(SPUIComponetIdProvider.DETAILS_VENDOR_LABEL_ID); detailsTabLayout.addComponent(vendorLabel); if (type != null) { - final Label typeLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.type"), + final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } - final Label assignLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.assigned.type"), + final Label assignLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.assigned.type"), HawkbitCommonUtil.trimAndNullIfEmpty(maxAssign) == null ? "" : maxAssign); assignLabel.setId(SPUIComponetIdProvider.SWM_DTLS_MAX_ASSIGN); detailsTabLayout.addComponent(assignLabel); 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 aedce157e..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 @@ -52,7 +52,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected void init() { softwareModuleTable = new SoftwareModuleDetailsTable(); - softwareModuleTable.init(i18n, false, permissionChecker, null, null, null); + softwareModuleTable.init(getI18n(), false, getPermissionChecker(), null, null, null); super.init(); } @@ -63,23 +63,23 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected String getDefaultCaption() { - return i18n.get("distribution.details.header"); + return getI18n().get("distribution.details.header"); } @Override protected void addTabs(final TabSheet detailsTab) { - detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); - detailsTab.addTab(createDescriptionLayout(), i18n.get("caption.tab.description"), null); - detailsTab.addTab(createSoftwareModuleTab(), i18n.get("caption.softwares.distdetail.tab"), null); - detailsTab.addTab(createTagsLayout(), i18n.get("caption.tags.tab"), null); - detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); + detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); + detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); + 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); } @Override protected void onEdit(final ClickEvent event) { final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow(); distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId()); - newDistWindow.setCaption(i18n.get("caption.update.dist")); + newDistWindow.setCaption(getI18n().get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); } @@ -102,7 +102,7 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected Boolean hasEditPermission() { - return permissionChecker.hasUpdateDistributionPermission(); + return getPermissionChecker().hasUpdateDistributionPermission(); } @Override @@ -112,8 +112,8 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail @Override protected void populateDetailsWidget() { - softwareModuleTable.populateModule(selectedBaseEntity); - populateDetails(selectedBaseEntity); + softwareModuleTable.populateModule(getSelectedBaseEntity()); + populateDetails(getSelectedBaseEntity()); } @@ -130,16 +130,16 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail detailsTabLayout.removeAllComponents(); if (type != null) { - final Label typeLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.type"), + final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.type"), type); typeLabel.setId(SPUIComponetIdProvider.DETAILS_TYPE_LABEL_ID); detailsTabLayout.addComponent(typeLabel); } if (isMigrationRequired != null) { - detailsTabLayout.addComponent( - SPUIComponentProvider.createNameValueLabel(i18n.get("checkbox.dist.migration.required"), - isMigrationRequired.equals(Boolean.TRUE) ? i18n.get("label.yes") : i18n.get("label.no"))); + detailsTabLayout.addComponent(SPUIComponentProvider.createNameValueLabel( + getI18n().get("checkbox.dist.migration.required"), + isMigrationRequired.equals(Boolean.TRUE) ? getI18n().get("label.yes") : getI18n().get("label.no"))); } } 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 6105409bf..8ab4f8b0d 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 @@ -43,9 +43,6 @@ import com.vaadin.ui.themes.ValoTheme; /** * Target details layout. - * - * - * */ @SpringComponent @ViewScope @@ -65,9 +62,6 @@ public class TargetDetails extends AbstractTableDetailsLayout { private VerticalLayout assignedDistLayout; private VerticalLayout installedDistLayout; - /** - * Initialize the Target details. - */ @Override public void init() { super.init(); @@ -76,18 +70,18 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected String getDefaultCaption() { - return i18n.get("target.details.header"); + return getI18n().get("target.details.header"); } @Override protected void addTabs(final TabSheet detailsTab) { - detailsTab.addTab(createDetailsLayout(), i18n.get("caption.tab.details"), null); - detailsTab.addTab(createDescriptionLayout(), i18n.get("caption.tab.description"), null); - detailsTab.addTab(createAttributesLayout(), i18n.get("caption.attributes.tab"), null); - detailsTab.addTab(createAssignedDistLayout(), i18n.get("header.target.assigned"), null); - detailsTab.addTab(createInstalledDistLayout(), i18n.get("header.target.installed"), null); - detailsTab.addTab(createTagsLayout(), i18n.get("caption.tags.tab"), null); - detailsTab.addTab(createLogLayout(), i18n.get("caption.logs.tab"), null); + detailsTab.addTab(createDetailsLayout(), getI18n().get("caption.tab.details"), null); + detailsTab.addTab(createDescriptionLayout(), getI18n().get("caption.tab.description"), null); + detailsTab.addTab(createAttributesLayout(), getI18n().get("caption.attributes.tab"), null); + detailsTab.addTab(createAssignedDistLayout(), getI18n().get("header.target.assigned"), null); + detailsTab.addTab(createInstalledDistLayout(), getI18n().get("header.target.installed"), null); + detailsTab.addTab(createTagsLayout(), getI18n().get("caption.tags.tab"), null); + detailsTab.addTab(createLogLayout(), getI18n().get("caption.logs.tab"), null); } @@ -109,12 +103,12 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected void onEdit(final ClickEvent event) { - if (selectedBaseEntity == null) { + if (getSelectedBaseEntity() == null) { return; } final Window newDistWindow = targetAddUpdateWindowLayout.getWindow(); - targetAddUpdateWindowLayout.populateValuesOfTarget(selectedBaseEntity.getControllerId()); - newDistWindow.setCaption(i18n.get("caption.update.dist")); + targetAddUpdateWindowLayout.populateValuesOfTarget(getSelectedBaseEntity().getControllerId()); + newDistWindow.setCaption(getI18n().get("caption.update.dist")); UI.getCurrent().addWindow(newDistWindow); newDistWindow.setVisible(Boolean.TRUE); } @@ -136,24 +130,24 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected void populateDetailsWidget() { - if (selectedBaseEntity != null) { - updateDetailsLayout(selectedBaseEntity.getControllerId(), selectedBaseEntity.getTargetInfo().getAddress(), - selectedBaseEntity.getSecurityToken(), - SPDateTimeUtil.getFormattedDate(selectedBaseEntity.getTargetInfo().getLastTargetQuery())); + if (getSelectedBaseEntity() != null) { + updateDetailsLayout(getSelectedBaseEntity().getControllerId(), + getSelectedBaseEntity().getTargetInfo().getAddress(), getSelectedBaseEntity().getSecurityToken(), + SPDateTimeUtil.getFormattedDate(getSelectedBaseEntity().getTargetInfo().getLastTargetQuery())); populateDistributionDtls(installedDistLayout, - selectedBaseEntity.getTargetInfo().getInstalledDistributionSet()); - populateDistributionDtls(assignedDistLayout, selectedBaseEntity.getAssignedDistributionSet()); + getSelectedBaseEntity().getTargetInfo().getInstalledDistributionSet()); + populateDistributionDtls(assignedDistLayout, getSelectedBaseEntity().getAssignedDistributionSet()); } else { updateDetailsLayout(null, null, null, null); populateDistributionDtls(installedDistLayout, null); populateDistributionDtls(assignedDistLayout, null); } - updateAttributesLayout(selectedBaseEntity); + updateAttributesLayout(getSelectedBaseEntity()); } @Override protected String getName() { - return selectedBaseEntity.getName(); + return getSelectedBaseEntity().getName(); } private void updateDetailsLayout(final String controllerId, final URI address, final String securityToken, @@ -161,17 +155,18 @@ public class TargetDetails extends AbstractTableDetailsLayout { final VerticalLayout detailsTabLayout = getDetailsLayout(); detailsTabLayout.removeAllComponents(); - final Label controllerLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.target.id"), + final Label controllerLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.target.id"), HawkbitCommonUtil.trimAndNullIfEmpty(controllerId) == null ? "" : controllerId); controllerLabel.setId(SPUIComponetIdProvider.TARGET_CONTROLLER_ID); detailsTabLayout.addComponent(controllerLabel); - final Label lastPollDtLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.target.lastpolldate"), + final Label lastPollDtLabel = SPUIComponentProvider.createNameValueLabel( + getI18n().get("label.target.lastpolldate"), HawkbitCommonUtil.trimAndNullIfEmpty(lastQueryDate) == null ? "" : lastQueryDate); lastPollDtLabel.setId(SPUIComponetIdProvider.TARGET_LAST_QUERY_DT); detailsTabLayout.addComponent(lastPollDtLabel); - final Label typeLabel = SPUIComponentProvider.createNameValueLabel(i18n.get("label.ip"), + final Label typeLabel = SPUIComponentProvider.createNameValueLabel(getI18n().get("label.ip"), address == null ? StringUtils.EMPTY : address.toString()); typeLabel.setId(SPUIComponetIdProvider.TARGET_IP_ADDRESS); detailsTabLayout.addComponent(typeLabel); @@ -187,7 +182,7 @@ public class TargetDetails extends AbstractTableDetailsLayout { final HorizontalLayout securityTokenLayout = new HorizontalLayout(); final Label securityTableLbl = new Label( - SPUIComponentProvider.getBoldHTMLText(i18n.get("label.target.security.token")), ContentMode.HTML); + SPUIComponentProvider.getBoldHTMLText(getI18n().get("label.target.security.token")), ContentMode.HTML); securityTableLbl.addStyleName(SPUIDefinitions.TEXT_STYLE); securityTableLbl.addStyleName("label-style"); @@ -207,18 +202,17 @@ public class TargetDetails extends AbstractTableDetailsLayout { private void populateDistributionDtls(final VerticalLayout layout, final DistributionSet distributionSet) { layout.removeAllComponents(); - if (distributionSet != null) { - // Display distribution set name - layout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.name"), - distributionSet.getName())); - - layout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.dist.details.version"), - distributionSet.getVersion())); - - /* Module info */ - distributionSet.getModules() - .forEach(module -> layout.addComponent(getSWModlabel(module.getType().getName(), module))); + if (distributionSet == null) { + return; } + layout.addComponent(SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.name"), + distributionSet.getName())); + + layout.addComponent(SPUIComponentProvider.createNameValueLabel(getI18n().get("label.dist.details.version"), + distributionSet.getVersion())); + + distributionSet.getModules() + .forEach(module -> layout.addComponent(getSWModlabel(module.getType().getName(), module))); } /** @@ -236,7 +230,7 @@ public class TargetDetails extends AbstractTableDetailsLayout { @Override protected Boolean hasEditPermission() { - return permissionChecker.hasUpdateTargetPermission(); + return getPermissionChecker().hasUpdateTargetPermission(); } @EventBusListenerMethod(scope = EventScope.SESSION) From b26cde62df32c0d8fb7306f1d24b89e944ad89a5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 8 Apr 2016 15:35:59 +0200 Subject: [PATCH 109/344] Use for float uppercase F Signed-off-by: SirWayne --- .../hawkbit/ui/common/table/AbstractTable.java | 2 +- .../ui/distributions/smtable/SwModuleTable.java | 2 +- .../ui/management/dstable/DistributionTable.java | 15 +-------------- .../ui/management/targettable/TargetTable.java | 4 ++-- 4 files changed, 5 insertions(+), 18 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 5aea8914f..eb1951d27 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 @@ -66,7 +66,7 @@ public abstract class AbstractTable 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); setSortEnabled(false); 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 9c02f1d8a..a9a4562ce 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 @@ -229,7 +229,7 @@ public class SwModuleTable extends AbstractNamedVersionTable getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); if (isMaximized()) { - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1f)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); } else { columnList.add(new TableColumn(SPUILabelDefinitions.ARTIFACT_ICON, "", 0.1F)); } 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 4ba164bde..1b856277e 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 @@ -173,24 +173,11 @@ public class DistributionTable extends AbstractNamedVersionTable queryConfiguration = prepareQueryConfigFilters(); @@ -276,7 +263,7 @@ public class DistributionTable extends AbstractNamedVersionTable implements protected List getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); 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)); + 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; From 7731b549c327227277ca686d542f8d77936196e1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 8 Apr 2016 16:03:29 +0200 Subject: [PATCH 110/344] Use for float uppercase F Signed-off-by: SirWayne --- .../hawkbit/ui/common/table/AbstractNamedVersionTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 64460bc1c..3e215f77c 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 @@ -31,7 +31,7 @@ public abstract class AbstractNamedVersionTable getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); - final float versionColumnSize = isMaximized() ? 0.1f : 0.2f; + final float versionColumnSize = isMaximized() ? 0.1F : 0.2F; columnList .add(new TableColumn(SPUILabelDefinitions.VAR_VERSION, i18n.get("header.version"), versionColumnSize)); return columnList; From 313751a3fd38ea1469fe7838bbc8f35a513f1bbb Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 8 Apr 2016 16:05:38 +0200 Subject: [PATCH 111/344] fix typo Signed-off-by: SirWayne --- .../ui/common/detailslayout/AbstractTableDetailsLayout.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 615cba33f..969436904 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 @@ -110,7 +110,7 @@ public abstract class AbstractTableDetailsLayout extends } /** - * Default implementation to handle a entity event. + * Default implementation to handle an entity event. * * @param baseEntityEvent * the event @@ -127,9 +127,6 @@ public abstract class AbstractTableDetailsLayout extends } private void createComponents() { - /** - * Default caption is set.Reset on selecting table row. - */ caption = createHeaderCaption(); caption.setImmediate(true); caption.setContentMode(ContentMode.HTML); @@ -152,7 +149,6 @@ public abstract class AbstractTableDetailsLayout extends } private void buildLayout() { - final HorizontalLayout nameEditLayout = new HorizontalLayout(); nameEditLayout.setWidth(100.0f, Unit.PERCENTAGE); nameEditLayout.addComponent(caption); From 40478dd6752f2dbbccdf3f10952439aad165c06b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 8 Apr 2016 17:15:15 +0200 Subject: [PATCH 112/344] Refactoring after review - changed label sentence - remove I18N to parent class - remove empty lines - set variable for configurationEnabledChange directly Signed-off-by: Jonathan Philip Knoblauch --- ...AuthenticationTenantConfigurationItem.java | 7 ++++++- ...wnloadAuthenticationConfigurationItem.java | 20 +++---------------- ...ficateAuthenticationConfigurationItem.java | 6 +----- ...yTokenAuthenticationConfigurationItem.java | 5 +---- ...yTokenAuthenticationConfigurationItem.java | 6 +----- .../src/main/resources/messages.properties | 2 +- .../src/main/resources/messages_de.properties | 2 +- .../src/main/resources/messages_en.properties | 2 +- 8 files changed, 15 insertions(+), 35 deletions(-) diff --git a/hawkbit-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 index 0907ebf9e..4f222f080 100644 --- a/hawkbit-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 @@ -14,7 +14,9 @@ import java.util.List; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.ui.VerticalLayout; @@ -30,6 +32,9 @@ abstract class AbstractAuthenticationTenantConfigurationItem extends VerticalLay private static final long serialVersionUID = 1L; + @Autowired + private I18N i18n; + private final TenantConfigurationKey configurationKey; private final transient TenantConfigurationManagement tenantConfigurationManagement; @@ -53,7 +58,7 @@ abstract class AbstractAuthenticationTenantConfigurationItem extends VerticalLay */ protected void init(final String labelText) { setImmediate(true); - addComponent(SPUIComponentProvider.getLabel(labelText, SPUILabelDefinitions.SP_LABEL_SIMPLE)); + addComponent(SPUIComponentProvider.getLabel(i18n.get(labelText), SPUILabelDefinitions.SP_LABEL_SIMPLE)); } @Override diff --git a/hawkbit-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 index b1da8e0ee..1180eba64 100644 --- a/hawkbit-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 @@ -12,7 +12,6 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; -import org.eclipse.hawkbit.ui.utils.I18N; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -31,9 +30,6 @@ public class AnonymousDownloadAuthenticationConfigurationItem extends AbstractAu private boolean configurationEnabled = false; private boolean configurationEnabledChange = false; - @Autowired - private I18N i18n; - @Autowired public AnonymousDownloadAuthenticationConfigurationItem( final TenantConfigurationManagement tenantConfigurationManagement) { @@ -42,26 +38,19 @@ public class AnonymousDownloadAuthenticationConfigurationItem extends AbstractAu @PostConstruct public void init() { - - super.init(i18n.get("label.configuration.anonymous.download")); + super.init("label.configuration.anonymous.download"); configurationEnabled = isConfigEnabled(); - } @Override public void configEnable() { - - if (!configurationEnabled) { - configurationEnabledChange = true; - } + configurationEnabledChange = !configurationEnabled; configurationEnabled = true; } @Override public void configDisable() { - if (configurationEnabled) { - configurationEnabledChange = true; - } + configurationEnabledChange = configurationEnabled; configurationEnabled = false; } @@ -71,16 +60,13 @@ public class AnonymousDownloadAuthenticationConfigurationItem extends AbstractAu return; } getTenantConfigurationManagement().addOrUpdateConfiguration(getConfigurationKey(), configurationEnabled); - } @Override public void undo() { - configurationEnabledChange = false; configurationEnabled = getTenantConfigurationManagement() .getConfigurationValue(getConfigurationKey(), Boolean.class).getValue(); - } } 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 b17d9596f..438917072 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 @@ -13,7 +13,6 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -35,9 +34,6 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti private static final long serialVersionUID = 1L; - @Autowired - private I18N i18n; - private boolean configurationEnabled = false; private boolean configurationEnabledChange = false; private boolean configurationCaRootAuthorityChanged = false; @@ -60,7 +56,7 @@ public class CertificateAuthenticationConfigurationItem extends AbstractAuthenti */ @PostConstruct public void init() { - super.init(i18n.get("label.configuration.auth.header")); + super.init("label.configuration.auth.header"); configurationEnabled = isConfigEnabled(); detailLayout = new VerticalLayout(); 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 757460809..3fa87538c 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 @@ -15,7 +15,6 @@ import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmall; -import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; @@ -41,8 +40,6 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac @Autowired private transient SecurityTokenGenerator securityTokenGenerator; - @Autowired - private I18N i18n; private TextField gatewayTokenNameTextField; @@ -72,7 +69,7 @@ public class GatewaySecurityTokenAuthenticationConfigurationItem extends Abstrac @PostConstruct public void init() { - super.init(i18n.get("label.configuration.auth.gatewaytoken")); + super.init("label.configuration.auth.gatewaytoken"); configurationEnabled = isConfigEnabled(); detailLayout = new VerticalLayout(); diff --git a/hawkbit-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 index 641982d73..9ca82e7ea 100644 --- a/hawkbit-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 @@ -12,7 +12,6 @@ import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationKey; -import org.eclipse.hawkbit.ui.utils.I18N; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -28,9 +27,6 @@ public class TargetSecurityTokenAuthenticationConfigurationItem extends Abstract private static final long serialVersionUID = 1L; - @Autowired - private I18N i18n; - private boolean configurationEnabled = false; private boolean configurationEnabledChange = false; @@ -49,7 +45,7 @@ public class TargetSecurityTokenAuthenticationConfigurationItem extends Abstract */ @PostConstruct public void init() { - super.init(i18n.get("label.configuration.auth.targettoken")); + super.init("label.configuration.auth.targettoken"); configurationEnabled = isConfigEnabled(); } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index d2e36dd2d..25dabd354 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -161,7 +161,7 @@ label.tag.name = Tag name label.configuration.auth.header = Allow targets to authenticate via a certificate authenticated by an reverse proxy label.configuration.auth.gatewaytoken = Allow a gateway to authenticate and manage multiple targets through a gateway security token label.configuration.auth.targettoken = Allow targets to authenticate directly with their target security token -label.configuration.anonymous.download = Allow targets to download anonymous +label.configuration.anonymous.download = Allow targets to download artifacts without security credentials label.unsupported.browser.ie=Sorry! current browser is not supported. Please use Internet Explorer 11 and above # Checkbox label prefix with - checkbox diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 98ac9edb3..39661e3c9 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -159,7 +159,7 @@ label.tag.name = Tag name label.configuration.auth.header = Allow targets to authenticate via a certificate authenticated by an reverse proxy label.configuration.auth.gatewaytoken = Allow a gateway to authenticate and manage multiple targets through a gateway security token label.configuration.auth.targettoken = Allow targets to authenticate directly with their target security token -label.configuration.anonymous.download = Allow targets to download anonymous +label.configuration.anonymous.download = Allow targets to download artifacts without security credentials label.unsupported.browser.ie=Sorry! current browser is not supported. Please use Internet Explorer 11 and above # Checkbox label prefix with - checkbox diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index d6b4b1088..23df35ad2 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -160,7 +160,7 @@ label.tag.name = Tag name label.configuration.auth.header = Allow targets to authenticate via a certificate authenticated by an reverse proxy label.configuration.auth.gatewaytoken = Allow a gateway to authenticate and manage multiple targets through a gateway security token label.configuration.auth.targettoken = Allow targets to authenticate directly with their target security token -label.configuration.anonymous.download = Allow targets to download anonymous +label.configuration.anonymous.download = Allow targets to download artifacts without security credentials label.unsupported.browser.ie=Sorry! current browser is not supported. Please use Internet Explorer 11 and above # Checkbox label prefix with - checkbox From b3efcff49ec30233f27c87b7afb396917298cfd8 Mon Sep 17 00:00:00 2001 From: Asharani Date: Mon, 11 Apr 2016 11:21:46 +0530 Subject: [PATCH 113/344] Add documentation for client side debugging Signed-off-by: Asharani --- hawkbit-ui/README.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 hawkbit-ui/README.md diff --git a/hawkbit-ui/README.md b/hawkbit-ui/README.md new file mode 100644 index 000000000..f8e020648 --- /dev/null +++ b/hawkbit-ui/README.md @@ -0,0 +1,34 @@ +# hawkBit User Interface + +The application with user interface to create and manage rollouts. + +## Debugging client-side code +### Debug usings SuperDevMode +The SuperDevMode can be used to debug client side code without any browser plugin. + +#### Using SuperDevMode with chrome : + +- Add required maven dependencies + - Add vaadin-client-compiler dependency + - Add jetty dependencies (version : 8.1x) +- Set redirect property in the AppWidgetSet.gwt.xml module descriptor as follows + - < set-configuration-property name="devModeRedirectEnabled" value="true" /> +- Create launch configuration for the SuperDevMode + - The main class to execute should be com.google.gwt.dev.codeserver.CodeServer. + - Add fully-qualified class name of widgetset (org.eclipse.hawkbit.ui.AppWidgetSet) as parameter +- Enable debug in chrome + - Chrome inspector window ▸ Click on settings icon ▸ Scripts ▸ Enable source maps option +- Run the SuperDevMode Code Server with the launch configuration created above +- Open http://localhost:8080/UI/?debug .Click on "SuperDev" button in debug console (Alternatively can directly add ?superdevmode parameter to URL) +- Widgetset is compiled and you can see the java code files loaded in 'Chrome inspector window ▸ Source tab' + + +#### Using SuperDevMode with Eclipse : + +- Install the plugin from http://sdbg.github.io/p2 +- Start the server and Super Dev Mode as mentioned above +- Create a new launch configuration in Eclipse + - Type is "Launch Chrome" + - http://localhost:8080/UI/?superdevmode +- Launch the new configuration in debug mode +- Now breakpoints in eclipse can be set \ No newline at end of file From 2bf328402cbcb57fbbafc060a2947be4f1d63e6b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 11 Apr 2016 12:41:16 +0200 Subject: [PATCH 114/344] Send DMF message only in case of DMF sim. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/simulator/SimulationController.java | 5 ++++- .../java/org/eclipse/hawkbit/simulator/SimulatorStartup.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationController.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/SimulationController.java index 426860d8b..649d88477 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,7 +86,10 @@ public class SimulationController { final String deviceId = name + i; repository.add(deviceFactory.createSimulatedDevice(deviceId, tenant, protocol, pollDelay, new URL(endpoint), gatewayToken)); - spSenderService.createOrUpdateThing(tenant, deviceId); + + 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 60f3055bd..b772bae1f 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,6 +11,7 @@ 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; @@ -52,7 +53,9 @@ public class SimulatorStartup implements ApplicationListener Date: Mon, 11 Apr 2016 15:05:02 +0200 Subject: [PATCH 115/344] Fix null handling for all drag and drop table Signed-off-by: SirWayne --- .../footer/SMDeleteActionsLayout.java | 13 ++-- .../ui/common/table/AbstractTable.java | 25 +++++++ .../dstable/DistributionSetTable.java | 13 ++-- .../footer/DSDeleteActionsLayout.java | 21 ++---- .../management/dstable/DistributionTable.java | 14 ++-- .../event/DistributionTagDropEvent.java | 21 +++--- .../footer/DeleteActionsLayout.java | 69 ++++++++----------- .../management/targettable/TargetTable.java | 11 +-- .../targettable/TargetTableHeader.java | 12 +--- .../targettag/TargetTagFilterButtons.java | 39 +++++------ 10 files changed, 105 insertions(+), 133 deletions(-) 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 ee2fc356f..4cb28c2c3 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 @@ -8,16 +8,15 @@ */ package org.eclipse.hawkbit.ui.artifacts.footer; -import java.util.HashSet; import java.util.Set; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.artifacts.event.UploadViewAcceptCriteria; 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.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventScope; @@ -155,13 +154,9 @@ public class SMDeleteActionsLayout extends AbstractDeleteActionsLayout { private void addToDeleteList(final Table sourceTable, final TableTransferable transferable) { @SuppressWarnings("unchecked") - final Set swModuleSelected = (Set) sourceTable.getValue(); - final Set swModuleIdNameSet = new HashSet<>(); - if (!swModuleSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { - swModuleIdNameSet.add((Long) transferable.getData(SPUIDefinitions.ITEMID)); - } else { - swModuleIdNameSet.addAll(swModuleSelected); - } + final AbstractTable swTable = (AbstractTable) sourceTable; + final Set swModuleIdNameSet = swTable.getDeletedEntityByTransferable(transferable); + swModuleIdNameSet.forEach(id -> { final String swModuleName = (String) sourceTable.getContainerDataSource().getItem(id) .getItemProperty(SPUILabelDefinitions.NAME_VERSION).getValue(); 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 eb1951d27..0737f42c8 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 @@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.common.table; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -231,6 +232,30 @@ public abstract class AbstractTable extends Table { } } + /** + * Return the entity which should be deleted by a transferable + * + * @param transferable + * the table transferable + * @return set of entities id which will deleted + */ + @SuppressWarnings("unchecked") + public Set getDeletedEntityByTransferable(final TableTransferable transferable) { + final Set selectedEntities = (Set) getTableValue(this); + final Set ids = new HashSet<>(); + final Object tranferableData = transferable.getData(SPUIDefinitions.ITEMID); + if (tranferableData == null) { + return ids; + } + + if (!selectedEntities.contains(tranferableData)) { + ids.add((I) tranferableData); + } else { + ids.addAll(selectedEntities); + } + return ids; + } + protected abstract E findEntityByTableValue(I lastSelectedId); protected abstract void publishEntityAfterValueChange(E selectedLastEntity); 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 1cd89b30f..b5d614243 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 @@ -29,6 +29,7 @@ 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.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.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; @@ -208,17 +209,11 @@ public class DistributionSetTable extends AbstractNamedVersionTable softwareModuleSelected = (Set) source.getValue(); - final Set softwareModulesIdList = new HashSet<>(); - - if (!softwareModuleSelected.contains(transferable.getData("itemId"))) { - softwareModulesIdList.add((Long) transferable.getData("itemId")); - } else { - softwareModulesIdList.addAll(softwareModuleSelected); - } + final AbstractTable source = (AbstractTable) transferable.getSourceComponent(); + final Set softwareModulesIdList = source.getDeletedEntityByTransferable(transferable); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); 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 dba8155db..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 @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleIdName; import org.eclipse.hawkbit.ui.common.footer.AbstractDeleteActionsLayout; +import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.distributions.event.DistributionsUIEvent; import org.eclipse.hawkbit.ui.distributions.event.DistributionsViewAcceptCriteria; import org.eclipse.hawkbit.ui.distributions.event.DragEvent; @@ -188,13 +189,8 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { private void addInDeleteDistributionList(final Table sourceTable, final TableTransferable transferable) { @SuppressWarnings("unchecked") - final Set distSelected = (Set) sourceTable.getValue(); - final Set distributionIdNameSet = new HashSet<>(); - if (!distSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { - distributionIdNameSet.add((DistributionSetIdName) transferable.getData(SPUIDefinitions.ITEMID)); - } else { - distributionIdNameSet.addAll(distSelected); - } + final AbstractTable table = (AbstractTable) sourceTable; + final Set distributionIdNameSet = table.getDeletedEntityByTransferable(transferable); /* * Flags to identify whether all dropped distributions are already in * the deleted list (or) some distributions are already in the deleted @@ -224,15 +220,10 @@ public class DSDeleteActionsLayout extends AbstractDeleteActionsLayout { } private void addToSWDeleteList(final Table sourceTable, final TableTransferable transferable) { - @SuppressWarnings("unchecked") - final Set swModuleSelected = (Set) sourceTable.getValue(); - final Set swModuleIdNameSet = new HashSet<>(); - if (!swModuleSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { - swModuleIdNameSet.add((Long) transferable.getData(SPUIDefinitions.ITEMID)); - } else { - swModuleIdNameSet.addAll(swModuleSelected); - } + final AbstractTable swTable = (AbstractTable) sourceTable; + final Set swModuleIdNameSet = swTable.getDeletedEntityByTransferable(transferable); + swModuleIdNameSet.forEach(id -> { final String swModuleName = (String) sourceTable.getContainerDataSource().getItem(id) .getItemProperty(SPUILabelDefinitions.NAME_VERSION).getValue(); 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 1b856277e..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 @@ -26,6 +26,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetIdName; 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.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent; @@ -350,17 +351,12 @@ public class DistributionTable extends AbstractNamedVersionTable targetsSelected = getTableValue(source); - final Set targetDetailsList = new HashSet<>(); - - if (!targetsSelected.contains(transferable.getData("itemId"))) { - targetDetailsList.add((TargetIdName) transferable.getData("itemId")); - } else { - targetDetailsList.addAll(targetsSelected); - } + final AbstractTable source = (AbstractTable) transferable + .getSourceComponent(); + final Set targetDetailsList = source.getDeletedEntityByTransferable(transferable); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); diff --git a/hawkbit-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 index 5b1e09282..97ba7ea6c 100644 --- a/hawkbit-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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.event; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -17,6 +16,7 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; import org.eclipse.hawkbit.repository.model.DistributionSetTagAssignmentResult; +import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.management.state.DistributionTableFilters; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; @@ -127,28 +127,25 @@ public class DistributionTagDropEvent implements DropHandler { return true; } + @SuppressWarnings("unchecked") private void processDistributionDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); - final Table source = transferable.getSourceComponent(); + final AbstractTable source = (AbstractTable) transferable + .getSourceComponent(); - @SuppressWarnings("unchecked") - final Set distSelected = (Set) source.getValue(); - final Set distributionList = new HashSet<>(); - if (!distSelected.contains(transferable.getData(ITEMID))) { - distributionList.add(((DistributionSetIdName) transferable.getData(ITEMID)).getId()); - } else { - distributionList.addAll(distSelected.stream().map(t -> t.getId()).collect(Collectors.toList())); - } + final Set distSelected = source.getDeletedEntityByTransferable(transferable); + final Set distributionList = distSelected.stream().map(entity -> entity.getId()) + .collect(Collectors.toSet()); final String distTagName = HawkbitCommonUtil.removePrefix(targetDetails.getTarget().getId(), SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS); final List tagsClickedList = distFilterParameters.getDistSetTags(); - final DistributionSetTagAssignmentResult result = distributionSetManagement.toggleTagAssignment(distributionList, - distTagName); + final DistributionSetTagAssignmentResult result = distributionSetManagement + .toggleTagAssignment(distributionList, distTagName); notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(distTagName, result, i18n)); if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty()) { 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 678a5704f..0466e6076 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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.footer; -import java.util.HashSet; import java.util.Set; import org.eclipse.hawkbit.repository.TagManagement; @@ -257,15 +256,10 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } } + @SuppressWarnings("unchecked") private void addInDeleteDistributionList(final Table sourceTable, final TableTransferable transferable) { - final Set distSelected = AbstractTable.getTableValue(sourceTable); - final Set distributionIdNameSet = new HashSet<>(); - - if (!distSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { - distributionIdNameSet.add((DistributionSetIdName) transferable.getData(SPUIDefinitions.ITEMID)); - } else { - distributionIdNameSet.addAll(distSelected); - } + final AbstractTable distTable = (AbstractTable) sourceTable; + final Set distributionIdNameSet = distTable.getDeletedEntityByTransferable(transferable); final DistributionSetIdName dsInBulkUpload = managementUIState.getTargetTableFilters().getBulkUpload() .getDsNameAndVersion(); @@ -273,31 +267,31 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { distributionIdNameSet.remove(dsInBulkUpload); } - if (!distributionIdNameSet.isEmpty()) { - + if (distributionIdNameSet.isEmpty()) { + return; + } + /* + * Flags to identify whether all dropped distributions are already in + * the deleted list (or) some distributions are already in the deleted + * distribution list. + */ + final int existingDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); + managementUIState.getDeletedDistributionList().addAll(distributionIdNameSet); + final int newDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); + if (newDeletedDistributionsSize == existingDeletedDistributionsSize) { /* - * Flags to identify whether all dropped distributions are already - * in the deleted list (or) some distributions are already in the - * deleted distribution list. + * No new distributions are added, all distributions dropped now are + * already available in the delete list. Hence display warning + * message accordingly. */ - final int existingDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); - managementUIState.getDeletedDistributionList().addAll(distributionIdNameSet); - final int newDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); - if (newDeletedDistributionsSize == existingDeletedDistributionsSize) { - /* - * No new distributions are added, all distributions dropped now - * are already available in the delete list. Hence display - * warning message accordingly. - */ - notification.displayValidationError(i18n.get("message.targets.already.deleted")); - } else if (newDeletedDistributionsSize - existingDeletedDistributionsSize != distributionIdNameSet.size()) { - /* - * Not the all distributions dropped now are added to the delete - * list. There are some distributions are already there in the - * delete list. Hence display warning message accordingly. - */ - notification.displayValidationError(i18n.get("message.dist.deleted.pending")); - } + notification.displayValidationError(i18n.get("message.targets.already.deleted")); + } else if (newDeletedDistributionsSize - existingDeletedDistributionsSize != distributionIdNameSet.size()) { + /* + * Not the all distributions dropped now are added to the delete + * list. There are some distributions are already there in the + * delete list. Hence display warning message accordingly. + */ + notification.displayValidationError(i18n.get("message.dist.deleted.pending")); } } @@ -311,15 +305,10 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return false; } + @SuppressWarnings("unchecked") private void addInDeleteTargetList(final Table sourceTable, final TableTransferable transferable) { - final Set targetSelected = AbstractTable.getTableValue(sourceTable); - - final Set targetIdNameSet = new HashSet<>(); - if (!targetSelected.contains(transferable.getData(SPUIDefinitions.ITEMID))) { - targetIdNameSet.add((TargetIdName) transferable.getData(SPUIDefinitions.ITEMID)); - } else { - targetIdNameSet.addAll(targetSelected); - } + final AbstractTable targetTable = (AbstractTable) sourceTable; + final Set targetIdNameSet = targetTable.getDeletedEntityByTransferable(transferable); /* * Flags to identify whether all dropped targets are already in the 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 e73bf2e4a..1307e27d3 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 @@ -632,16 +632,11 @@ public class TargetTable extends AbstractTable implements return true; } + @SuppressWarnings("unchecked") private static Set getDraggedDistributionSet(final TableTransferable transferable, final Table source) { - final Set distSelected = getTableValue(source); - final Set distributionIdSet = new HashSet<>(); - if (!distSelected.contains(transferable.getData(ITEMID))) { - distributionIdSet.add((DistributionSetIdName) transferable.getData(ITEMID)); - } else { - distributionIdSet.addAll(distSelected); - } - return distributionIdSet; + final AbstractTable distTable = (AbstractTable) source; + return distTable.getDeletedEntityByTransferable(transferable); } private Boolean validateDragAndDropWrapper(final Component compsource) { 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 cb00c2338..158d57878 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 @@ -378,16 +378,10 @@ public class TargetTableHeader extends AbstractTableHeader { return isValid; } + @SuppressWarnings("unchecked") private Set getDropppedDistributionDetails(final TableTransferable transferable) { - final Set distSelected = AbstractTable.getTableValue(transferable.getSourceComponent()); - final Set distributionIdSet = new HashSet<>(); - if (!distSelected.contains(transferable.getData("itemId"))) { - distributionIdSet.add((DistributionSetIdName) transferable.getData("itemId")); - } else { - distributionIdSet.addAll(distSelected); - } - - return distributionIdSet; + final AbstractTable distTable = (AbstractTable) transferable.getSourceComponent(); + return distTable.getDeletedEntityByTransferable(transferable); } private void addFilterTextField(final DistributionSetIdName distributionSetIdName) { 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 c60ab37ca..671d332de 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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.targettag; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -212,36 +211,32 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { return true; } + @SuppressWarnings("unchecked") private void processTargetDrop(final DragAndDropEvent event) { - final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); - final Table source = transferable.getSourceComponent(); + final AbstractTable targetTable = (AbstractTable) transferable + .getSourceComponent(); - final Set targetSelected = AbstractTable.getTableValue(source); - final Set targetList = new HashSet<>(); - if (transferable.getData(ITEMID) != null) { - if (!targetSelected.contains(transferable.getData(ITEMID))) { - targetList.add(((TargetIdName) transferable.getData(ITEMID)).getControllerId()); - } else { - targetList.addAll(targetSelected.stream().map(t -> t.getControllerId()).collect(Collectors.toList())); - } + final Set targetSelected = targetTable.getDeletedEntityByTransferable(transferable); + final Set targetList = targetSelected.stream().map(t -> t.getControllerId()) + .collect(Collectors.toSet()); - final String targTagName = HawkbitCommonUtil.removePrefix(targetDetails.getTarget().getId(), - SPUIDefinitions.TARGET_TAG_ID_PREFIXS); + final String targTagName = HawkbitCommonUtil.removePrefix(targetDetails.getTarget().getId(), + SPUIDefinitions.TARGET_TAG_ID_PREFIXS); - final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); + final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); - final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); - notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, i18n)); + final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); + notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, i18n)); - if (result.getAssigned() >= 1 && managementUIState.getTargetTableFilters().isNoTagSelected()) { - eventBus.publish(this, ManagementUIEvent.ASSIGN_TARGET_TAG); - } - if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty() && tagsClickedList.contains(targTagName)) { - eventBus.publish(this, ManagementUIEvent.UNASSIGN_TARGET_TAG); - } + if (result.getAssigned() >= 1 && managementUIState.getTargetTableFilters().isNoTagSelected()) { + eventBus.publish(this, ManagementUIEvent.ASSIGN_TARGET_TAG); } + if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty() && tagsClickedList.contains(targTagName)) { + eventBus.publish(this, ManagementUIEvent.UNASSIGN_TARGET_TAG); + } + } private boolean validateIfSourceisTargetTable(final Table source) { From c4fd082098b01228cd0e719cd94743ac87b594bc Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 09:39:07 +0200 Subject: [PATCH 116/344] fix the lookup of artifacts with the same lookup key, e.g. SHA1 hash if multiple artifacts with key exists for different software modules Signed-off-by: Michael Hirsch --- .../amqp/AmqpMessageHandlerService.java | 14 +++-- .../repository/ControllerManagement.java | 27 +++++++++ .../specifications/ActionSpecifications.java | 60 +++++++++++++++++++ 3 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java 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 41e70f91f..e05ddf71d 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 @@ -166,6 +166,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final LocalArtifact localArtifact = findLocalArtifactByFileResource(fileResource); if (localArtifact == null) { + LOG.info("target {} requested file resource which does not exists to download", + secruityToken.getControllerId(), fileResource); throw new EntityNotFoundException(); } @@ -175,10 +177,14 @@ public class AmqpMessageHandlerService extends BaseAmqpService { // assigned to this controller. Otherwise no controllerId is set = // anonymous download if (secruityToken.getControllerId() != null) { - final Action action = controllerManagement.getActionForDownloadByTargetAndSoftwareModule( - secruityToken.getControllerId(), localArtifact.getSoftwareModule()); - LOG.info("Found action for download authentication request action: {}, resource: {}", action, - secruityToken.getFileResource()); + LOG.debug("no anonymous download request, doing authentication check for target {} and artifact {}", + secruityToken.getControllerId(), localArtifact); + if (!controllerManagement.hasTargetArtifactAssigned(secruityToken.getControllerId(), localArtifact)) { + LOG.info("target {} tried to download artifact {} which is not assigned to the target"); + throw new EntityNotFoundException(); + } + LOG.info("download security check for target {} and artifact {} granted", + secruityToken.getControllerId(), localArtifact); } final Artifact artifact = convertDbArtifact(artifactManagement.loadLocalArtifactBinary(localArtifact)); 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 0bb94bd72..9510ae899 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 @@ -28,12 +28,14 @@ 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; @@ -166,6 +168,31 @@ public class ControllerManagement { return action.get(0); } + /** + * Checks if a given target has currently or has even been assigned to the + * given artifact through the action history list. This can e.g. indicate if + * a target is allowed to download a given artifact because it has currently + * assigned or had ever been assigned to the target and so it's visible to a + * specific target e.g. for downloading. + * + * @param targetId + * the ID of the target to check + * @param localArtifact + * the artifact to verify if the given target had even been + * assigned to + * @return {@code true} if the given target has currently or had ever a + * 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.hasTargetArtifactAssigned(target, localArtifact)) > 0; + } + /** * Refreshes the time of the last time the controller has been connected to * the server. 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/specifications/ActionSpecifications.java new file mode 100644 index 000000000..ef8c97e22 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.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.repository.specifications; + +import javax.persistence.criteria.Join; +import javax.persistence.criteria.ListJoin; +import javax.persistence.criteria.SetJoin; + +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; + +/** + * Utility class for {@link Action}s {@link Specification}s. The class provides + * Spring Data JPQL Specifications. + * + */ +public class ActionSpecifications { + + private ActionSpecifications() { + // utility class + } + + /** + * Specification which joins all necessary tables to retrieve the dependency + * between a target and a local file assignment through the assigen action + * of the target. All actions are included, not only active actions. + * + * @param target + * the target to verfiy if the given artifact is currently + * assigned or had been assigned + * @param localArtifact + * the local artifact to check wherever the target had ever been + * assigned + * @return a specification to use with spring JPA + */ + public static Specification hasTargetArtifactAssigned(final Target target, + final LocalArtifact localArtifact) { + return (actionRoot, query, cb) -> { + final Join dsJoin = actionRoot.join(Action_.distributionSet); + final SetJoin modulesJoin = dsJoin.join(DistributionSet_.modules); + final ListJoin artifactsJoin = modulesJoin.join(SoftwareModule_.artifacts); + return cb.and(cb.equal(artifactsJoin.get(LocalArtifact_.id), localArtifact.getId()), + cb.equal(actionRoot.get(Action_.target), target)); + }; + } +} From 0b5286299c7a2453a635f8a7d64eac33cb99d46d Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 10:03:19 +0200 Subject: [PATCH 117/344] fix unit tests after changing the lookup way Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 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 930ca02ad..0faa0a8a6 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 @@ -313,11 +313,9 @@ public class AmqpMessageHandlerServiceTest { // mock final LocalArtifact localArtifactMock = mock(LocalArtifact.class); - final Action actionMock = mock(Action.class); final DbArtifact dbArtifactMock = mock(DbArtifact.class); when(artifactManagementMock.findFirstLocalArtifactsBySHA1(anyString())).thenReturn(localArtifactMock); - when(controllerManagementMock.getActionForDownloadByTargetAndSoftwareModule(anyObject(), anyObject())) - .thenReturn(actionMock); + when(controllerManagementMock.hasTargetArtifactAssigned(anyObject(), anyObject())).thenReturn(true); when(artifactManagementMock.loadLocalArtifactBinary(localArtifactMock)).thenReturn(dbArtifactMock); when(dbArtifactMock.getArtifactId()).thenReturn("artifactId"); when(dbArtifactMock.getSize()).thenReturn(1L); From b11a0bac5db51e38685d77ca15669e4042069ba4 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 12:18:59 +0200 Subject: [PATCH 118/344] reduce method cyclomatic complexity by extracting security check into own method Signed-off-by: Michael Hirsch --- .../amqp/AmqpMessageHandlerService.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) 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 e05ddf71d..47807cd4d 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 @@ -171,21 +171,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { throw new EntityNotFoundException(); } - // check action for this download purposes, the method will throw an - // EntityNotFoundException in case the controller is not allowed to - // download this file because it's not assigned to an action and not - // assigned to this controller. Otherwise no controllerId is set = - // anonymous download - if (secruityToken.getControllerId() != null) { - LOG.debug("no anonymous download request, doing authentication check for target {} and artifact {}", - secruityToken.getControllerId(), localArtifact); - if (!controllerManagement.hasTargetArtifactAssigned(secruityToken.getControllerId(), localArtifact)) { - LOG.info("target {} tried to download artifact {} which is not assigned to the target"); - throw new EntityNotFoundException(); - } - LOG.info("download security check for target {} and artifact {} granted", - secruityToken.getControllerId(), localArtifact); - } + checkIfArtifactIsAssignedToTarget(secruityToken, localArtifact); final Artifact artifact = convertDbArtifact(artifactManagement.loadLocalArtifactBinary(localArtifact)); if (artifact == null) { @@ -219,6 +205,25 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return getMessageConverter().toMessage(authentificationResponse, messageProperties); } + private void checkIfArtifactIsAssignedToTarget(final TenantSecurityToken secruityToken, + final LocalArtifact localArtifact) { + // check action for this download purposes, the method will throw an + // EntityNotFoundException in case the controller is not allowed to + // download this file because it's not assigned to an action and not + // assigned to this controller. Otherwise no controllerId is set = + // anonymous download + if (secruityToken.getControllerId() != null) { + LOG.debug("no anonymous download request, doing authentication check for target {} and artifact {}", + secruityToken.getControllerId(), localArtifact); + if (!controllerManagement.hasTargetArtifactAssigned(secruityToken.getControllerId(), localArtifact)) { + LOG.info("target {} tried to download artifact {} which is not assigned to the target"); + throw new EntityNotFoundException(); + } + LOG.info("download security check for target {} and artifact {} granted", secruityToken.getControllerId(), + localArtifact); + } + } + private LocalArtifact findLocalArtifactByFileResource(final FileResource fileResource) { if (fileResource.getSha1() != null) { return artifactManagement.findFirstLocalArtifactsBySHA1(fileResource.getSha1()); From d91922dc048cb3119561135ff60f0e9da8f24997 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 12 Apr 2016 13:37:07 +0200 Subject: [PATCH 119/344] Update the entity before call the super method Signed-off-by: SirWayne --- .../smtable/SoftwareModuleTable.java | 59 ++++++++----------- .../table/AbstractNamedVersionTable.java | 2 +- .../dstable/DistributionSetTable.java | 12 ++-- .../distributions/smtable/SwModuleTable.java | 20 ++++--- 4 files changed, 47 insertions(+), 46 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 f101c94a7..237634398 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 @@ -9,7 +9,6 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -25,7 +24,6 @@ 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.eclipse.hawkbit.ui.utils.TableColumn; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -44,6 +42,8 @@ import com.vaadin.ui.UI; /** * Header of Software module table. + * + * * */ @SpringComponent @@ -129,22 +129,6 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable getTableVisibleColumns() { - final List columnList = super.getTableVisibleColumns(); - if (!isMaximized()) { - return columnList; - } - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); - return columnList; + protected void updateEntity(final SoftwareModule baseEntity, final Item item) { + final String swNameVersion = HawkbitCommonUtil.concatStrings(":", baseEntity.getName(), + baseEntity.getVersion()); + item.getItemProperty(SPUILabelDefinitions.NAME_VERSION).setValue(swNameVersion); + item.getItemProperty("swId").setValue(baseEntity.getId()); + item.getItemProperty(SPUILabelDefinitions.VAR_VENDOR).setValue(baseEntity.getVendor()); + super.updateEntity(baseEntity, item); } @Override @@ -203,6 +180,22 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable Date: Tue, 12 Apr 2016 13:42:57 +0200 Subject: [PATCH 120/344] Update the entity before call the super method Signed-off-by: SirWayne --- .../smtable/SoftwareModuleTable.java | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 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 237634398..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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.artifacts.smtable; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.SoftwareManagement; @@ -24,6 +25,7 @@ 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.eclipse.hawkbit.ui.utils.TableColumn; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -42,8 +44,6 @@ import com.vaadin.ui.UI; /** * Header of Software module table. - * - * * */ @SpringComponent @@ -129,6 +129,22 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable getTableVisibleColumns() { + final List columnList = super.getTableVisibleColumns(); + if (!isMaximized()) { + return columnList; + } + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_VENDOR, i18n.get("header.vendor"), 0.1F)); + return columnList; + } + @Override protected DropHandler getTableDropHandler() { return new DropHandler() { @@ -180,22 +207,6 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable Date: Tue, 12 Apr 2016 14:35:59 +0200 Subject: [PATCH 121/344] source code improvements Signed-off-by: Michael Hirsch --- .../amqp/AmqpMessageHandlerService.java | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) 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 47807cd4d..994ef244a 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 @@ -205,23 +205,32 @@ public class AmqpMessageHandlerService extends BaseAmqpService { return getMessageConverter().toMessage(authentificationResponse, messageProperties); } + /** + * check action for this download purposes, the method will throw an + * EntityNotFoundException in case the controller is not allowed to download + * this file because it's not assigned to an action and not assigned to this + * controller. Otherwise no controllerId is set = anonymous download + * + * @param secruityToken + * the security token which holds the target ID to check on + * @param localArtifact + * the local artifact to verify if the given target is allowed to + * download this artifact + */ private void checkIfArtifactIsAssignedToTarget(final TenantSecurityToken secruityToken, final LocalArtifact localArtifact) { - // check action for this download purposes, the method will throw an - // EntityNotFoundException in case the controller is not allowed to - // download this file because it's not assigned to an action and not - // assigned to this controller. Otherwise no controllerId is set = - // anonymous download - if (secruityToken.getControllerId() != null) { - LOG.debug("no anonymous download request, doing authentication check for target {} and artifact {}", - secruityToken.getControllerId(), localArtifact); - if (!controllerManagement.hasTargetArtifactAssigned(secruityToken.getControllerId(), localArtifact)) { - LOG.info("target {} tried to download artifact {} which is not assigned to the target"); - throw new EntityNotFoundException(); - } - LOG.info("download security check for target {} and artifact {} granted", secruityToken.getControllerId(), - localArtifact); + final String controllerId = secruityToken.getControllerId(); + if (controllerId == null) { + LOG.info("anonymous download no authentication check for artifact {}", localArtifact); + return; } + LOG.debug("no anonymous download request, doing authentication check for target {} and artifact {}", + controllerId, localArtifact); + if (!controllerManagement.hasTargetArtifactAssigned(controllerId, localArtifact)) { + LOG.info("target {} tried to download artifact {} which is not assigned to the target"); + throw new EntityNotFoundException(); + } + LOG.info("download security check for target {} and artifact {} granted", controllerId, localArtifact); } private LocalArtifact findLocalArtifactByFileResource(final FileResource fileResource) { From cc8c6743415be5b01cd80cffd8da669611acd547 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 15:47:21 +0200 Subject: [PATCH 122/344] correct usage of logging, missing parameters Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 3 ++- 1 file changed, 2 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 994ef244a..2ee0a0f45 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 @@ -227,7 +227,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { LOG.debug("no anonymous download request, doing authentication check for target {} and artifact {}", controllerId, localArtifact); if (!controllerManagement.hasTargetArtifactAssigned(controllerId, localArtifact)) { - LOG.info("target {} tried to download artifact {} which is not assigned to the target"); + LOG.info("target {} tried to download artifact {} which is not assigned to the target", controllerId, + localArtifact); throw new EntityNotFoundException(); } LOG.info("download security check for target {} and artifact {} granted", controllerId, localArtifact); From 30e8230b8aaa55e1e3834c1d9eeed019454d5f99 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 15:48:19 +0200 Subject: [PATCH 123/344] correct usage of logging, missing parameters Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 2 +- 1 file changed, 1 insertion(+), 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 2ee0a0f45..447a8ffca 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 @@ -166,7 +166,7 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final LocalArtifact localArtifact = findLocalArtifactByFileResource(fileResource); if (localArtifact == null) { - LOG.info("target {} requested file resource which does not exists to download", + LOG.info("target {} requested file resource {} which does not exists to download", secruityToken.getControllerId(), fileResource); throw new EntityNotFoundException(); } From d903be57b7a9913c29db8e8729efa88f5fab4666 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 15:50:48 +0200 Subject: [PATCH 124/344] use correct mock parameters to ensure test Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java | 3 ++- 1 file changed, 2 insertions(+), 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 0faa0a8a6..19a7be3bc 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 @@ -315,7 +315,8 @@ public class AmqpMessageHandlerServiceTest { final LocalArtifact localArtifactMock = mock(LocalArtifact.class); final DbArtifact dbArtifactMock = mock(DbArtifact.class); when(artifactManagementMock.findFirstLocalArtifactsBySHA1(anyString())).thenReturn(localArtifactMock); - when(controllerManagementMock.hasTargetArtifactAssigned(anyObject(), anyObject())).thenReturn(true); + when(controllerManagementMock.hasTargetArtifactAssigned(securityToken.getControllerId(), localArtifactMock)) + .thenReturn(true); when(artifactManagementMock.loadLocalArtifactBinary(localArtifactMock)).thenReturn(dbArtifactMock); when(dbArtifactMock.getArtifactId()).thenReturn("artifactId"); when(dbArtifactMock.getSize()).thenReturn(1L); From d704ef99fd1a3ee0f8152f933ee7c9f8ed610901 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 12 Apr 2016 16:22:43 +0200 Subject: [PATCH 125/344] source code hygiene, better method naming and variable naming Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/repository/ControllerManagement.java | 2 +- .../repository/specifications/ActionSpecifications.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) 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 9510ae899..dc097a7e3 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 @@ -190,7 +190,7 @@ public class ControllerManagement { if (target == null) { return false; } - return actionRepository.count(ActionSpecifications.hasTargetArtifactAssigned(target, localArtifact)) > 0; + return actionRepository.count(ActionSpecifications.hasTargetAssignedArtifact(target, localArtifact)) > 0; } /** 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/specifications/ActionSpecifications.java index ef8c97e22..1ac3afb67 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java @@ -47,14 +47,14 @@ public class ActionSpecifications { * assigned * @return a specification to use with spring JPA */ - public static Specification hasTargetArtifactAssigned(final Target target, + public static Specification hasTargetAssignedArtifact(final Target target, final LocalArtifact localArtifact) { - return (actionRoot, query, cb) -> { + 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); - return cb.and(cb.equal(artifactsJoin.get(LocalArtifact_.id), localArtifact.getId()), - cb.equal(actionRoot.get(Action_.target), target)); + return criteriaBuilder.and(criteriaBuilder.equal(artifactsJoin.get(LocalArtifact_.id), localArtifact.getId()), + criteriaBuilder.equal(actionRoot.get(Action_.target), target)); }; } } From 0f0b9eab1f0f2b605a12ba1fb2d1ba443270f356 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 12 Apr 2016 18:09:27 +0200 Subject: [PATCH 126/344] 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 67fd24e66846a6f4d7e02a805a72773572ef07d4 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Wed, 13 Apr 2016 12:46:30 +0530 Subject: [PATCH 127/344] Rollout management issues Signed-off-by: venu1278 --- .../client/CustomObjectRendererConnector.java | 25 + .../client/LinkRendererConnector.java | 29 - .../client/renderers/CustomObject.java | 39 + .../renderers/CustomObjectRenederer.java | 52 + .../client/renderers/LinkRenderer.java | 42 - .../renderers/CustomObjectRenderer.java | 42 + .../renderers/LinkRenderer.java | 37 - .../ui/rollout/rollout/ProxyRollout.java | 194 +-- .../ui/rollout/rollout/RolloutBeanQuery.java | 4 +- .../ui/rollout/rollout/RolloutListGrid.java | 1116 +++++++++-------- .../rolloutgroup/ProxyRolloutGroup.java | 11 + .../rolloutgroup/RolloutGroupBeanQuery.java | 3 + .../rolloutgroup/RolloutGroupListGrid.java | 624 ++++----- .../themes/hawkbit/customstyles/rollout.scss | 18 +- 14 files changed, 1232 insertions(+), 1004 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java new file mode 100644 index 000000000..b209ab82c --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java @@ -0,0 +1,25 @@ +package org.eclipse.hawkbit.ui.customrenderers.client; + +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; + +import com.google.web.bindery.event.shared.HandlerRegistration; +import com.vaadin.client.connectors.ClickableRendererConnector; +import com.vaadin.client.renderers.ClickableRenderer.RendererClickHandler; +import com.vaadin.shared.ui.Connect; + +import elemental.json.JsonObject; + +@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer.class) +public class CustomObjectRendererConnector extends ClickableRendererConnector { + private static final long serialVersionUID = 7734682321931830566L; + + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObjectRenederer getRenderer() { + return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObjectRenederer) super.getRenderer(); + } + + @Override + protected HandlerRegistration addClickHandler( + RendererClickHandler handler) { + return getRenderer().addClickHandler(handler); + } +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java deleted file mode 100644 index bc48d64d7..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java +++ /dev/null @@ -1,29 +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.customrenderers.client; - -import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; - -import com.vaadin.client.connectors.ButtonRendererConnector; -import com.vaadin.shared.ui.Connect; - -/** - * - * A connector for {@link LinkRenderer}. - * - */ -@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer.class) -public class LinkRendererConnector extends ButtonRendererConnector { - private static final long serialVersionUID = 7987417436367399331L; - - @Override - public org.eclipse.hawkbit.ui.customrenderers.client.renderers.LinkRenderer getRenderer() { - return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.LinkRenderer) super.getRenderer(); - } -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java new file mode 100644 index 000000000..85b5d9404 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java @@ -0,0 +1,39 @@ +package org.eclipse.hawkbit.ui.customrenderers.client.renderers; + +import java.io.Serializable; + +public class CustomObject implements Serializable { + private static final long serialVersionUID = -5018181529953620263L; + + private String name; + + private String status; + + public CustomObject(){ + + } + + public CustomObject(String name, String status) { + super(); + this.name = name; + this.status = status; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getStatus() { + return status; + } + + + public void setStatus(String status) { + this.status = status; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java new file mode 100644 index 000000000..a6a527f2a --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java @@ -0,0 +1,52 @@ +package org.eclipse.hawkbit.ui.customrenderers.client.renderers; + +import com.google.gwt.core.shared.GWT; +import com.vaadin.client.renderers.ClickableRenderer; +import com.vaadin.client.ui.VButton; +import com.vaadin.client.widget.grid.RendererCellReference; + +public class CustomObjectRenederer extends ClickableRenderer { + + @Override + public VButton createWidget() { + VButton b = GWT.create(VButton.class); + b.addClickHandler(this); + b.setStylePrimaryName("v-nativebutton"); + return b; + } + + @Override + public void render(RendererCellReference cell, CustomObject text, VButton button) { + final String creating = "CREATING"; + button.setText(text.getName()); + applystyle(button); + // this is to allow the button to disappear, if the text is null + button.setVisible(text.getName() != null); + button.getElement().setId(new StringBuilder("link").append(".").append(text.getName()).toString()); + /* + * checking Rollout Status for applying button style. If Rollout status + * is not "CREATING", then the Rollout button is applying hyperlink + * style + */ + final boolean isStatusCreate = text.getStatus() != null && creating.equalsIgnoreCase(text.getStatus()); + if (isStatusCreate) { + button.addStyleName(getStyle("boldhide")); + button.setEnabled(false); + } else { + button.setEnabled(true); + } + } + + private void applystyle(VButton button) { + button.setStyleName(VButton.CLASSNAME); + button.addStyleName(getStyle("borderless")); + button.addStyleName(getStyle("small")); + button.addStyleName(getStyle("on-focus-no-border")); + button.addStyleName(getStyle("link")); + } + + private String getStyle(final String style) { + return new StringBuilder(style).append(" ").append(VButton.CLASSNAME).append("-").append(style).toString(); + } + +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java deleted file mode 100644 index 0abe4044b..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java +++ /dev/null @@ -1,42 +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.customrenderers.client.renderers; - -import com.google.gwt.user.client.ui.Button; -import com.vaadin.client.renderers.ButtonRenderer; -import com.vaadin.client.ui.VButton; -import com.vaadin.client.widget.grid.RendererCellReference; - -/** - * - * Renders link with provided text. - * - */ -public class LinkRenderer extends ButtonRenderer { - @Override - public void render(RendererCellReference cell, String text, Button button) { - button.setText(text); - applystyle(button); - // this is to allow the button to disappear, if the text is null - button.setVisible(text != null); - button.getElement().setId(new StringBuilder("link").append(".").append(text).toString()); - } - - private void applystyle(Button button) { - button.setStyleName(VButton.CLASSNAME); - button.addStyleName(getStyle("borderless")); - button.addStyleName(getStyle("small")); - button.addStyleName(getStyle("on-focus-no-border")); - button.addStyleName(getStyle("link")); - } - - 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/CustomObjectRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java new file mode 100644 index 000000000..c2a7606a3 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java @@ -0,0 +1,42 @@ +package org.eclipse.hawkbit.ui.customrenderers.renderers; + +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; + +import com.vaadin.ui.renderers.ClickableRenderer; + +import elemental.json.JsonValue; + +public class CustomObjectRenderer extends ClickableRenderer { + + /** + * + */ + private static final long serialVersionUID = -8754180585906263554L; + + /** + * Creates a new image renderer. + */ + public CustomObjectRenderer() { + super(CustomObject.class, null); + } + + public CustomObjectRenderer(Class presentationType) { + super(presentationType); + } + + /** + * Creates a new image renderer and adds the given click listener to it. + * + * @param listener + * the click listener to register + */ + public CustomObjectRenderer(RendererClickListener listener) { + this(); + addClickListener(listener); + } + + @Override + public JsonValue encode(CustomObject resource) { + return super.encode(resource, CustomObject.class); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java deleted file mode 100644 index d913ca380..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java +++ /dev/null @@ -1,37 +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.customrenderers.renderers; - -import com.vaadin.ui.renderers.ButtonRenderer; - -/** - * - * Renders link with provided text. - * - */ -public class LinkRenderer extends ButtonRenderer { - private static final long serialVersionUID = -1242995370043404892L; - - /** - * Intialise link renderer. - */ - public LinkRenderer() { - super(); - } - - /** - * Intialise link renderer with {@link RendererClickListener} - * - * @param listener - * RendererClickListener - */ - public LinkRenderer(RendererClickListener listener) { - super(listener); - } -} 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 b1309f8b9..36cb7ddee 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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; import com.vaadin.server.FontAwesome; @@ -18,113 +19,122 @@ import com.vaadin.server.FontAwesome; */ public class ProxyRollout extends Rollout { - private static final long serialVersionUID = 4539849939617681918L; + private static final long serialVersionUID = 4539849939617681918L; - private String distributionSetNameVersion; + private String distributionSetNameVersion; - private String createdDate; + private String createdDate; - private String modifiedDate; + private String modifiedDate; - private Long numberOfGroups; + private Long numberOfGroups; - private Boolean isActionRecieved = Boolean.FALSE; + private Boolean isActionRecieved = Boolean.FALSE; - private String totalTargetsCount; - - /** - * @return the distributionSetNameVersion - */ - public String getDistributionSetNameVersion() { - return distributionSetNameVersion; - } + private String totalTargetsCount; - /** - * @param distributionSetNameVersion - * the distributionSetNameVersion to set - */ - public void setDistributionSetNameVersion(final String distributionSetNameVersion) { - this.distributionSetNameVersion = distributionSetNameVersion; - } + private CustomObject customObject; - /** - * @return the numberOfGroups - */ - public Long getNumberOfGroups() { - return numberOfGroups; - } + public CustomObject getCustomObject() { + return customObject; + } - /** - * @param numberOfGroups - * the numberOfGroups to set - */ - public void setNumberOfGroups(final Long numberOfGroups) { - this.numberOfGroups = numberOfGroups; - } + public void setCustomObject(CustomObject customObject) { + this.customObject = customObject; + } - /** - * @return the createdDate - */ - public String getCreatedDate() { - return createdDate; - } + /** + * @return the distributionSetNameVersion + */ + public String getDistributionSetNameVersion() { + return distributionSetNameVersion; + } - /** - * @param createdDate - * the createdDate to set - */ - public void setCreatedDate(final String createdDate) { - this.createdDate = createdDate; - } + /** + * @param distributionSetNameVersion + * the distributionSetNameVersion to set + */ + public void setDistributionSetNameVersion(final String distributionSetNameVersion) { + this.distributionSetNameVersion = distributionSetNameVersion; + } - /** - * @return the modifiedDate - */ - public String getModifiedDate() { - return modifiedDate; - } + /** + * @return the numberOfGroups + */ + public Long getNumberOfGroups() { + return numberOfGroups; + } - /** - * @param modifiedDate - * the modifiedDate to set - */ - public void setModifiedDate(final String modifiedDate) { - this.modifiedDate = modifiedDate; - } + /** + * @param numberOfGroups + * the numberOfGroups to set + */ + public void setNumberOfGroups(final Long numberOfGroups) { + this.numberOfGroups = numberOfGroups; + } - /** - * @return the isActionRecieved - */ - public Boolean getIsActionRecieved() { - return isActionRecieved; - } + /** + * @return the createdDate + */ + public String getCreatedDate() { + return createdDate; + } - /** - * @param isActionRecieved - * the isActionRecieved to set - */ - public void setIsActionRecieved(final Boolean isActionRecieved) { - this.isActionRecieved = isActionRecieved; - } + /** + * @param createdDate + * the createdDate to set + */ + public void setCreatedDate(final String createdDate) { + this.createdDate = createdDate; + } - /** - * @return the totalTargetsCount - */ - public String getTotalTargetsCount() { - return totalTargetsCount; - } + /** + * @return the modifiedDate + */ + public String getModifiedDate() { + return modifiedDate; + } + + /** + * @param modifiedDate + * the modifiedDate to set + */ + public void setModifiedDate(final String modifiedDate) { + this.modifiedDate = modifiedDate; + } + + /** + * @return the isActionRecieved + */ + public Boolean getIsActionRecieved() { + return isActionRecieved; + } + + /** + * @param isActionRecieved + * the isActionRecieved to set + */ + public void setIsActionRecieved(final Boolean isActionRecieved) { + this.isActionRecieved = isActionRecieved; + } + + /** + * @return the totalTargetsCount + */ + public String getTotalTargetsCount() { + return totalTargetsCount; + } + + /** + * @param totalTargetsCount + * the totalTargetsCount to set + */ + public void setTotalTargetsCount(final String totalTargetsCount) { + this.totalTargetsCount = totalTargetsCount; + } + + public String getAction() { + return FontAwesome.CIRCLE_O.getHtml(); + } - /** - * @param totalTargetsCount - * the totalTargetsCount to set - */ - public void setTotalTargetsCount(final String totalTargetsCount) { - this.totalTargetsCount = totalTargetsCount; - } - - - public String getAction() { - return FontAwesome.CIRCLE_O.getHtml(); - } - } 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 5ab6f6a97..114d2e432 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 @@ -17,6 +17,7 @@ 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; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -130,7 +131,8 @@ public class RolloutBeanQuery extends AbstractBeanQuery { proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); - + proxyRollout.setCustomObject(new CustomObject(rollout.getName(), rollout.getStatus().toString())); + final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); 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 9151f3932..6cf781c4b 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 @@ -25,9 +25,10 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; -import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -58,6 +59,7 @@ import com.vaadin.server.AbstractClientConnector; 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.UI; import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; @@ -72,524 +74,598 @@ import com.vaadin.ui.renderers.HtmlRenderer; @ViewScope public class RolloutListGrid extends AbstractGrid { - private static final long serialVersionUID = 4060904914954370524L; - - 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"; - - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient RolloutManagement rolloutManagement; - - @Autowired - private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; - - @Autowired - private UINotification uiNotification; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Autowired - private transient SpPermissionChecker permissionChecker; - - private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - switch (event) { - case FILTER_BY_TEXT: - case CREATE_ROLLOUT: - case UPDATE_ROLLOUT: - case SHOW_ROLLOUTS: - refreshGrid(); - break; - default: - return; - } - } - - /** - * Handles the RolloutChangeEvent to refresh the item in the grid. - * - * @param rolloutChangeEvent - * the event which contains the rollout which has been changed - */ - @SuppressWarnings("unchecked") - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { - if (!rolloutUIState.isShowRollOuts()) { - return; - } - final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); - final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); - if (item == null) { - return; - } - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); - final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); - if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) - .setValue(Long.valueOf(rollout.getRolloutGroups().size())); - } - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } - - @Override - protected void addContainerProperties() { - final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); - - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Integer.class, 0, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - 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); - - } - - @Override - protected void setColumnExpandRatio() { - getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - - 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); - - setFrozenColumnCount(getColumns().size()); - } - - @Override - protected void setColumnHeaderNames() { - getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption(i18n.get("header.name")); - 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")); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); - getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - 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")); - } - - @Override - protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; - } - - @Override - protected void setColumnProperties() { - List columnList = new ArrayList<>(); - columnList.add(SPUILabelDefinitions.VAR_NAME); - columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - 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(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); - alignColumns(); - } - - @Override - protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - - } - - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } - - @Override - protected void addColumnRenderes() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new TotalTargetCountStatusConverter()); - - createRolloutStatusToFontMap(); - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); - - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); - } - - private void createRolloutStatusToFontMap() { - statusIconMap.put(RolloutStatus.FINISHED, - new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); - statusIconMap.put(RolloutStatus.PAUSED, - new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); - statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); - statusIconMap.put(RolloutStatus.READY, - new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); - statusIconMap.put(RolloutStatus.STOPPED, - new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); - statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); - statusIconMap.put(RolloutStatus.ERROR_CREATING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.ERROR_STARTING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - } - - private void alignColumns() { - setCellStyleGenerator(new CellStyleGenerator() { - private static final long serialVersionUID = 5573570647129792429L; - - @Override - public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; - if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { - return "centeralign"; - } - return null; - } - }); - } - - private void onClickOfRolloutName(RendererClickEvent event) { - rolloutUIState.setRolloutId((long) event.getItemId()); - final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutUIState.setRolloutName(rolloutName); - String ds = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); - rolloutUIState.setRolloutDistributionSet(ds); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); - } - - private void onClickOfActionBtn(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(event -> menuItemClicked(event)); - 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()) { - return; - } - final ContextMenuItem cancelItem = context.addItem(UPDATE_OPTION); - cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); - } - - private String convertRolloutStatusToString(final RolloutStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); - if (statusFontIcon == null) { - return null; - } - String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); - } - - 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; - } - } - - 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); - } - - private void refreshGrid() { - ((LazyQueryContainer) getContainerDataSource()).refresh(); - } - - public final class FontIconGenerator extends PropertyValueGenerator { - - private static final long serialVersionUID = 2544026030795375748L; - private final FontAwesome fontIcon; - - public FontIconGenerator(FontAwesome icon) { - this.fontIcon = icon; - } - - @Override - public String getValue(Item item, Object itemId, Object propertyId) { - return fontIcon.getHtml(); - } - - @Override - public Class getType() { - return String.class; - } - } - - private String getDescription(CellReference cell) { - if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { - return cell.getProperty().getValue().toString().toLowerCase(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); - } else if (SPUILabelDefinitions.VAR_NAME.equals(cell.getPropertyId())) { - return cell.getProperty().getValue().toString(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } - return null; - } - - enum ACTION { - PAUSE, RESUME, START, UPDATE - } - - /** - * Represents data of context menu item. - * - */ - public static class ContextMenuData { - - private Long rolloutId; - - private ACTION action; - - /** - * Set rollout if and action. - * - * @param rolloutId - * id of rollout - * @param action - * user action {@link ACTION} - */ - public ContextMenuData(final Long rolloutId, final ACTION action) { - this.action = action; - this.rolloutId = rolloutId; - } - - /** - * @return the rolloutId - */ - public Long getRolloutId() { - return rolloutId; - } - - /** - * @param rolloutId - * the rolloutId to set - */ - public void setRolloutId(final Long rolloutId) { - this.rolloutId = rolloutId; - } - - /** - * @return the action - */ - public ACTION getAction() { - return action; - } - - /** - * @param action - * the action to set - */ - public void setAction(final ACTION action) { - this.action = action; - } - } - - /** - * - * Converter to convert {@link RolloutStatus} to string. - * - */ - class RolloutStatusConverter implements Converter { - - private static final long serialVersionUID = -1217685750825632678L; - - @Override - public RolloutStatus convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final RolloutStatus value, final Class targetType, - final Locale locale) { - return convertRolloutStatusToString(value); - } - - @Override - public Class getModelType() { - return RolloutStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - } - - /** - * Converter to convert {@link TotalTargetCountStatus} to formatted string - * with status and count details. - * - */ - class TotalTargetCountStatusConverter implements Converter { - - private static final long serialVersionUID = -5794528427855153924L; - - @Override - public TotalTargetCountStatus convertToModel(String value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - return null; - } - - @Override - public String convertToPresentation(TotalTargetCountStatus value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } - - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - } + private static final long serialVersionUID = 4060904914954370524L; + + 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"; + + @Autowired + private I18N i18n; + + @Autowired + private transient EventBus.SessionEventBus eventBus; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); + + @Override + @PostConstruct + protected void init() { + super.init(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + switch (event) { + case FILTER_BY_TEXT: + case CREATE_ROLLOUT: + case UPDATE_ROLLOUT: + case SHOW_ROLLOUTS: + refreshGrid(); + break; + default: + return; + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the grid. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + if (!rolloutUIState.isShowRollOuts()) { + return; + } + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + if (item == null) { + return; + } + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + item.getItemProperty("customObject").setValue(new CustomObject(rollout.getName(), rollout.getStatus().toString())); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + /*if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + }*/ + final int groupsCreated = rollout.getRolloutGroupsCreated(); + if (groupsCreated != 0) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); + } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } + + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } + + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, null, false, false); + // rolloutGridContainer.addContainerProperty("yes", Boolean.class, null, + // false, false); + // rolloutGridContainer.addContainerProperty("custom", + // CustomValue.class, + // null, false, false); + // rolloutGridContainer.addContainerProperty("buttonText", String.class, + // "", false, false); + + rolloutGridContainer.addContainerProperty("customObject", CustomObject.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + 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); + + } + + @Override + protected void setColumnExpandRatio() { + getColumn("customObject").setMinimumWidth(40); + getColumn("customObject").setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); + + 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + + setFrozenColumnCount(getColumns().size()); + } + + @Override + protected void setColumnHeaderNames() { + // getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption("name"); + getColumn("customObject").setHeaderCaption("Name"); + 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")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + 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")); + } + + @Override + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; + } + + @Override + protected void setColumnProperties() { + List columnList = new ArrayList<>(); + // columnList.add("yes"); + columnList.add("customObject"); + // columnList.add(SPUILabelDefinitions.VAR_NAME); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + 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(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } + + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } + + @Override + protected void addColumnRenderes() { + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), + new TotalTargetGroupsConverter()); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); + + createRolloutStatusToFontMap(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); + + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + + /////////////// + // getColumn("customObject").setRenderer(new CustomObjectRenderer(event + // -> onClickOfRolloutName(event))); + CustomObjectRenderer cor = new CustomObjectRenderer(CustomObject.class); + cor.addClickListener(event -> onClickOfRolloutName(event)); + getColumn("customObject").setRenderer(cor); + + /////////////////////// + + // getColumn("custom").setRenderer(new CheckboxRenderer()); + // getColumn("buttonText").setRenderer(new + // MyButtonRenderer(event->x())); + } + + private void createRolloutStatusToFontMap() { + statusIconMap.put(RolloutStatus.FINISHED, + new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); + statusIconMap.put(RolloutStatus.PAUSED, + new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); + statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); + statusIconMap.put(RolloutStatus.READY, + new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); + statusIconMap.put(RolloutStatus.STOPPED, + new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); + statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); + statusIconMap.put(RolloutStatus.ERROR_CREATING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.ERROR_STARTING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + } + + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; + + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); + } + + private void onClickOfRolloutName(RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + + // final String rolloutName = + CustomObject customObject = (CustomObject) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty("customObject").getValue(); + rolloutUIState.setRolloutName(customObject.getName()); + String ds = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); + rolloutUIState.setRolloutDistributionSet(ds); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); + } + + private void onClickOfActionBtn(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(event -> menuItemClicked(event)); + 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()) { + return; + } + final ContextMenuItem cancelItem = context.addItem(UPDATE_OPTION); + cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); + } + + private String convertRolloutStatusToString(final RolloutStatus value) { + StatusFontIcon statusFontIcon = statusIconMap.get(value); + if (statusFontIcon == null) { + return null; + } + String codePoint = statusFontIcon.getFontIcon() != null + ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + } + + 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; + } + } + + 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); + } + + private void refreshGrid() { + ((LazyQueryContainer) getContainerDataSource()).refresh(); + } + + public final class FontIconGenerator extends PropertyValueGenerator { + + private static final long serialVersionUID = 2544026030795375748L; + private final FontAwesome fontIcon; + + public FontIconGenerator(FontAwesome icon) { + this.fontIcon = icon; + } + + @Override + public String getValue(Item item, Object itemId, Object propertyId) { + return fontIcon.getHtml(); + } + + @Override + public Class getType() { + return String.class; + } + } + + private String getDescription(CellReference cell) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString().toLowerCase(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if ("customObject".equals(cell.getPropertyId())) { + return ((CustomObject) cell.getProperty().getValue()).getName(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } + return null; + } + + enum ACTION { + PAUSE, RESUME, START, UPDATE + } + + /** + * Represents data of context menu item. + * + */ + public static class ContextMenuData { + + private Long rolloutId; + + private ACTION action; + + /** + * Set rollout if and action. + * + * @param rolloutId + * id of rollout + * @param action + * user action {@link ACTION} + */ + public ContextMenuData(final Long rolloutId, final ACTION action) { + this.action = action; + this.rolloutId = rolloutId; + } + + /** + * @return the rolloutId + */ + public Long getRolloutId() { + return rolloutId; + } + + /** + * @param rolloutId + * the rolloutId to set + */ + public void setRolloutId(final Long rolloutId) { + this.rolloutId = rolloutId; + } + + /** + * @return the action + */ + public ACTION getAction() { + return action; + } + + /** + * @param action + * the action to set + */ + public void setAction(final ACTION action) { + this.action = action; + } + } + + /** + * + * Converter to convert {@link RolloutStatus} to string. + * + */ + class RolloutStatusConverter implements Converter { + + private static final long serialVersionUID = -1217685750825632678L; + + @Override + public RolloutStatus convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, final Class targetType, + final Locale locale) { + return convertRolloutStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * Converter to convert {@link TotalTargetCountStatus} to formatted string + * with status and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { + + private static final long serialVersionUID = -5794528427855153924L; + + @Override + public TotalTargetCountStatus convertToModel(String value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(TotalTargetCountStatus value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * + * Converter to convert 0 to empty , if total target groups is zero. + * + */ + + class TotalTargetGroupsConverter implements Converter { + + private static final long serialVersionUID = 6589305227035220369L; + + @Override + public Long convertToModel(String value, Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(Long value, Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + if (value == 0) { + return ""; + } + return value.toString(); + } + + @Override + public Class getModelType() { + return Long.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + } } 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 bb802c123..3033ff02c 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 @@ -9,6 +9,7 @@ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; /** * Proxy rollout group with suctome properties. @@ -39,6 +40,16 @@ public class ProxyRolloutGroup extends RolloutGroup { private Boolean isActionRecieved = Boolean.FALSE; private String totalTargetsCount; + + private CustomObject customObject; + + public CustomObject getCustomObject() { + return customObject; + } + + public void setCustomObject(CustomObject customObject) { + this.customObject = customObject; + } /** * @return the createdDate diff --git a/hawkbit-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 index 0dabb18fc..1902a7d9d 100644 --- a/hawkbit-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 @@ -15,6 +15,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -121,6 +122,8 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery proxyRolloutGroup.setSuccessCondition(rolloutGroup.getSuccessCondition()); proxyRolloutGroup.setSuccessConditionExp(rolloutGroup.getSuccessConditionExp()); proxyRolloutGroup.setFinishedPercentage(calculateFinishedPercentage(rolloutGroup)); + + proxyRolloutGroup.setCustomObject(new CustomObject(rolloutGroup.getName(), null)); proxyRolloutGroup.setTotalTargetsCount(String.valueOf(rolloutGroup.getTotalTargets())); proxyRolloutGroup.setTotalTargetCountStatus(rolloutGroup.getTotalTargetCountStatus()); 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 44d945efd..4fc023759 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 @@ -20,13 +20,15 @@ import javax.annotation.PreDestroy; 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.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; -import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -47,6 +49,7 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; +import com.vaadin.data.util.GeneratedPropertyContainer; import com.vaadin.data.util.converter.Converter; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; @@ -62,335 +65,392 @@ import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope public class RolloutGroupListGrid extends AbstractGrid { - private static final long serialVersionUID = 4060904914954370524L; + private static final long serialVersionUID = 4060904914954370524L; - @Autowired - private I18N i18n; + @Autowired + private I18N i18n; - @Autowired - private transient EventBus.SessionEventBus eventBus; + @Autowired + private transient EventBus.SessionEventBus eventBus; - @Autowired - private transient RolloutGroupManagement rolloutGroupManagement; + @Autowired + private transient RolloutGroupManagement rolloutGroupManagement; - @Autowired - private transient RolloutUIState rolloutUIState; + @Autowired + private transient RolloutManagement rolloutManagement; - @Autowired - private transient SpPermissionChecker permissionChecker; + @Autowired + private transient RolloutUIState rolloutUIState; - private transient Map statusIconMap = new EnumMap<>(RolloutGroupStatus.class); + @Autowired + private transient SpPermissionChecker permissionChecker; - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } + private transient Map statusIconMap = new EnumMap<>(RolloutGroupStatus.class); - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } + private final String name = "name"; - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - if (RolloutEvent.SHOW_ROLLOUT_GROUPS != event) { - return; - } - ((LazyQueryContainer) getContainerDataSource()).refresh(); - } + @Override + @PostConstruct + protected void init() { + super.init(); + eventBus.subscribe(this); + } - /** - * - * Handles the RolloutGroupChangeEvent to refresh the item in the grid. - * - * - * @param rolloutGroupChangeEvent - * the event which contains the rollout group which has been - * change - */ - @SuppressWarnings("unchecked") - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutGroupChangeEvent rolloutGroupChangeEvent) { - if (!rolloutUIState.isShowRolloutGroups()) { - return; - } - final RolloutGroup rolloutGroup = rolloutGroupManagement - .findRolloutGroupWithDetailedStatus(rolloutGroupChangeEvent.getRolloutGroupId()); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutGroup.getId()); - if (item == null) { - return; - } - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rolloutGroup.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) - .setValue(rolloutGroup.getTotalTargetCountStatus()); - } + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutGroupBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + if (RolloutEvent.SHOW_ROLLOUT_GROUPS != event) { + return; + } + getLazyQueryContainer().refresh(); + } - @Override - protected void addContainerProperties() { - final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE, - String.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, String.class, - null, false, false); + /** + * + * Handles the RolloutGroupChangeEvent to refresh the item in the grid. + * + * + * @param rolloutGroupChangeEvent + * the event which contains the rollout group which has been + * change + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutGroupChangeEvent rolloutGroupChangeEvent) { + if (!rolloutUIState.isShowRolloutGroups()) { + return; + } + final RolloutGroup rolloutGroup = rolloutGroupManagement + .findRolloutGroupWithDetailedStatus(rolloutGroupChangeEvent.getRolloutGroupId()); + final LazyQueryContainer rolloutContainer = getLazyQueryContainer(); + final Item item = rolloutContainer.getItem(rolloutGroup.getId()); + if (item == null) { + return; + } + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rolloutGroup.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setValue(rolloutGroup.getTotalTargetCountStatus()); + item.getItemProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) + .setValue(calculateFinishedPercentage(rolloutGroup)); + } - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD, String.class, null, - false, false); + private String calculateFinishedPercentage(final RolloutGroup rolloutGroup) { + return HawkbitCommonUtil.formattingFinishedPercentage(rolloutGroup, + rolloutManagement.getFinishedPercentForRunningGroup(rolloutGroup.getRollout().getId(), rolloutGroup)); + } - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutGroupBeanQuery.class); + return new GeneratedPropertyContainer(new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf)); + } - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, - TotalTargetCountStatus.class, null, false, false); + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGroupGridContainer = getLazyQueryContainer(); + rolloutGroupGridContainer.addContainerProperty("customObject", CustomObject.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, + false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE, + String.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, String.class, + null, false, false); - } + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD, String.class, null, + false, false); - @Override - protected void setColumnExpandRatio() { - getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(200); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, + false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, + TotalTargetCountStatus.class, null, false, false); + // addGeneratedProperties(); + } - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); + /* + * private void addGeneratedProperties() { GeneratedPropertyContainer + * generatedPropertyContainer = (GeneratedPropertyContainer) + * getContainerDataSource(); // + * generatedPropertyContainer.addGeneratedProperty(SPUILabelDefinitions. + * VAR_NAME, // new PropertyValueGenerator() { // + * private static final long serialVersionUID = -9203261132281441831L; // + * // @Override // public CustomRollOutDetails getValue(Item item, Object + * itemId, Object // propertyId) { // CustomRollOutDetails + * customRollOutDetails = new // CustomRollOutDetails(); // + * customRollOutDetails.setRolloutName( // (String) // + * item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue().toString() + * ); // return customRollOutDetails; // } // // @Override // public + * Class getType() { // return + * CustomRollOutDetails.class; // } // }); + * + * } + */ - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMaximumWidth(100); + @Override + protected void setColumnExpandRatio() { + /*getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(200);*/ + + getColumn("customObject").setMinimumWidth(40); + getColumn("customObject").setMaximumWidth(200); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMaximumWidth(100); - setFrozenColumnCount(7); - } + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMaximumWidth(100); - @Override - protected void setColumnHeaderNames() { - getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption(i18n.get("header.name")); - getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) - .setHeaderCaption(i18n.get("header.detail.status")); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) - .setHeaderCaption(i18n.get("header.rolloutgroup.installed.percentage")); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD) - .setHeaderCaption(i18n.get("header.rolloutgroup.threshold.error")); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD) - .setHeaderCaption(i18n.get("header.rolloutgroup.threshold")); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); - getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); - } + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); - @Override - protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; - } + setFrozenColumnCount(7); + } - @Override - protected void setColumnProperties() { - List columnList = new ArrayList<>(); - columnList.add(SPUILabelDefinitions.VAR_NAME); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); - columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE); - columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD); - columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD); - columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); - alignColumns(); - } + @Override + protected void setColumnHeaderNames() { + //getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption(i18n.get("header.name")); + getColumn("customObject").setHeaderCaption(i18n.get("header.name")); + getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) + .setHeaderCaption(i18n.get("header.rolloutgroup.installed.percentage")); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD) + .setHeaderCaption(i18n.get("header.rolloutgroup.threshold.error")); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD) + .setHeaderCaption(i18n.get("header.rolloutgroup.threshold")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); + } - @Override - protected void addColumnRenderes() { - createRolloutGroupStatusToFontMap(); - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), - new RolloutGroupStatusConverter()); - - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new TotalTargetCountStatusConverter()); - if (permissionChecker.hasRolloutTargetsReadPermission()) { - getColumn(SPUILabelDefinitions.VAR_NAME) - .setRenderer(new LinkRenderer(event -> onClickOfRolloutGroupName(event))); - } - } + @Override + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; + } - @Override - protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - } + @Override + protected void setColumnProperties() { + List columnList = new ArrayList<>(); + columnList.add("customObject"); + //columnList.add(SPUILabelDefinitions.VAR_NAME); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE); + columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD); + columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD); + columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } + @Override + protected void addColumnRenderes() { + createRolloutGroupStatusToFontMap(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), + new RolloutGroupStatusConverter()); - private void onClickOfRolloutGroupName(RendererClickEvent event) { - rolloutUIState - .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); - } + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); + if (permissionChecker.hasRolloutTargetsReadPermission()) { + /* + * getColumn(SPUILabelDefinitions.VAR_NAME) .setRenderer(new + * LinkRenderer(event -> onClickOfRolloutGroupName(event))); + */ + CustomObjectRenderer cor = new CustomObjectRenderer(CustomObject.class); + cor.addClickListener(event -> onClickOfRolloutGroupName(event)); + getColumn("customObject").setRenderer(cor); - private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { - StatusFontIcon statusFontIcon = statusIconMap.get(value); - if (statusFontIcon == null) { - return null; - } - String codePoint = statusFontIcon.getFontIcon() != null - ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + } + } - } + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + } - private void createRolloutGroupStatusToFontMap() { - statusIconMap.put(RolloutGroupStatus.FINISHED, - new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); - statusIconMap.put(RolloutGroupStatus.SCHEDULED, - new StatusFontIcon(FontAwesome.HOURGLASS_1, SPUIStyleDefinitions.STATUS_ICON_PENDING)); - statusIconMap.put(RolloutGroupStatus.RUNNING, - new StatusFontIcon(FontAwesome.ADJUST, SPUIStyleDefinitions.STATUS_ICON_YELLOW)); - statusIconMap.put(RolloutGroupStatus.READY, - new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); - statusIconMap.put(RolloutGroupStatus.ERROR, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - } + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } - private String getDescription(CellReference cell) { - if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { - return cell.getProperty().getValue().toString().toLowerCase(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); - } else if (SPUILabelDefinitions.VAR_NAME.equals(cell.getPropertyId())) { - return cell.getProperty().getValue().toString(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } - return null; - } + private void onClickOfRolloutGroupName(RendererClickEvent event) { + rolloutUIState + .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); + } - private void alignColumns() { - setCellStyleGenerator(new CellStyleGenerator() { - private static final long serialVersionUID = 5573570647129792429L; + private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { + StatusFontIcon statusFontIcon = statusIconMap.get(value); + if (statusFontIcon == null) { + return null; + } + String codePoint = statusFontIcon.getFontIcon() != null + ? Integer.toString(statusFontIcon.getFontIcon().getCodepoint()) : null; + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); - @Override - public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, - SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; - if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { - return "centeralign"; - } - return null; - } - }); - } + } - /** - * - * Converts {@link TotalTargetCountStatus} into formatted string with status - * and count details. - * - */ - class TotalTargetCountStatusConverter implements Converter { + private void createRolloutGroupStatusToFontMap() { + statusIconMap.put(RolloutGroupStatus.FINISHED, + new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); + statusIconMap.put(RolloutGroupStatus.SCHEDULED, + new StatusFontIcon(FontAwesome.HOURGLASS_1, SPUIStyleDefinitions.STATUS_ICON_PENDING)); + statusIconMap.put(RolloutGroupStatus.RUNNING, + new StatusFontIcon(FontAwesome.ADJUST, SPUIStyleDefinitions.STATUS_ICON_YELLOW)); + statusIconMap.put(RolloutGroupStatus.READY, + new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); + statusIconMap.put(RolloutGroupStatus.ERROR, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + } - private static final long serialVersionUID = -9205943894818450807L; + private String getDescription(CellReference cell) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString().toLowerCase(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if ("customObject".equals(cell.getPropertyId())) { + return ((CustomObject) cell.getProperty().getValue()).getName(); + // getNameToolTip(cell.getProperty().getValue().toString()); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } + return null; + } - @Override - public TotalTargetCountStatus convertToModel(String value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - return null; - } + private String getNameToolTip(final String text) { + String[] nameList = text.split(":"); + if (nameList[0].equalsIgnoreCase(name)) { + return nameList[1]; + } + return ""; + } - @Override - public String convertToPresentation(TotalTargetCountStatus value, Class targetType, - Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); + } - @Override - public Class getPresentationType() { - return String.class; - } - } + private LazyQueryContainer getLazyQueryContainer() { + return ((LazyQueryContainer) (((GeneratedPropertyContainer) getContainerDataSource()).getWrappedContainer())); + } - /** - * - * Converts {@link RolloutGroupStatus} to string. - * - */ - class RolloutGroupStatusConverter implements Converter { + /** + * + * Converts {@link TotalTargetCountStatus} into formatted string with status + * and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { - private static final long serialVersionUID = 5448062736373292820L; + private static final long serialVersionUID = -9205943894818450807L; - @Override - public RolloutGroupStatus convertToModel(final String value, - final Class targetType, final Locale locale) { - return null; - } + @Override + public TotalTargetCountStatus convertToModel(String value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } - @Override - public String convertToPresentation(final RolloutGroupStatus value, final Class targetType, - final Locale locale) { - return convertRolloutGroupStatusToString(value); - } + @Override + public String convertToPresentation(TotalTargetCountStatus value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } - @Override - public Class getModelType() { - return RolloutGroupStatus.class; - } + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } - @Override - public Class getPresentationType() { - return String.class; - } + @Override + public Class getPresentationType() { + return String.class; + } + } - } + /** + * + * Converts {@link RolloutGroupStatus} to string. + * + */ + class RolloutGroupStatusConverter implements Converter { + + private static final long serialVersionUID = 5448062736373292820L; + + @Override + public RolloutGroupStatus convertToModel(final String value, + final Class targetType, final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutGroupStatus value, final Class targetType, + final Locale locale) { + return convertRolloutGroupStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutGroupStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + } } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss index 712e04ec1..b9049068e 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss @@ -19,20 +19,32 @@ } } + .v-context-menu .v-context-menu-item-basic-icon-container{ height:0px !important; width:0px !important; } - .v-context-menu, .v-context-menu .v-context-menu-item-basic{ + .v-context-menu .v-context-menu-item-basic{ background-color: #feffff !important; border-radius: 4px; + font-family : $app-font-family; + font-size : $app-text-font-size; + font-weight : normal; + font-style : normal; } + + .v-context-menu{ + background-color: #feffff !important; + border-radius: 4px; + } + .v-context-menu .v-context-menu-item-basic:focus, .v-context-menu .v-context-menu-item-basic-submenu:focus, .v-context-menu .v-context-menu-item-basic-open { @include valo-gradient($color: $hawkbit-primary-color); background-color: $hawkbit-primary-color !important; color: #e8eef3; + height: 30px; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); } @@ -77,5 +89,9 @@ border-left: $v-grid-border-size solid $widget-border-color ; } + .v-button-boldhide{ + text-decoration:none; + } + } \ No newline at end of file From 5e879ed80e40ecbd2ac7966779e14165db6497ec Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 13 Apr 2016 13:00:23 +0200 Subject: [PATCH 128/344] Filter icon not centered Signed-off-by: Melanie Retter --- .../hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..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 @@ -290,7 +290,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button searchLayout.setSpacing(false); searchLayout.addComponents(validationIcon, queryTextField); searchLayout.addStyleName("custom-search-layout"); - searchLayout.setComponentAlignment(validationIcon, Alignment.MIDDLE_CENTER); + searchLayout.setComponentAlignment(validationIcon, Alignment.TOP_CENTER); final HorizontalLayout iconLayout = new HorizontalLayout(); iconLayout.setSizeUndefined(); From ee0fc266780c0090244c7cfcf5e24c31d0b875fd Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 13 Apr 2016 14:10:28 +0200 Subject: [PATCH 129/344] TTL Signed-off-by: SirWayne --- .../simulator/amqp/AmqpProperties.java | 14 ++++ .../hawkbit/amqp/AmqpConfiguration.java | 30 ++++---- .../amqp/AmqpDeadletterProperties.java | 69 +++++++++++++++++++ 3 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java index f58355980..8fba3ac5b 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/AmqpProperties.java @@ -39,6 +39,12 @@ public class AmqpProperties { */ private String deadLetterExchange = "simulator.deadletter"; + /** + * Message time to live (ttl) for the deadletter queue. Default ttl is 1 + * hour. + */ + private int deadLetterTtl = 60_000; + public String getReceiverConnectorQueueFromSp() { return receiverConnectorQueueFromSp; } @@ -70,4 +76,12 @@ public class AmqpProperties { public void setSenderForSpExchange(final String senderForSpExchange) { this.senderForSpExchange = senderForSpExchange; } + + public int getDeadLetterTtl() { + return deadLetterTtl; + } + + public void setDeadLetterTtl(final int deadLetterTtl) { + this.deadLetterTtl = deadLetterTtl; + } } 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 acbcb453b..1e25e3717 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,9 +8,6 @@ */ package org.eclipse.hawkbit.amqp; -import java.util.HashMap; -import java.util.Map; - import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; @@ -31,15 +28,29 @@ import org.springframework.context.annotation.Bean; * {@code amqp} to use a AMQP for communication with SP enabled devices. * */ -@EnableConfigurationProperties(AmqpProperties.class) +@EnableConfigurationProperties({ AmqpProperties.class, AmqpDeadletterProperties.class }) public class AmqpConfiguration { @Autowired protected AmqpProperties amqpProperties; + @Autowired + protected AmqpDeadletterProperties amqpDeadletterProperties; + @Autowired private ConnectionFactory connectionFactory; + // /** + // * Method to set the Jackson2JsonMessageConverter. + // * + // * @return the Jackson2JsonMessageConverter + // */ + // @Bean + // public RabbitAdmin rabbitAdmin(final RabbitAdmin rabbitAdmin) { + // rabbitAdmin.setIgnoreDeclarationExceptions(true); + // return rabbitAdmin; + // } + /** * Method to set the Jackson2JsonMessageConverter. * @@ -59,7 +70,8 @@ public class AmqpConfiguration { */ @Bean public Queue receiverQueue() { - return new Queue(amqpProperties.getReceiverQueue(), true, false, false, getDeadLetterExchangeArgs()); + return new Queue(amqpProperties.getReceiverQueue(), true, false, false, + amqpDeadletterProperties.getDeadLetterExchangeArgs(amqpProperties.getDeadLetterExchange())); } /** @@ -79,7 +91,7 @@ public class AmqpConfiguration { */ @Bean public Queue deadLetterQueue() { - return new Queue(amqpProperties.getDeadLetterQueue()); + return amqpDeadletterProperties.createDeadletterQueue(amqpProperties.getDeadLetterQueue()); } /** @@ -149,10 +161,4 @@ public class AmqpConfiguration { return containerFactory; } - private Map getDeadLetterExchangeArgs() { - final Map args = new HashMap<>(); - args.put("x-dead-letter-exchange", amqpProperties.getDeadLetterExchange()); - return args; - } - } diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java new file mode 100644 index 000000000..8e988ff16 --- /dev/null +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.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.amqp; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.amqp.core.Queue; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * Bean which holds the necessary properties for configuring the AMQP deadletter + * queue. + */ +@ConfigurationProperties("hawkbit.dmf.rabbitmq.deadLetter") +public class AmqpDeadletterProperties { + + /** + * Message time to live (ttl) for the deadletter queue. Default ttl is 3 + * weeks. + */ + private int ttl = 1_814_400_000; + + /** + * Return the deadletter arguments. + * + * @param exchange + * the deadletter exchange + * @return map which holds the properties + */ + public Map getDeadLetterExchangeArgs(final String exchange) { + final Map args = new HashMap<>(); + args.put("x-dead-letter-exchange", exchange); + return args; + } + + /** + * Create a deadletter queue with ttl for messages + * + * @param queueName + * the deadlette queue name + * @return the deadletter queue + */ + public Queue createDeadletterQueue(final String queueName) { + // getTTLArgs() + return new Queue(queueName, true, false, false, null); + } + + private Map getTTLArgs() { + final Map args = new HashMap<>(); + args.put("x-message-ttl", getTtl()); + return args; + } + + public int getTtl() { + return ttl; + } + + public void setTtl(final int ttl) { + this.ttl = ttl; + } + +} From 993dab2eedffb414a379b75d86384c686d5f9081 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 13 Apr 2016 14:12:58 +0200 Subject: [PATCH 130/344] Labels/Icons are placed differently in vertical alignment Signed-off-by: Melanie Retter --- .../common/detailslayout/AbstractTableDetailsLayout.java | 8 ++++---- .../hawkbit/ui/common/table/AbstractTableHeader.java | 7 +++---- .../java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) 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 969436904..3c153cb77 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 @@ -152,18 +152,18 @@ public abstract class AbstractTableDetailsLayout extends final HorizontalLayout nameEditLayout = new HorizontalLayout(); nameEditLayout.setWidth(100.0f, Unit.PERCENTAGE); nameEditLayout.addComponent(caption); - nameEditLayout.setComponentAlignment(caption, Alignment.MIDDLE_LEFT); + nameEditLayout.setComponentAlignment(caption, Alignment.TOP_LEFT); if (hasEditPermission()) { nameEditLayout.addComponent(editButton); - nameEditLayout.setComponentAlignment(editButton, Alignment.MIDDLE_RIGHT); + nameEditLayout.setComponentAlignment(editButton, Alignment.TOP_RIGHT); } nameEditLayout.setExpandRatio(caption, 1.0f); nameEditLayout.addStyleName(SPUIStyleDefinitions.WIDGET_TITLE); addComponent(nameEditLayout); - setComponentAlignment(nameEditLayout, Alignment.MIDDLE_CENTER); + setComponentAlignment(nameEditLayout, Alignment.TOP_CENTER); addComponent(detailsTab); - setComponentAlignment(nameEditLayout, Alignment.MIDDLE_CENTER); + setComponentAlignment(nameEditLayout, Alignment.TOP_CENTER); setSizeFull(); setHeightUndefined(); 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..0c5407316 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); @@ -195,7 +194,7 @@ public abstract class AbstractTableHeader extends VerticalLayout { dropHintDropFilterLayout.setExpandRatio(dropFilterLayout, 1.0f); } addComponent(dropHintDropFilterLayout); - setComponentAlignment(dropHintDropFilterLayout, Alignment.MIDDLE_CENTER); + setComponentAlignment(dropHintDropFilterLayout, Alignment.TOP_CENTER); addStyleName("bordered-layout"); addStyleName("no-border-bottom"); } 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 bbbba8cec..dd8c0e5f9 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 @@ -139,7 +139,7 @@ public final class DashboardMenu extends CustomComponent { final Label logo = new Label("" + i18n.get("menu.title") + "", ContentMode.HTML); logo.setSizeUndefined(); final HorizontalLayout logoWrapper = new HorizontalLayout(logo); - logoWrapper.setComponentAlignment(logo, Alignment.MIDDLE_CENTER); + logoWrapper.setComponentAlignment(logo, Alignment.TOP_CENTER); logoWrapper.addStyleName("valo-menu-title"); return logoWrapper; } From b95b9c1ce6e52689fb68db0a64ffb0df0cde1a03 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 13 Apr 2016 14:20:27 +0200 Subject: [PATCH 131/344] Move @SuppressWarnings("unchecked") to the right line and remove unused attributes Signed-off-by: SirWayne --- .../ui/distributions/dstable/DistributionSetTable.java | 7 +------ .../ui/management/event/DistributionTagDropEvent.java | 4 +--- .../hawkbit/ui/management/footer/DeleteActionsLayout.java | 4 ++-- .../hawkbit/ui/management/targettable/TargetTable.java | 6 +++--- .../ui/management/targettable/TargetTableHeader.java | 3 +-- .../ui/management/targettag/TargetTagFilterButtons.java | 4 +--- 6 files changed, 9 insertions(+), 19 deletions(-) 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 b5d614243..4a7b74ece 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 @@ -209,9 +209,9 @@ public class DistributionSetTable extends AbstractNamedVersionTable source = (AbstractTable) transferable.getSourceComponent(); final Set softwareModulesIdList = source.getDeletedEntityByTransferable(transferable); @@ -224,11 +224,6 @@ public class DistributionSetTable extends AbstractNamedVersionTable softwareModulesIdList, final Item item) { final Long distId = (Long) item.getItemProperty("id").getValue(); final String distName = (String) item.getItemProperty("name").getValue(); diff --git a/hawkbit-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 index 97ba7ea6c..2b6acbf68 100644 --- a/hawkbit-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 @@ -68,8 +68,6 @@ public class DistributionTagDropEvent implements DropHandler { @Autowired private ManagementViewAcceptCriteria managementViewAcceptCriteria; - private static final String ITEMID = "itemId"; - @Override public void drop(final DragAndDropEvent event) { if (validate(event) && isNoTagAssigned(event)) { @@ -127,12 +125,12 @@ public class DistributionTagDropEvent implements DropHandler { return true; } - @SuppressWarnings("unchecked") private void processDistributionDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); + @SuppressWarnings("unchecked") final AbstractTable source = (AbstractTable) transferable .getSourceComponent(); 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 0466e6076..7db48636b 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 @@ -256,8 +256,8 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { } } - @SuppressWarnings("unchecked") private void addInDeleteDistributionList(final Table sourceTable, final TableTransferable transferable) { + @SuppressWarnings("unchecked") final AbstractTable distTable = (AbstractTable) sourceTable; final Set distributionIdNameSet = distTable.getDeletedEntityByTransferable(transferable); @@ -305,8 +305,8 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { return false; } - @SuppressWarnings("unchecked") private void addInDeleteTargetList(final Table sourceTable, final TableTransferable transferable) { + @SuppressWarnings("unchecked") final AbstractTable targetTable = (AbstractTable) sourceTable; final Set targetIdNameSet = targetTable.getDeletedEntityByTransferable(transferable); 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 1307e27d3..3b9c18952 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 @@ -107,7 +107,6 @@ public class TargetTable extends AbstractTable implements private static final long serialVersionUID = -2300392868806614568L; private static final int PROPERTY_DEPT = 3; - private static final String ITEMID = "itemId"; private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; @Autowired @@ -632,9 +631,9 @@ public class TargetTable extends AbstractTable implements return true; } - @SuppressWarnings("unchecked") private static Set getDraggedDistributionSet(final TableTransferable transferable, final Table source) { + @SuppressWarnings("unchecked") final AbstractTable distTable = (AbstractTable) source; return distTable.getDeletedEntityByTransferable(transferable); } @@ -853,6 +852,7 @@ public class TargetTable extends AbstractTable implements eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.REFRESH_TARGETS)); } + @SuppressWarnings("unchecked") private void updateVisibleItemOnEvent(final TargetInfo targetInfo, final Target target, final TargetIdName targetIdName) { final LazyQueryContainer targetContainer = (LazyQueryContainer) getContainerDataSource(); @@ -875,8 +875,8 @@ public class TargetTable extends AbstractTable implements * @param targetInfoUpdateEvents * list of target info update event */ - @SuppressWarnings("unchecked") private void onTargetInfoUpdateEvents(final List targetInfoUpdateEvents) { + @SuppressWarnings("unchecked") final List visibleItemIds = (List) getVisibleItemIds(); boolean shoulTargetsUpdated = false; Target lastSelectedTarget = null; 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 158d57878..09c9bf499 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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.targettable; -import java.util.HashSet; import java.util.Set; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; @@ -378,8 +377,8 @@ public class TargetTableHeader extends AbstractTableHeader { return isValid; } - @SuppressWarnings("unchecked") private Set getDropppedDistributionDetails(final TableTransferable transferable) { + @SuppressWarnings("unchecked") final AbstractTable distTable = (AbstractTable) transferable.getSourceComponent(); return distTable.getDeletedEntityByTransferable(transferable); } 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 671d332de..4d96a4b7a 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 @@ -78,8 +78,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { @Autowired private transient TargetManagement targetManagement; - private static final String ITEMID = "itemId"; - TargetTagFilterButtonClick filterButtonClickBehaviour; /** @@ -211,10 +209,10 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { return true; } - @SuppressWarnings("unchecked") private void processTargetDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); + @SuppressWarnings("unchecked") final AbstractTable targetTable = (AbstractTable) transferable .getSourceComponent(); From f70120d5461959e0fa7abc0bb4382e17885341f1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 13 Apr 2016 15:36:14 +0200 Subject: [PATCH 132/344] Set the id after the update Signed-off-by: SirWayne --- .../hawkbit/ui/distributions/dstable/DistributionSetTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4e6be369d..998cd1de2 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 @@ -471,9 +471,9 @@ public class DistributionSetTable extends AbstractNamedVersionTable Date: Wed, 13 Apr 2016 15:47:08 +0200 Subject: [PATCH 133/344] Version should be set after id Signed-off-by: SirWayne --- .../hawkbit/ui/common/table/AbstractNamedVersionTable.java | 2 +- .../hawkbit/ui/distributions/dstable/DistributionSetTable.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 b14c69a51..3e215f77c 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 @@ -40,8 +40,8 @@ public abstract class AbstractNamedVersionTable Date: Wed, 13 Apr 2016 16:42:34 +0200 Subject: [PATCH 134/344] Reflect tag color change immediatly after popup is closed. (Deployment Management) Correct one spelling mistake in method name. Signed-off-by: Melanie Retter --- .../artifacts/smtype/CreateUpdateSoftwareTypeLayout.java | 6 +++--- .../management/targettag/CreateUpdateTargetTagLayout.java | 7 ++++--- 2 files changed, 7 insertions(+), 6 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 dc6d1081e..ecc0ad79d 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 @@ -612,7 +612,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C */ private void crateNewSWModuleType() { int assignNumber = 0; - final String colorPicked = getColorPickedSting(); + final String colorPicked = getColorPickedString(); final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeName.getValue()); final String typeKeyValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeKey.getValue()); final String typeDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeDesc.getValue()); @@ -649,7 +649,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C * * @return String of color picked value. */ - private String getColorPickedSting() { + private String getColorPickedString() { return "rgb(" + getSelPreview().getColor().getRed() + "," + getSelPreview().getColor().getGreen() + "," + getSelPreview().getColor().getBlue() + ")"; } @@ -675,7 +675,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C existingType.setDescription(null != typeDescValue ? typeDescValue : null); - existingType.setColour(getColorPickedSting()); + existingType.setColour(getColorPickedString()); swTypeManagementService.updateSoftwareModuleType(existingType); uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { existingType.getName() })); closeWindow(); 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..aee07afc4 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 @@ -183,7 +183,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { * Create new tag. */ private void crateNewTag() { - final String colorPicked = getColorPickedSting(); + final String colorPicked = getColorPickedString(); final String tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); if (null != tagNameValue) { @@ -214,10 +214,11 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { if (null != nameUpdateValue) { targetObj.setName(nameUpdateValue); targetObj.setDescription(null != descUpdateValue ? descUpdateValue : null); - targetObj.setColour(getColorPickedSting()); + targetObj.setColour(getColorPickedString()); tagManagement.updateTargetTag(targetObj); uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { targetObj.getName() })); closeWindow(); + eventBus.publish(this, new TargetTagUpdateEvent(targetObj)); } else { uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); } @@ -244,7 +245,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { * * @return String of color picked value. */ - private String getColorPickedSting() { + private String getColorPickedString() { return "rgb(" + getSelPreview().getColor().getRed() + "," + getSelPreview().getColor().getGreen() + "," + getSelPreview().getColor().getBlue() + ")"; } From d21485cad419f14cd673c32132bd6987513e5908 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 13 Apr 2016 16:52:12 +0200 Subject: [PATCH 135/344] Refactoring: Extract some staff to private methods Signed-off-by: SirWayne --- .../footer/DeleteActionsLayout.java | 51 +++++++------------ .../targettag/TargetTagFilterButtons.java | 32 +++++++++--- 2 files changed, 43 insertions(+), 40 deletions(-) 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 7db48636b..5435a8f74 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 @@ -270,27 +270,20 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { if (distributionIdNameSet.isEmpty()) { return; } - /* - * Flags to identify whether all dropped distributions are already in - * the deleted list (or) some distributions are already in the deleted - * distribution list. - */ + checkDeletedDistributionSets(distributionIdNameSet); + } + + private void checkDeletedDistributionSets(final Set distributionIdNameSet) { final int existingDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); managementUIState.getDeletedDistributionList().addAll(distributionIdNameSet); final int newDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); + if (newDeletedDistributionsSize == existingDeletedDistributionsSize) { - /* - * No new distributions are added, all distributions dropped now are - * already available in the delete list. Hence display warning - * message accordingly. - */ notification.displayValidationError(i18n.get("message.targets.already.deleted")); - } else if (newDeletedDistributionsSize - existingDeletedDistributionsSize != distributionIdNameSet.size()) { - /* - * Not the all distributions dropped now are added to the delete - * list. There are some distributions are already there in the - * delete list. Hence display warning message accordingly. - */ + return; + } + + if (newDeletedDistributionsSize - existingDeletedDistributionsSize != distributionIdNameSet.size()) { notification.displayValidationError(i18n.get("message.dist.deleted.pending")); } } @@ -310,28 +303,22 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { final AbstractTable targetTable = (AbstractTable) sourceTable; final Set targetIdNameSet = targetTable.getDeletedEntityByTransferable(transferable); - /* - * Flags to identify whether all dropped targets are already in the - * deleted list (or) some target are already in the deleted distribution - * list. - */ + checkDeletedTargets(targetIdNameSet); + } + + private void checkDeletedTargets(final Set targetIdNameSet) { final int existingDeletedTargetsSize = managementUIState.getDeletedTargetList().size(); managementUIState.getDeletedTargetList().addAll(targetIdNameSet); final int newDeletedTargetsSize = managementUIState.getDeletedTargetList().size(); + if (newDeletedTargetsSize == existingDeletedTargetsSize) { - /* - * No new targets are added, all targets dropped now are already - * available in the delete list. Hence display warning message - * accordingly. - */ notification.displayValidationError(i18n.get("message.targets.already.deleted")); - } else if (newDeletedTargetsSize - existingDeletedTargetsSize != targetIdNameSet.size()) { - /* - * Not the all targets dropped now are added to the delete list. - * There are some targets are already there in the delete list. - * Hence display warning message accordingly. - */ + return; + } + + if (newDeletedTargetsSize - existingDeletedTargetsSize != targetIdNameSet.size()) { notification.displayValidationError(i18n.get("message.target.deleted.pending")); + return; } } 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 4d96a4b7a..4e5246703 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 @@ -223,18 +223,33 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { final String targTagName = HawkbitCommonUtil.removePrefix(targetDetails.getTarget().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); - final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); - final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); notification.displaySuccess(HawkbitCommonUtil.createAssignmentMessage(targTagName, result, i18n)); - if (result.getAssigned() >= 1 && managementUIState.getTargetTableFilters().isNoTagSelected()) { - eventBus.publish(this, ManagementUIEvent.ASSIGN_TARGET_TAG); - } - if (result.getUnassigned() >= 1 && !tagsClickedList.isEmpty() && tagsClickedList.contains(targTagName)) { - eventBus.publish(this, ManagementUIEvent.UNASSIGN_TARGET_TAG); - } + publishAssignTargetTagEvent(result); + publishUnAssignTargetTagEvent(targTagName, result); + + } + + private void publishUnAssignTargetTagEvent(final String targTagName, final TargetTagAssignmentResult result) { + final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); + final boolean isTargetTagUnAssigned = result.getUnassigned() >= 1 && !tagsClickedList.isEmpty() + && tagsClickedList.contains(targTagName); + + if (!isTargetTagUnAssigned) { + return; + } + eventBus.publish(this, ManagementUIEvent.UNASSIGN_TARGET_TAG); + } + + private void publishAssignTargetTagEvent(final TargetTagAssignmentResult result) { + final boolean isNewTargetTagAssigned = result.getAssigned() >= 1 + && managementUIState.getTargetTableFilters().isNoTagSelected(); + if (!isNewTargetTagAssigned) { + return; + } + eventBus.publish(this, ManagementUIEvent.ASSIGN_TARGET_TAG); } private boolean validateIfSourceisTargetTable(final Table source) { @@ -281,6 +296,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } } + @SuppressWarnings("unchecked") private void addNewTargetTag(final TargetTag newTargetTag) { final LazyQueryContainer targetTagContainer = (LazyQueryContainer) getContainerDataSource(); final Object addItem = targetTagContainer.addItem(); From 30ba98ff8e2d7fa7386460bfa2e25fa47dba2c52 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 13 Apr 2016 17:27:49 +0200 Subject: [PATCH 136/344] TTL Signed-off-by: SirWayne --- .../eclipse/hawkbit/amqp/AmqpConfiguration.java | 17 +++++++---------- .../hawkbit/amqp/AmqpDeadletterProperties.java | 3 +-- 2 files changed, 8 insertions(+), 12 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 1e25e3717..448206924 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 @@ -15,6 +15,7 @@ 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.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; @@ -40,16 +41,12 @@ public class AmqpConfiguration { @Autowired private ConnectionFactory connectionFactory; - // /** - // * Method to set the Jackson2JsonMessageConverter. - // * - // * @return the Jackson2JsonMessageConverter - // */ - // @Bean - // public RabbitAdmin rabbitAdmin(final RabbitAdmin rabbitAdmin) { - // rabbitAdmin.setIgnoreDeclarationExceptions(true); - // return rabbitAdmin; - // } + @Bean + public RabbitAdmin rabbitAdmin() { + final RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); + rabbitAdmin.setIgnoreDeclarationExceptions(true); + return rabbitAdmin; + } /** * Method to set the Jackson2JsonMessageConverter. diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java index 8e988ff16..e9ad60a1c 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java @@ -48,8 +48,7 @@ public class AmqpDeadletterProperties { * @return the deadletter queue */ public Queue createDeadletterQueue(final String queueName) { - // getTTLArgs() - return new Queue(queueName, true, false, false, null); + return new Queue(queueName, true, false, false, getTTLArgs()); } private Map getTTLArgs() { From 4b6a6a4a4aadad54e374601308d94f7ae78aaf0c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 13 Apr 2016 17:37:55 +0200 Subject: [PATCH 137/344] Refactoring: Extract some staff to private methods and remove duplicated code Signed-off-by: SirWayne --- .../footer/DeleteActionsLayout.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) 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 5435a8f74..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 @@ -278,14 +278,27 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { managementUIState.getDeletedDistributionList().addAll(distributionIdNameSet); final int newDeletedDistributionsSize = managementUIState.getDeletedDistributionList().size(); - if (newDeletedDistributionsSize == existingDeletedDistributionsSize) { - notification.displayValidationError(i18n.get("message.targets.already.deleted")); + showAlreadyDeletedDistributionSetNotfication(existingDeletedDistributionsSize, newDeletedDistributionsSize, + "message.dists.already.deleted"); + showPendingDeletedNotifaction(distributionIdNameSet, existingDeletedDistributionsSize, + newDeletedDistributionsSize, "message.dist.deleted.pending"); + } + + private void showPendingDeletedNotifaction(final Set currentValues, final int existingDeletedSize, + final int newDeletedSize, final String messageKey) { + if (newDeletedSize - existingDeletedSize == currentValues.size()) { return; } + notification.displayValidationError(i18n.get(messageKey)); + } - if (newDeletedDistributionsSize - existingDeletedDistributionsSize != distributionIdNameSet.size()) { - notification.displayValidationError(i18n.get("message.dist.deleted.pending")); + private void showAlreadyDeletedDistributionSetNotfication(final int existingDeletedSize, final int newDeletedSize, + final String messageKey) { + + if (newDeletedSize != existingDeletedSize) { + return; } + notification.displayValidationError(i18n.get(messageKey)); } private boolean isDsInUseInBulkUpload(final Set distributionIdNameSet, @@ -311,15 +324,11 @@ public class DeleteActionsLayout extends AbstractDeleteActionsLayout { managementUIState.getDeletedTargetList().addAll(targetIdNameSet); final int newDeletedTargetsSize = managementUIState.getDeletedTargetList().size(); - if (newDeletedTargetsSize == existingDeletedTargetsSize) { - notification.displayValidationError(i18n.get("message.targets.already.deleted")); - return; - } + showAlreadyDeletedDistributionSetNotfication(existingDeletedTargetsSize, newDeletedTargetsSize, + "message.targets.already.deleted"); - if (newDeletedTargetsSize - existingDeletedTargetsSize != targetIdNameSet.size()) { - notification.displayValidationError(i18n.get("message.target.deleted.pending")); - return; - } + showPendingDeletedNotifaction(targetIdNameSet, existingDeletedTargetsSize, newDeletedTargetsSize, + "message.target.deleted.pending"); } private void updateActionCount() { From fc693f099451a69e48f5688d99474c337dddfc2f Mon Sep 17 00:00:00 2001 From: Asharani Murugesh Date: Thu, 14 Apr 2016 09:54:56 +0530 Subject: [PATCH 138/344] Corrected the typo as per review comment --- hawkbit-ui/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/README.md b/hawkbit-ui/README.md index f8e020648..e1c7d8ffc 100644 --- a/hawkbit-ui/README.md +++ b/hawkbit-ui/README.md @@ -3,7 +3,7 @@ The application with user interface to create and manage rollouts. ## Debugging client-side code -### Debug usings SuperDevMode +### Debug using SuperDevMode The SuperDevMode can be used to debug client side code without any browser plugin. #### Using SuperDevMode with chrome : @@ -31,4 +31,4 @@ The SuperDevMode can be used to debug client side code without any browser plugi - Type is "Launch Chrome" - http://localhost:8080/UI/?superdevmode - Launch the new configuration in debug mode -- Now breakpoints in eclipse can be set \ No newline at end of file +- Now breakpoints in eclipse can be set From c8e88239c2201c9940999b5e21548ffaa3472904 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Thu, 14 Apr 2016 14:49:49 +0530 Subject: [PATCH 139/344] Rollout management issues Signed-off-by: venu1278 --- .../client/CustomObjectRendererConnector.java | 9 +++++++++ .../customrenderers/client/renderers/CustomObject.java | 8 ++++++++ .../client/renderers/CustomObjectRenederer.java | 8 ++++++++ .../customrenderers/renderers/CustomObjectRenderer.java | 9 +++++++++ 4 files changed, 34 insertions(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java index b209ab82c..c79e81924 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java @@ -1,3 +1,12 @@ +/** + * 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.customrenderers.client; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java index 85b5d9404..f3a5c74c4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObject.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.customrenderers.client.renderers; import java.io.Serializable; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java index a6a527f2a..7931e9f84 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.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.customrenderers.client.renderers; import com.google.gwt.core.shared.GWT; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java index c2a7606a3..ae555f897 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java @@ -1,3 +1,12 @@ +/** + * 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.customrenderers.renderers; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; From 2ca807916c0b5101dcb04396d0f5a2bf73f5043d Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 14 Apr 2016 13:32:24 +0200 Subject: [PATCH 140/344] fix lookup by filename and not by ID because the ID is unique and the filename exists multiple times Signed-off-by: Michael Hirsch --- .../repository/specifications/ActionSpecifications.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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/specifications/ActionSpecifications.java index 1ac3afb67..62e7167f1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/specifications/ActionSpecifications.java @@ -53,7 +53,8 @@ public class ActionSpecifications { final Join dsJoin = actionRoot.join(Action_.distributionSet); final SetJoin modulesJoin = dsJoin.join(DistributionSet_.modules); final ListJoin artifactsJoin = modulesJoin.join(SoftwareModule_.artifacts); - return criteriaBuilder.and(criteriaBuilder.equal(artifactsJoin.get(LocalArtifact_.id), localArtifact.getId()), + return criteriaBuilder.and( + criteriaBuilder.equal(artifactsJoin.get(LocalArtifact_.filename), localArtifact.getFilename()), criteriaBuilder.equal(actionRoot.get(Action_.target), target)); }; } From b9c389d8dbb93449b1a1a63e52f1b94ab175cbf9 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Fri, 15 Apr 2016 15:22:16 +0530 Subject: [PATCH 141/344] Rollout management issues Signed-off-by: venu1278 --- .../renderers/CustomObjectRenederer.java | 5 + .../renderers/CustomObjectRenderer.java | 20 +- .../ui/rollout/rollout/ProxyRollout.java | 2 +- .../ui/rollout/rollout/RolloutListGrid.java | 11 +- .../rolloutgroup/ProxyRolloutGroup.java | 316 +++++++++--------- 5 files changed, 187 insertions(+), 167 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java index 7931e9f84..262648178 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java @@ -13,6 +13,11 @@ import com.vaadin.client.renderers.ClickableRenderer; import com.vaadin.client.ui.VButton; import com.vaadin.client.widget.grid.RendererCellReference; +/** + * Renders button with provided CustomObject. + * Used to display button with link. + * + */ public class CustomObjectRenederer extends ClickableRenderer { @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java index ae555f897..02eca1bf9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/CustomObjectRenderer.java @@ -15,26 +15,36 @@ import com.vaadin.ui.renderers.ClickableRenderer; import elemental.json.JsonValue; +/** + * Renders button with provided CustomObject. + * Used to display button with link. + * + */ + public class CustomObjectRenderer extends ClickableRenderer { - /** - * - */ private static final long serialVersionUID = -8754180585906263554L; /** - * Creates a new image renderer. + * Creates a new custom object renderer. */ public CustomObjectRenderer() { super(CustomObject.class, null); } + + /** + * Initialize custom object renderer with {@link Class} + * + * @param presentationType + * Class + */ public CustomObjectRenderer(Class presentationType) { super(presentationType); } /** - * Creates a new image renderer and adds the given click listener to it. + * Creates a new custom object renderer and adds the given click listener to it. * * @param listener * the click listener to register 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 36cb7ddee..6649d7dcb 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 @@ -14,7 +14,7 @@ import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; import com.vaadin.server.FontAwesome; /** - * Proxy rollout with suctome properties. + * Proxy rollout with custom properties. * */ public class ProxyRollout extends Rollout { 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 f8da4b269..65f94aee6 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 @@ -97,6 +97,10 @@ public class RolloutListGrid extends AbstractGrid { private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); + /** + * Handles the RolloutEvent to refresh Grid. + * + */ @EventBusListenerMethod(scope = EventScope.SESSION) void onEvent(final RolloutEvent event) { switch (event) { @@ -419,6 +423,9 @@ 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; @@ -585,11 +592,9 @@ public class RolloutListGrid extends AbstractGrid { } /** - * - * Converter to convert 0 to empty , if total target groups is zero. + * Converter to convert 0 to empty, if total target groups is zero. * */ - class TotalTargetGroupsConverter implements Converter { private static final long serialVersionUID = 6589305227035220369L; 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 3033ff02c..71fe2aa8e 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 @@ -12,36 +12,36 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; /** - * Proxy rollout group with suctome properties. + * Proxy rollout group with custom properties. * */ public class ProxyRolloutGroup extends RolloutGroup { - 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 CustomObject customObject; + private String totalTargetsCount; + + private CustomObject customObject; public CustomObject getCustomObject() { return customObject; @@ -51,169 +51,169 @@ public class ProxyRolloutGroup extends RolloutGroup { this.customObject = customObject; } - /** - * @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; + } } From 22f4d9ffcf9a84e6287f1be5ad8316ad1bf53638 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 15 Apr 2016 12:37:40 +0200 Subject: [PATCH 142/344] 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 4854888934bc048eac9f9928efea8f5768a78ef3 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Fri, 15 Apr 2016 12:53:39 +0200 Subject: [PATCH 143/344] Consitent breadcrumb usage Signed-off-by: Melanie Retter --- .../CreateOrUpdateFilterHeader.java | 35 +++++++++++++++++-- .../FilterManagementView.java | 25 ++++++------- .../event/CustomFilterUIEvent.java | 2 +- .../rolloutgroup/RolloutGroupsListHeader.java | 1 + .../themes/hawkbit/customstyles/others.scss | 4 +++ .../src/main/resources/messages.properties | 3 ++ .../src/main/resources/messages_de.properties | 3 ++ .../src/main/resources/messages_en.properties | 3 ++ 8 files changed, 61 insertions(+), 15 deletions(-) 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..684321a2a 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 @@ -93,6 +93,10 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button @Qualifier("uiExecutor") private transient Executor executor; + private HorizontalLayout breadcrumbLayout; + + private Button breadcrumbButton; + private Label headerCaption; private TextField queryTextField; @@ -201,6 +205,10 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } private void createComponents() { + + // Breadcrumb + breadcrumbButton = createBreadcrumbButton(); + headerCaption = SPUIComponentProvider.getLabel(SPUILabelDefinitions.VAR_CREATE_FILTER, SPUILabelDefinitions.SP_WIDGET_CAPTION); @@ -221,12 +229,23 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button closeIcon = createSearchResetIcon(); } + private Button createBreadcrumbButton() { + 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("breadcrumb.target.filter.custom.filters")); + createFilterViewLink.setCaption(i18n.get("breadcrumb.target.filter.custom.filters")); + createFilterViewLink.addClickListener(value -> showCustomFiltersView()); + + return createFilterViewLink; + } + private TextField createNameTextField() { final TextField nameField = SPUIComponentProvider.getTextField("", 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)); + nameField.addTextChangeListener(event -> onFilterNameChange(event)); return nameField; } @@ -256,7 +275,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button }; } - private void onFiterNameChange(final TextChangeEvent event) { + private void onFilterNameChange(final TextChangeEvent event) { if (isNameAndQueryEmpty(event.getText(), queryTextField.getValue()) || (event.getText().equals(oldFilterName) && queryTextField.getValue().equals(oldFilterQuery))) { saveButton.setEnabled(false); @@ -276,6 +295,12 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button titleFilterIconsLayout.addComponents(headerCaption, captionLayout); titleFilterIconsLayout.setSpacing(true); + breadcrumbLayout = new HorizontalLayout(); + breadcrumbLayout.addComponent(breadcrumbButton); + breadcrumbLayout.addComponent(new Label(">")); + headerCaption.addStyleName("breadcrumbPaddingLeft"); + breadcrumbLayout.addComponent(headerCaption); + final HorizontalLayout titleFilterLayout = new HorizontalLayout(); titleFilterLayout.setSizeFull(); titleFilterLayout.addComponents(titleFilterIconsLayout, closeIcon); @@ -302,10 +327,12 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button queryLayout.setSpacing(true); queryLayout.addComponents(searchLayout, iconLayout); + addComponent(breadcrumbLayout); addComponent(titleFilterLayout); addComponent(queryLayout); setSpacing(true); addStyleName(SPUIStyleDefinitions.WIDGET_TITLE); + addStyleName("bordered-layout"); } private void setUpCaptionLayout(final boolean isCreateView) { @@ -524,4 +551,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button } } + private void showCustomFiltersView() { + eventBus.publish(this, CustomFilterUIEvent.SHOW_FILTER_MANAGEMENT); + } + } 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..414dee239 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 @@ -96,7 +96,8 @@ public class FilterManagementView extends VerticalLayout implements View { } else if (custFilterUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK || custFilterUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY) { this.getUI().access(() -> viewCreateTargetFilterLayout()); - } else if (custFilterUIEvent == CustomFilterUIEvent.EXIT_CREATE_OR_UPDATE_FILTRER_VIEW) { + } else if (custFilterUIEvent == CustomFilterUIEvent.EXIT_CREATE_OR_UPDATE_FILTRER_VIEW + || custFilterUIEvent == CustomFilterUIEvent.SHOW_FILTER_MANAGEMENT) { UI.getCurrent().access(() -> viewListView()); } } @@ -135,17 +136,17 @@ public class FilterManagementView extends VerticalLayout implements View { private void viewListView() { removeAllComponents(); - final VerticalLayout tableHeaderLayout = new VerticalLayout(); - tableHeaderLayout.setSizeFull(); - tableHeaderLayout.setSpacing(false); - tableHeaderLayout.setMargin(false); - tableHeaderLayout.setStyleName("table-layout"); - tableHeaderLayout.addComponent(targetFilterHeader); - tableHeaderLayout.setComponentAlignment(targetFilterHeader, Alignment.TOP_CENTER); - tableHeaderLayout.addComponent(targetFilterTable); - tableHeaderLayout.setComponentAlignment(targetFilterTable, Alignment.TOP_CENTER); - tableHeaderLayout.setExpandRatio(targetFilterTable, 1.0f); - addComponent(tableHeaderLayout); + final VerticalLayout tableListViewLayout = new VerticalLayout(); + tableListViewLayout.setSizeFull(); + tableListViewLayout.setSpacing(false); + tableListViewLayout.setMargin(false); + tableListViewLayout.setStyleName("table-layout"); + tableListViewLayout.addComponent(targetFilterHeader); + tableListViewLayout.setComponentAlignment(targetFilterHeader, Alignment.TOP_CENTER); + tableListViewLayout.addComponent(targetFilterTable); + tableListViewLayout.setComponentAlignment(targetFilterTable, Alignment.TOP_CENTER); + tableListViewLayout.setExpandRatio(targetFilterTable, 1.0f); + addComponent(tableListViewLayout); } private HorizontalLayout addTargetFilterMessageLabel() { diff --git a/hawkbit-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 index 57de12aca..a09d3d397 100644 --- a/hawkbit-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 @@ -15,5 +15,5 @@ package org.eclipse.hawkbit.ui.filtermanagement.event; * */ public enum CustomFilterUIEvent { - FILTER_TARGET_BY_QUERY, FILTER_BY_CUST_FILTER_TEXT, FILTER_BY_CUST_FILTER_TEXT_REMOVE, CREATE_NEW_FILTER_CLICK, EXIT_CREATE_OR_UPDATE_FILTRER_VIEW, TARGET_FILTER_DETAIL_VIEW, TARGET_DETAILS_VIEW, CREATE_TARGET_FILTER_QUERY, UPDATED_TARGET_FILTER_QUERY, UPDATE_TARGET_FILTER_SEARCH_ICON + FILTER_TARGET_BY_QUERY, FILTER_BY_CUST_FILTER_TEXT, FILTER_BY_CUST_FILTER_TEXT_REMOVE, CREATE_NEW_FILTER_CLICK, EXIT_CREATE_OR_UPDATE_FILTRER_VIEW, TARGET_FILTER_DETAIL_VIEW, TARGET_DETAILS_VIEW, CREATE_TARGET_FILTER_QUERY, UPDATED_TARGET_FILTER_QUERY, UPDATE_TARGET_FILTER_SEARCH_ICON, SHOW_FILTER_MANAGEMENT } 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 45c16eeed..e85d96d7a 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 @@ -161,6 +161,7 @@ public class RolloutGroupsListHeader extends AbstractGridHeader { final HorizontalLayout headerCaptionLayout = new HorizontalLayout(); headerCaptionLayout.addComponent(rolloutsListViewLink); headerCaptionLayout.addComponent(new Label(">")); + headerCaption.addStyleName("breadcrumbPaddingLeft"); headerCaptionLayout.addComponent(headerCaption); return headerCaptionLayout; 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..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 @@ -228,4 +228,8 @@ .v-tooltip{ max-width:43em; } + + .breadcrumbPaddingLeft{ + padding-left: 3px !important; + } } diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 25dabd354..0f65ebe13 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -487,3 +487,6 @@ message.error.starting.rollout = Server error. Error starting rollout. Please co #Menu menu.title = Software Provisioning + +#Target Filter Management +breadcrumb.target.filter.custom.filters = Custom Filters diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 39661e3c9..12f04048a 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -473,3 +473,6 @@ 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 + +#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 23df35ad2..23b8149e3 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -464,3 +464,6 @@ 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 + +#Target Filter Management +breadcrumb.target.filter.custom.filters = Custom Filters From 536098c4c786752256e29aaacece0f7d11aa5acb Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 15 Apr 2016 17:40:03 +0200 Subject: [PATCH 144/344] Load and format the user details by a user detail formatter Signed-off-by: SirWayne --- .../smtable/BaseSwModuleBeanQuery.java | 5 +- .../ui/common/UserDetailsFormatter.java | 170 ++++++++++++++++++ .../AbstractTableDetailsLayout.java | 40 ++--- .../ui/common/table/AbstractTable.java | 6 +- .../dstable/ManageDistBeanQuery.java | 5 +- .../smtable/SwModuleBeanQuery.java | 5 +- .../CustomTargetBeanQuery.java | 5 +- .../TargetFilterBeanQuery.java | 5 +- .../dstable/DistributionBeanQuery.java | 5 +- .../targettable/TargetBeanQuery.java | 5 +- .../management/targettable/TargetTable.java | 3 +- .../hawkbit/ui/menu/DashboardMenu.java | 65 ++----- .../rollout/DistributionBeanQuery.java | 12 +- .../ui/rollout/rollout/RolloutBeanQuery.java | 14 +- .../rolloutgroup/RolloutGroupBeanQuery.java | 5 +- .../RolloutGroupTargetsBeanQuery.java | 5 +- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 53 ------ .../hawkbit/ui/utils/SPDateTimeUtil.java | 23 ++- .../themes/hawkbit/customstyles/common.scss | 6 + 19 files changed, 272 insertions(+), 165 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java 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 bb48c515a..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 @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.repository.OffsetBasedPageRequest; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -101,8 +102,8 @@ public class BaseSwModuleBeanQuery extends AbstractBeanQuery + */ + public static String loadAndFormatUsername(final String username) { + return loadAndFormatUsername(username, 50); + } + + /** + * Load user details by {@link BaseEntity#getCreatedBy()} and format the + * user name. Use {@link UserDetailsFormatter#loadAndFormatUsername(String)} + * + * @param baseEntity + * the entity + * @return the formatted 'created at user name' (max 100 characters) cannot + * be + */ + public static String loadAndFormatCreatedBy(final BaseEntity baseEntity) { + if (baseEntity == null || baseEntity.getCreatedBy() == null) { + return StringUtils.EMPTY; + } + + return loadAndFormatUsername(baseEntity.getCreatedBy()); + } + + /** + * Load user details by {@link BaseEntity#getLastModifiedBy()} and format + * the user name. Use + * {@link UserDetailsFormatter#loadAndFormatUsername(String)} + * + * @param baseEntity + * the entity + * @return the formatted 'last modefied by user name' (max 100 characters) + * cannot be + */ + public static String loadAndFormatLastModifiedBy(final BaseEntity baseEntity) { + if (baseEntity == null || baseEntity.getLastModifiedBy() == null) { + return StringUtils.EMPTY; + } + + return loadAndFormatUsername(baseEntity.getLastModifiedBy()); + } + + /** + * Load user details by the current session information and format the user + * name to max 12 characters. @see + * {@link UserDetailsFormatter#loadAndFormatUsername(String, int)} + * + * @param baseEntity + * the entity + * @return the formatted user name (max 12 characters) cannot be + */ + public static String loadAndFormatCurrentUsername() { + return loadAndFormatUsername(getCurrentUser().getUsername(), 6); + } + + /** + * Load user details by the user name and format the user name. If the + * loaded {@link UserDetails} is not a instance of a {@link UserPrincipal}, + * then just the {@link UserDetails#getUsername()} will return. + * + * If first and last name available, they will combined. Otherwise the + * {@link UserPrincipal#getLoginname()} will formatted. The formatted name + * is reduced to 100 characters. + * + * @param username + * the user name + * @param expectedNameLength + * the name size of each name part + * @return the formatted user name (max 2 * expectedNameLength characters) + * cannot be + */ + public static String loadAndFormatUsername(final String username, final int expectedNameLength) { + final UserDetails userDetails = loadUserByUsername(username); + if (!(userDetails instanceof UserPrincipal)) { + return userDetails.getUsername(); + } + + final UserPrincipal userPrincipal = (UserPrincipal) userDetails; + + final String trimmedFirstname = trimAndFormatDetail(userPrincipal.getFirstname(), expectedNameLength); + final String trimmedLastname = trimAndFormatDetail(userPrincipal.getLastname(), expectedNameLength); + + if (StringUtils.isEmpty(trimmedFirstname) && StringUtils.isEmpty(trimmedLastname)) { + return StringUtils.substring(userPrincipal.getLoginname(), 0, 2 * expectedNameLength); + } + return trimmedFirstname + DETAIL_SEPERATOR + trimmedLastname; + } + + /** + * Format the current tenant. The information is loaded by the current + * session information. + * + * @return the formatted user name (max 8 characters) can be + */ + public static String formatCurrentTenant() { + final UserDetails userDetails = getCurrentUser(); + if (!(userDetails instanceof UserPrincipal)) { + return null; + } + + final UserPrincipal userPrincipal = (UserPrincipal) userDetails; + return trimAndFormatDetail(userPrincipal.getTenant(), 8); + } + + private static UserDetails getCurrentUser() { + final SecurityContext context = (SecurityContext) VaadinService.getCurrentRequest().getWrappedSession() + .getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY); + return (UserDetails) context.getAuthentication().getPrincipal(); + } + + private static String trimAndFormatDetail(final String formatString, final int expectedDetailLength) { + final String detail = StringUtils.defaultIfEmpty(formatString, StringUtils.EMPTY); + final String trimmedDetail = StringUtils.substring(detail, 0, expectedDetailLength); + if (StringUtils.length(detail) > expectedDetailLength) { + return trimmedDetail + TRIM_APPENDIX; + } + return trimmedDetail; + } + + 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; + } catch (final UsernameNotFoundException e) { // NOSONAR + } + return new User(username, "", Collections.emptyList()); + } +} 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 969436904..b2df26179 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 @@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -213,22 +214,24 @@ public abstract class AbstractTableDetailsLayout extends populateDetailsWidget(); } - protected void updateLogLayout(final VerticalLayout changeLogLayout, final Long lastModifiedAt, - final String lastModifiedBy, final Long createdAt, final String createdBy, final I18N i18n) { - changeLogLayout.removeAllComponents(); - changeLogLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.created.at"), - createdAt == null ? "" : SPDateTimeUtil.getFormattedDate(createdAt))); + protected void populateLog() { + logLayout.removeAllComponents(); - changeLogLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.created.by"), - createdBy == null ? "" : HawkbitCommonUtil.getIMUser(createdBy))); + logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.created.at"), + SPDateTimeUtil.formatCreatedAt(selectedBaseEntity))); - if (null != lastModifiedAt) { - changeLogLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.modified.date"), - SPDateTimeUtil.getFormattedDate(lastModifiedAt))); + logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.created.by"), + UserDetailsFormatter.loadAndFormatCreatedBy(selectedBaseEntity))); - changeLogLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.modified.by"), - lastModifiedBy == null ? "" : HawkbitCommonUtil.getIMUser(lastModifiedBy))); + if (selectedBaseEntity == null || selectedBaseEntity.getLastModifiedAt() == null) { + return; } + + logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.modified.date"), + SPDateTimeUtil.formatLastModifiedAt(selectedBaseEntity))); + + logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.modified.by"), + UserDetailsFormatter.loadAndFormatLastModifiedBy(selectedBaseEntity))); } protected void updateDescriptionLayout(final String descriptionLabel, final String description) { @@ -320,19 +323,6 @@ public abstract class AbstractTableDetailsLayout extends return detailsLayout; } - public VerticalLayout getLogLayout() { - return logLayout; - } - - private void populateLog() { - if (selectedBaseEntity == null) { - updateLogLayout(getLogLayout(), null, StringUtils.EMPTY, null, null, i18n); - return; - } - updateLogLayout(getLogLayout(), selectedBaseEntity.getLastModifiedAt(), selectedBaseEntity.getLastModifiedBy(), - selectedBaseEntity.getCreatedAt(), selectedBaseEntity.getCreatedBy(), i18n); - } - 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/table/AbstractTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java index 0737f42c8..2d9067de8 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 @@ -20,7 +20,7 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.ui.artifacts.event.UploadArtifactUIEvent; import org.eclipse.hawkbit.ui.common.ManagmentEntityState; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -212,9 +212,9 @@ public abstract class AbstractTable extends Table { item.getItemProperty(SPUILabelDefinitions.VAR_ID).setValue(baseEntity.getId()); item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(baseEntity.getDescription()); item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY) - .setValue(HawkbitCommonUtil.getIMUser(baseEntity.getCreatedBy())); + .setValue(UserDetailsFormatter.loadAndFormatCreatedBy(baseEntity)); item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY) - .setValue(HawkbitCommonUtil.getIMUser(baseEntity.getLastModifiedBy())); + .setValue(UserDetailsFormatter.loadAndFormatLastModifiedBy(baseEntity)); item.getItemProperty(SPUILabelDefinitions.VAR_CREATED_DATE) .setValue(SPDateTimeUtil.getFormattedDate(baseEntity.getCreatedAt())); item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) 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 60b547285..78410f29c 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 @@ -20,6 +20,7 @@ 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.DistributionSetType; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyDistribution; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -113,8 +114,8 @@ public class ManageDistBeanQuery extends AbstractBeanQuery { proxyDistribution.setCreatedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); proxyDistribution.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); proxyDistribution.setDescription(distributionSet.getDescription()); - proxyDistribution.setCreatedByUser(HawkbitCommonUtil.getIMUser(distributionSet.getCreatedBy())); - proxyDistribution.setModifiedByUser(HawkbitCommonUtil.getIMUser(distributionSet.getLastModifiedBy())); + proxyDistribution.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(distributionSet)); + proxyDistribution.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(distributionSet)); proxyDistribution.setIsComplete(distributionSet.isComplete()); proxyDistributions.add(proxyDistribution); } 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 5419cc1bf..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 @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.CustomSoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -99,8 +100,8 @@ public class SwModuleBeanQuery extends AbstractBeanQuery proxyItem.setVersion(bean.getVersion()); proxyItem.setVendor(bean.getVendor()); proxyItem.setDescription(bean.getDescription()); - proxyItem.setCreatedByUser(HawkbitCommonUtil.getIMUser(bean.getCreatedBy())); - proxyItem.setModifiedByUser(HawkbitCommonUtil.getIMUser(bean.getLastModifiedBy())); + proxyItem.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(bean)); + proxyItem.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(bean)); proxyItem.setAssigned(customSoftwareModule.isAssigned()); proxyItem.setColour(bean.getType().getColour()); proxyItem.setTypeId(bean.getType().getId()); 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 bf5fdbe54..2cc572245 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 @@ -15,6 +15,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyTarget; import org.eclipse.hawkbit.ui.filtermanagement.state.FilterManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -118,8 +119,8 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); prxyTarget.setCreatedAt(targ.getCreatedAt()); - prxyTarget.setCreatedByUser(HawkbitCommonUtil.getIMUser(targ.getCreatedBy())); - prxyTarget.setModifiedByUser(HawkbitCommonUtil.getIMUser(targ.getLastModifiedBy())); + prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); + prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); prxyTarget.setInstalledDistributionSet(installedDistributionSet); 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 9c50640cd..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 @@ -14,6 +14,7 @@ import java.util.Map; 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; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -93,9 +94,9 @@ public class TargetFilterBeanQuery extends AbstractBeanQuery proxyTarFilter.setName(tarFilterQuery.getName()); proxyTarFilter.setId(tarFilterQuery.getId()); proxyTarFilter.setCreatedDate(SPDateTimeUtil.getFormattedDate(tarFilterQuery.getCreatedAt())); - proxyTarFilter.setCreatedBy(HawkbitCommonUtil.getIMUser(tarFilterQuery.getCreatedBy())); + proxyTarFilter.setCreatedBy(UserDetailsFormatter.loadAndFormatCreatedBy(tarFilterQuery)); proxyTarFilter.setModifiedDate(SPDateTimeUtil.getFormattedDate(tarFilterQuery.getLastModifiedAt())); - proxyTarFilter.setLastModifiedBy(HawkbitCommonUtil.getIMUser(tarFilterQuery.getLastModifiedBy())); + proxyTarFilter.setLastModifiedBy(UserDetailsFormatter.loadAndFormatLastModifiedBy(tarFilterQuery)); proxyTarFilter.setQuery(tarFilterQuery.getQuery()); proxyTargetFilter.add(proxyTarFilter); } 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 7b49ddcb2..7909a3850 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 @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.DistributionSetFilter.DistributionSetFilte import org.eclipse.hawkbit.repository.DistributionSetManagement; 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; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -129,8 +130,8 @@ public class DistributionBeanQuery extends AbstractBeanQuery proxyDistribution.setCreatedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); proxyDistribution.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); proxyDistribution.setDescription(distributionSet.getDescription()); - proxyDistribution.setCreatedByUser(HawkbitCommonUtil.getIMUser(distributionSet.getCreatedBy())); - proxyDistribution.setModifiedByUser(HawkbitCommonUtil.getIMUser(distributionSet.getLastModifiedBy())); + proxyDistribution.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(distributionSet)); + proxyDistribution.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(distributionSet)); proxyDistribution.setNameVersion( HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); proxyDistributions.add(proxyDistribution); 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 dac50ab0d..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 @@ -19,6 +19,7 @@ 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.TargetUpdateStatus; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyTarget; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -130,8 +131,8 @@ public class TargetBeanQuery extends AbstractBeanQuery { prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); prxyTarget.setCreatedAt(targ.getCreatedAt()); - prxyTarget.setCreatedByUser(HawkbitCommonUtil.getIMUser(targ.getCreatedBy())); - prxyTarget.setModifiedByUser(HawkbitCommonUtil.getIMUser(targ.getLastModifiedBy())); + prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); + prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); if (pinnedDistId == null) { prxyTarget.setInstalledDistributionSet(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..ea75b5d31 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 @@ -32,6 +32,7 @@ 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.ManagmentEntityState; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.common.table.AbstractTable; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.filter.FilterExpression; @@ -739,7 +740,7 @@ public class TargetTable extends AbstractTable implements .setValue(updatedTarget.getTargetInfo().getLastTargetQuery()); item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY) - .setValue(HawkbitCommonUtil.getIMUser(updatedTarget.getLastModifiedBy())); + .setValue(UserDetailsFormatter.loadAndFormatCreatedBy(updatedTarget)); item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) .setValue(SPDateTimeUtil.getFormattedDate(updatedTarget.getLastModifiedAt())); item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(updatedTarget.getDescription()); 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 bbbba8cec..690cb51a2 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 @@ -18,23 +18,20 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.HawkbitServerProperties; import org.eclipse.hawkbit.im.authentication.PermissionService; -import org.eclipse.hawkbit.im.authentication.UserPrincipal; import org.eclipse.hawkbit.ui.UiProperties; +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.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.web.context.HttpSessionSecurityContextRepository; import com.vaadin.server.FontAwesome; import com.vaadin.server.Page; import com.vaadin.server.ThemeResource; -import com.vaadin.server.VaadinService; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.UIScope; @@ -189,63 +186,27 @@ public final class DashboardMenu extends CustomComponent { return links; } - private UserDetails getCurrentUser() { - final SecurityContext context = (SecurityContext) VaadinService.getCurrentRequest().getWrappedSession() - .getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY); - return (UserDetails) context.getAuthentication().getPrincipal(); - } - private Component buildUserMenu() { final MenuBar settings = new MenuBar(); settings.addStyleName("user-menu"); - final UserDetails user = getCurrentUser(); + settings.setHtmlContentAllowed(true); final MenuItem settingsItem = settings.addItem("", new ThemeResource("images/profile-pic-57px.jpg"), null); - if (user instanceof UserPrincipal - && (((UserPrincipal) user).getFirstname() != null || ((UserPrincipal) user).getLastname() != null)) { - settingsItem.setText(trimTanent(((UserPrincipal) user).getTenant()) + "\n" - + concateFNameLName(((UserPrincipal) user).getFirstname(), ((UserPrincipal) user).getLastname())); - settingsItem.setDescription( - ((UserPrincipal) user).getFirstname() + " / " + ((UserPrincipal) user).getLastname()); - } else if (user instanceof UserPrincipal) { - if (((UserPrincipal) user).getLoginname().length() > 10) { - settingsItem.setText(trimTanent(((UserPrincipal) user).getTenant()) + "\n" - + ((UserPrincipal) user).getLoginname().substring(0, 10) + ".."); - } else { - settingsItem.setText( - trimTanent(((UserPrincipal) user).getTenant()) + "\n" + ((UserPrincipal) user).getLoginname()); - } - settingsItem.setDescription(((UserPrincipal) user).getLoginname()); - } else if (user != null) { - settingsItem.setText(user.getUsername()); - settingsItem.setDescription(user.getUsername()); + + final String formattedTenant = UserDetailsFormatter.formatCurrentTenant(); + final String formattedUsername = UserDetailsFormatter.loadAndFormatCurrentUsername(); + String tenantAndUsernameHtml = ""; + if (!StringUtils.isEmpty(formattedTenant)) { + tenantAndUsernameHtml += formattedTenant + "
"; } + tenantAndUsernameHtml += formattedUsername; + settingsItem.setText(tenantAndUsernameHtml); + settingsItem.setDescription(formattedUsername); + settingsItem.setStyleName("user-menuitem"); settingsItem.addItem("Sign Out", selectedItem -> Page.getCurrent().setLocation("/UI/logout")); return settings; } - private String concateFNameLName(final String fName, final String lName) { - final StringBuilder userName = new StringBuilder(); - if (fName != null && fName.length() > 6) { - userName.append(fName.substring(0, 6) + ".." + ", "); - } else { - userName.append(fName).append(", "); - } - if (lName != null && lName.length() > 6) { - userName.append(lName.substring(0, 6) + ".."); - } else { - userName.append(lName); - } - return userName.toString(); - } - - private String trimTanent(final String tanent) { - if (tanent != null && tanent.length() > 8) { - return tanent.substring(0, 8) + ".."; - } - return tanent; - } - private Component buildToggleButton() { final Button valoMenuToggleButton = new Button("Menu", (ClickListener) event -> { if (getCompositionRoot().getStyleName().contains(STYLE_VISIBLE)) { 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 74daf89d8..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 @@ -18,6 +18,7 @@ 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.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyDistribution; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -62,7 +63,8 @@ public class DistributionBeanQuery extends AbstractBeanQuery sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortPropertyIds[0]); // Add sort for (int distId = 1; distId < sortPropertyIds.length; distId++) { - sort.and(new Sort(sortStates[distId] ? Direction.ASC : Direction.DESC, (String) sortPropertyIds[distId])); + sort.and(new Sort(sortStates[distId] ? Direction.ASC : Direction.DESC, + (String) sortPropertyIds[distId])); } } } @@ -103,8 +105,8 @@ public class DistributionBeanQuery extends AbstractBeanQuery final List proxyDistributions = new ArrayList<>(); for (final DistributionSet distributionSet : distBeans) { final ProxyDistribution proxyDistribution = new ProxyDistribution(); - proxyDistribution.setName(HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), - distributionSet.getVersion())); + proxyDistribution.setName( + HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); proxyDistribution.setDescription(distributionSet.getDescription()); proxyDistribution.setDistId(distributionSet.getId()); proxyDistribution.setId(distributionSet.getId()); @@ -112,8 +114,8 @@ public class DistributionBeanQuery extends AbstractBeanQuery proxyDistribution.setCreatedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getCreatedAt())); proxyDistribution.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(distributionSet.getLastModifiedAt())); proxyDistribution.setDescription(distributionSet.getDescription()); - proxyDistribution.setCreatedByUser(HawkbitCommonUtil.getIMUser(distributionSet.getCreatedBy())); - proxyDistribution.setModifiedByUser(HawkbitCommonUtil.getIMUser(distributionSet.getLastModifiedBy())); + proxyDistribution.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(distributionSet)); + proxyDistribution.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(distributionSet)); proxyDistribution.setIsComplete(distributionSet.isComplete()); proxyDistributions.add(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 5ab6f6a97..624f18b2f 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 @@ -17,6 +17,7 @@ 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; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -119,14 +120,14 @@ public class RolloutBeanQuery extends AbstractBeanQuery { proxyRollout.setName(rollout.getName()); proxyRollout.setDescription(rollout.getDescription()); final DistributionSet distributionSet = rollout.getDistributionSet(); - proxyRollout.setDistributionSetNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - distributionSet.getName(), distributionSet.getVersion())); + proxyRollout.setDistributionSetNameVersion( + HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); proxyRollout.setDistributionSet(distributionSet); proxyRollout.setNumberOfGroups(Long.valueOf(rollout.getRolloutGroups().size())); proxyRollout.setCreatedDate(SPDateTimeUtil.getFormattedDate(rollout.getCreatedAt())); proxyRollout.setModifiedDate(SPDateTimeUtil.getFormattedDate(rollout.getLastModifiedAt())); - proxyRollout.setCreatedBy(HawkbitCommonUtil.getIMUser(rollout.getCreatedBy())); - proxyRollout.setLastModifiedBy(HawkbitCommonUtil.getIMUser(rollout.getLastModifiedBy())); + proxyRollout.setCreatedBy(UserDetailsFormatter.loadAndFormatCreatedBy(rollout)); + proxyRollout.setLastModifiedBy(UserDetailsFormatter.loadAndFormatLastModifiedBy(rollout)); proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); @@ -134,7 +135,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); - + proxyRolloutList.add(proxyRollout); } return proxyRolloutList; @@ -148,7 +149,8 @@ public class RolloutBeanQuery extends AbstractBeanQuery { * .util.List, java.util.List, java.util.List) */ @Override - protected void saveBeans(final List arg0, final List arg1, final List arg2) { + protected void saveBeans(final List arg0, final List arg1, + final List arg2) { /** * CRUD operations on Target will be done through repository methods */ diff --git a/hawkbit-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 index 0dabb18fc..8273ed436 100644 --- a/hawkbit-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 @@ -15,6 +15,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -110,8 +111,8 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery proxyRolloutGroup.setDescription(rolloutGroup.getDescription()); proxyRolloutGroup.setCreatedDate(SPDateTimeUtil.getFormattedDate(rolloutGroup.getCreatedAt())); proxyRolloutGroup.setModifiedDate(SPDateTimeUtil.getFormattedDate(rolloutGroup.getLastModifiedAt())); - proxyRolloutGroup.setCreatedBy(HawkbitCommonUtil.getIMUser(rolloutGroup.getCreatedBy())); - proxyRolloutGroup.setLastModifiedBy(HawkbitCommonUtil.getIMUser(rolloutGroup.getLastModifiedBy())); + proxyRolloutGroup.setCreatedBy(UserDetailsFormatter.loadAndFormatCreatedBy(rolloutGroup)); + proxyRolloutGroup.setLastModifiedBy(UserDetailsFormatter.loadAndFormatLastModifiedBy(rolloutGroup)); proxyRolloutGroup.setId(rolloutGroup.getId()); proxyRolloutGroup.setStatus(rolloutGroup.getStatus()); proxyRolloutGroup.setErrorAction(rolloutGroup.getErrorAction()); diff --git a/hawkbit-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 index 097e076be..685be685e 100644 --- a/hawkbit-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 @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionStatus; +import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyTarget; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -105,8 +106,8 @@ public class RolloutGroupTargetsBeanQuery extends AbstractBeanQuery prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); prxyTarget.setCreatedAt(targ.getCreatedAt()); - prxyTarget.setCreatedByUser(HawkbitCommonUtil.getIMUser(targ.getCreatedBy())); - prxyTarget.setModifiedByUser(HawkbitCommonUtil.getIMUser(targ.getLastModifiedBy())); + prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); + prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); if (targetWithActionStatus.getStatus() != null) { prxyTarget.setStatus(targetWithActionStatus.getStatus()); } 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 117b5bcb8..bfc996087 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,6 @@ import java.util.Map.Entry; import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; -import org.eclipse.hawkbit.im.authentication.UserPrincipal; import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.NamedEntity; @@ -34,9 +33,6 @@ import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -605,31 +601,6 @@ public final class HawkbitCommonUtil { return requiredExtraWidth + minTableWidth; } - /** - * get formatted name - lastname,firstname. - * - * @param user - * user name - * @return String formatted name - */ - public static String getFormattedName(final UserDetails user) { - final StringBuilder formattedName = new StringBuilder(); - if (user instanceof UserPrincipal) { - if (trimAndNullIfEmpty(((UserPrincipal) user).getLastname()) != null) { - formattedName.append(((UserPrincipal) user).getLastname()); - } - if (trimAndNullIfEmpty(((UserPrincipal) user).getFirstname()) != null) { - if (formattedName.length() > 0) { - formattedName.append(", "); - } - formattedName.append(((UserPrincipal) user).getFirstname()); - } - } else if (user != null) { - formattedName.append(user.getUsername()); - } - return formattedName.toString(); - } - /** * get the Last sequence of string which is after last dot in String. * @@ -686,30 +657,6 @@ public final class HawkbitCommonUtil { return exeJS.toString(); } - /** - * Get IM User for user UUID. - * - * @param uuid - * @return imReslovedUser user details - */ - public static String getIMUser(final String uuid) { - // Get modifed user - String imReslovedUser = HawkbitCommonUtil.SP_STRING_SPACE; - if (HawkbitCommonUtil.trimAndNullIfEmpty(uuid) != null) { - final UserDetailsService idManagement = SpringContextHelper.getBean(UserDetailsService.class); - try { - imReslovedUser = HawkbitCommonUtil.getFormattedName(idManagement.loadUserByUsername(uuid)); - } catch (final UsernameNotFoundException e) { // NOSONAR - // nope not need to handle - } - // If Null display the UID - if (HawkbitCommonUtil.trimAndNullIfEmpty(imReslovedUser) == null) { - imReslovedUser = uuid; - } - } - return imReslovedUser; - } - /** * Get formatted label.Appends ellipses if content does not fit the label. * diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java index 532dd010d..4712f2f20 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java @@ -15,7 +15,9 @@ import java.util.HashMap; import java.util.Map; import java.util.TimeZone; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DurationFormatUtils; +import org.eclipse.hawkbit.repository.model.BaseEntity; import com.vaadin.server.WebBrowser; @@ -80,14 +82,31 @@ public final class SPDateTimeUtil { * @param lastQueryDate * @return String formatted date */ - public static String getFormattedDate(final Long lastQueryDate) { + return formatDate(lastQueryDate, null); + } + + public static String formatCreatedAt(final BaseEntity baseEntity) { + if (baseEntity == null) { + return StringUtils.EMPTY; + } + return formatDate(baseEntity.getCreatedAt(), StringUtils.EMPTY); + } + + public static String formatLastModifiedAt(final BaseEntity baseEntity) { + if (baseEntity == null) { + return StringUtils.EMPTY; + } + return formatDate(baseEntity.getLastModifiedAt(), StringUtils.EMPTY); + } + + private static String formatDate(final Long lastQueryDate, final String defaultString) { if (lastQueryDate != null) { final SimpleDateFormat format = new SimpleDateFormat(SPUIDefinitions.LAST_QUERY_DATE_FORMAT); format.setTimeZone(getBrowserTimeZone()); return format.format(new Date(lastQueryDate)); } - return null; + return defaultString; } /** 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 87ea5b0b9..beb405c30 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 @@ -143,9 +143,15 @@ .valo-menu-title { line-height: 1.2; } + .v-menubar-user-menu:after { display: none; } + + .v-menubar-menuitem-user-menuitem { + width: 100%; + } + .v-menubar-user-menu > .v-menubar-menuitem { white-space: normal !important; .v-icon { From 2462c7b6bfc706b499d28275f0600262edfa950b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 15 Apr 2016 17:47:02 +0200 Subject: [PATCH 145/344] Add javadoc Signed-off-by: SirWayne --- .../hawkbit/ui/common/UserDetailsFormatter.java | 7 ++++++- .../ui/management/targettable/TargetTable.java | 2 +- .../eclipse/hawkbit/ui/utils/SPDateTimeUtil.java | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) 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 92cfaab41..61261c1d1 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 @@ -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.ui.common; 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 ea75b5d31..08503413f 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 @@ -740,7 +740,7 @@ public class TargetTable extends AbstractTable implements .setValue(updatedTarget.getTargetInfo().getLastTargetQuery()); item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY) - .setValue(UserDetailsFormatter.loadAndFormatCreatedBy(updatedTarget)); + .setValue(UserDetailsFormatter.loadAndFormatLastModifiedBy(updatedTarget)); item.getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE) .setValue(SPDateTimeUtil.getFormattedDate(updatedTarget.getLastModifiedAt())); item.getItemProperty(SPUILabelDefinitions.VAR_DESC).setValue(updatedTarget.getDescription()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java index 4712f2f20..d28ac5f05 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java @@ -86,6 +86,13 @@ public final class SPDateTimeUtil { return formatDate(lastQueryDate, null); } + /** + * Get formatted date 'created at' by entity. + * + * @param baseEntity + * the entity + * @return String formatted date + */ public static String formatCreatedAt(final BaseEntity baseEntity) { if (baseEntity == null) { return StringUtils.EMPTY; @@ -93,6 +100,13 @@ public final class SPDateTimeUtil { return formatDate(baseEntity.getCreatedAt(), StringUtils.EMPTY); } + /** + * Get formatted date 'last modefied at' by entity. + * + * @param baseEntity + * the entity + * @return String formatted date + */ public static String formatLastModifiedAt(final BaseEntity baseEntity) { if (baseEntity == null) { return StringUtils.EMPTY; From 5fd220a5e3c44346d0d1e75f97121a2432de8b4f Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Sat, 16 Apr 2016 10:42:26 +0200 Subject: [PATCH 146/344] change transaction handling of creating groups and check running Rollouts Signed-off-by: Michael Hirsch --- .../hawkbit/repository/RolloutManagement.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) 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 1573048ec..6fb2ce0f9 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 @@ -58,6 +58,8 @@ 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; @@ -259,13 +261,7 @@ public class RolloutManagement { entityManager.flush(); executor.execute(() -> { try { - final DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setName("creatingRollout"); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - new TransactionTemplate(txManager, def).execute(status -> { - createRolloutGroups(amountGroup, conditions, savedRollout); - return null; - }); + createRolloutGroupsInNewTransaction(amountGroup, conditions, savedRollout); } finally { creatingRollouts.remove(savedRollout.getName()); } @@ -288,6 +284,15 @@ public class RolloutManagement { } } + private Rollout createRolloutGroupsInNewTransaction(final int amountGroup, 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(amountGroup, conditions, savedRollout)); + } + /** * Method for creating rollout groups and calculating group sizes. Group * sizes are calculated by dividing the total count of targets through the @@ -308,7 +313,8 @@ public class RolloutManagement { int groupIndex = 0; final Long totalCount = savedRollout.getTotalTargets(); final int groupSize = (int) Math.ceil((double) totalCount / (double) amountGroup); - // validate if the amount of groups that will be created are the amount + // 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 = amountGroup; final int amountGroupCreation = (int) (Math.ceil((double) totalCount / (double) groupSize)); @@ -540,7 +546,7 @@ public class RolloutManagement { * this check. This check is only applied if the last check is * less than (lastcheck-delay). */ - @Transactional + @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) From fd7fb7bd0146847445980c7e5e4ea555570feb4c Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 18 Apr 2016 07:41:33 +0200 Subject: [PATCH 147/344] make use of the existencechecking annotation for targetrolloutgroup Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/repository/model/RolloutTargetGroup.java | 4 ++++ 1 file changed, 4 insertions(+) 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/model/RolloutTargetGroup.java index f1d4fe718..28a07f061 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java @@ -24,6 +24,9 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import org.eclipse.persistence.annotations.ExistenceChecking; +import org.eclipse.persistence.annotations.ExistenceType; + /** * @author Michael Hirsch * @@ -31,6 +34,7 @@ import javax.persistence.Table; @IdClass(RolloutTargetGroupId.class) @Entity @Table(name = "sp_rollouttargetgroup") +@ExistenceChecking(ExistenceType.ASSUME_NON_EXISTENCE) public class RolloutTargetGroup implements Serializable { private static final long serialVersionUID = 1L; From 8eac737219a84c9e22fbcbe866cf62aad5060d7f Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 18 Apr 2016 07:47:23 +0200 Subject: [PATCH 148/344] update javadoc and remove author from it Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/repository/model/RolloutTargetGroup.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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/model/RolloutTargetGroup.java index 28a07f061..7a46b15b1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/RolloutTargetGroup.java @@ -28,8 +28,9 @@ import org.eclipse.persistence.annotations.ExistenceChecking; import org.eclipse.persistence.annotations.ExistenceType; /** - * @author Michael Hirsch - * + * Entity with JPA annotation to store the information which {@link Target} is + * in a specific {@link RolloutGroup}. + * */ @IdClass(RolloutTargetGroupId.class) @Entity From 878c5c869c0bccd7acccd92db7ec2d7e6f938bea Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Mon, 18 Apr 2016 07:54:38 +0200 Subject: [PATCH 149/344] adapt hawkBit user interface sentence Signed-off-by: Michael Hirsch --- hawkbit-ui/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/README.md b/hawkbit-ui/README.md index e1c7d8ffc..4bf9d67da 100644 --- a/hawkbit-ui/README.md +++ b/hawkbit-ui/README.md @@ -1,6 +1,6 @@ # hawkBit User Interface -The application with user interface to create and manage rollouts. +The hawkBit user interface is based on the Vaadin and Vaadin-Spring framework and allows to manage software updates and large scale roll-outs via a user interface. ## Debugging client-side code ### Debug using SuperDevMode From 3145709824134e02bb682cf89e9636bf28354157 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Mon, 18 Apr 2016 12:39:28 +0200 Subject: [PATCH 150/344] 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 151/344] 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 152/344] 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 d49546e71f80842172cdf8fb1af188826f1bc36b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 18 Apr 2016 16:17:28 +0200 Subject: [PATCH 153/344] Add tooltip for username Signed-off-by: SirWayne --- .../AbstractTableDetailsLayout.java | 11 ++--- .../ui/common/table/AbstractTable.java | 11 +++++ .../ui/components/SPUIComponentProvider.java | 47 +++++++++++++++++++ 3 files changed, 61 insertions(+), 8 deletions(-) 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 b2df26179..360a9f925 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 @@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.Target; -import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -172,9 +171,7 @@ public abstract class AbstractTableDetailsLayout extends } private Label createHeaderCaption() { - final Label captionLabel = SPUIComponentProvider.getLabel(getDefaultCaption(), - SPUILabelDefinitions.SP_WIDGET_CAPTION); - return captionLabel; + return SPUIComponentProvider.getLabel(getDefaultCaption(), SPUILabelDefinitions.SP_WIDGET_CAPTION); } protected VerticalLayout getTabLayout() { @@ -220,8 +217,7 @@ public abstract class AbstractTableDetailsLayout extends logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.created.at"), SPDateTimeUtil.formatCreatedAt(selectedBaseEntity))); - logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.created.by"), - UserDetailsFormatter.loadAndFormatCreatedBy(selectedBaseEntity))); + logLayout.addComponent(SPUIComponentProvider.createCreatedByLabel(i18n, selectedBaseEntity)); if (selectedBaseEntity == null || selectedBaseEntity.getLastModifiedAt() == null) { return; @@ -230,8 +226,7 @@ public abstract class AbstractTableDetailsLayout extends logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.modified.date"), SPDateTimeUtil.formatLastModifiedAt(selectedBaseEntity))); - logLayout.addComponent(SPUIComponentProvider.createNameValueLabel(i18n.get("label.modified.by"), - UserDetailsFormatter.loadAndFormatLastModifiedBy(selectedBaseEntity))); + logLayout.addComponent(SPUIComponentProvider.createLastModifiedByLabel(i18n, selectedBaseEntity)); } protected void updateDescriptionLayout(final String descriptionLabel, final String description) { 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 2d9067de8..1808cf070 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 @@ -329,6 +329,17 @@ public abstract class AbstractTable extends Table { columnList.add( new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.2F)); + setItemDescriptionGenerator((source, itemId, propertyId) -> { + + if (SPUILabelDefinitions.VAR_CREATED_BY.equals(propertyId)) { + return getItem(itemId).getItemProperty(SPUILabelDefinitions.VAR_CREATED_BY).getValue().toString(); + } + if (SPUILabelDefinitions.VAR_LAST_MODIFIED_BY.equals(propertyId)) { + return getItem(itemId).getItemProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).getValue().toString(); + } + return null; + }); + return columnList; } 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..d8e5e31d1 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 @@ -12,7 +12,9 @@ import java.util.Arrays; 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.UserDetailsFormatter; import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIHeaderLayoutDecorator; @@ -20,6 +22,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUILabelDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextAreaDecorator; import org.eclipse.hawkbit.ui.decorators.SPUITextFieldDecorator; import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator; +import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -328,6 +331,50 @@ public final class SPUIComponentProvider { return nameValueLabel; } + private static Label createUsernameLabel(final String label, final String username) { + String loadAndFormatUsername = StringUtils.EMPTY; + if (!StringUtils.isEmpty(username)) { + loadAndFormatUsername = UserDetailsFormatter.loadAndFormatUsername(username); + } + + final Label nameValueLabel = new Label(getBoldHTMLText(label) + loadAndFormatUsername, ContentMode.HTML); + nameValueLabel.setSizeFull(); + nameValueLabel.addStyleName(SPUIDefinitions.TEXT_STYLE); + nameValueLabel.addStyleName("label-style"); + nameValueLabel.setDescription(loadAndFormatUsername); + return nameValueLabel; + } + + /** + * Create label which represents the {@link BaseEntity#getCreatedBy()} by + * user name + * + * @param i18n + * the i18n + * @param baseEntity + * the entity + * @return the label + */ + public static Label createCreatedByLabel(final I18N i18n, final BaseEntity baseEntity) { + return createUsernameLabel(i18n.get("label.created.by"), + baseEntity == null ? StringUtils.EMPTY : baseEntity.getCreatedBy()); + } + + /** + * Create label which represents the + * {@link BaseEntity#getLastModifiedBy()()} by user name + * + * @param i18n + * the i18n + * @param baseEntity + * the entity + * @return the label + */ + public static Label createLastModifiedByLabel(final I18N i18n, final BaseEntity baseEntity) { + return createUsernameLabel(i18n.get("label.modified.by"), + baseEntity == null ? StringUtils.EMPTY : baseEntity.getLastModifiedBy()); + } + /** * Get Bold Text. * From f290eb78e556cb4fa47a6c988bd72e62dd608d7c Mon Sep 17 00:00:00 2001 From: venu1278 Date: Mon, 18 Apr 2016 20:12:30 +0530 Subject: [PATCH 154/344] Rollout management issues Signed-off-by: venu1278 --- .../client/CustomObjectRendererConnector.java | 9 +- .../renderers/CustomObjectRenederer.java | 4 +- .../{CustomObject.java => RendererData.java} | 27 +- .../renderers/CustomObjectRenderer.java | 12 +- .../ui/rollout/rollout/ProxyRollout.java | 14 +- .../ui/rollout/rollout/RolloutBeanQuery.java | 287 +++++++++--------- .../ui/rollout/rollout/RolloutListGrid.java | 10 +- .../rolloutgroup/ProxyRolloutGroup.java | 14 +- .../rolloutgroup/RolloutGroupBeanQuery.java | 268 ++++++++-------- .../rolloutgroup/RolloutGroupListGrid.java | 6 +- 10 files changed, 336 insertions(+), 315 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/{CustomObject.java => RendererData.java} (68%) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java index c79e81924..321b8876e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.customrenderers.client; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; import com.google.web.bindery.event.shared.HandlerRegistration; import com.vaadin.client.connectors.ClickableRendererConnector; @@ -17,9 +17,12 @@ import com.vaadin.client.renderers.ClickableRenderer.RendererClickHandler; import com.vaadin.shared.ui.Connect; import elemental.json.JsonObject; - +/** + * A connector for {@link CustomObjectRenderer }. + * + */ @Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer.class) -public class CustomObjectRendererConnector extends ClickableRendererConnector { +public class CustomObjectRendererConnector extends ClickableRendererConnector { private static final long serialVersionUID = 7734682321931830566L; public org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObjectRenederer getRenderer() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java index 262648178..13d5887ca 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java @@ -18,7 +18,7 @@ import com.vaadin.client.widget.grid.RendererCellReference; * Used to display button with link. * */ -public class CustomObjectRenederer extends ClickableRenderer { +public class CustomObjectRenederer extends ClickableRenderer { @Override public VButton createWidget() { @@ -29,7 +29,7 @@ public class CustomObjectRenederer extends ClickableRenderer { +public class CustomObjectRenderer extends ClickableRenderer { private static final long serialVersionUID = -8754180585906263554L; @@ -29,7 +29,7 @@ public class CustomObjectRenderer extends ClickableRenderer { * Creates a new custom object renderer. */ public CustomObjectRenderer() { - super(CustomObject.class, null); + super(RendererData.class, null); } /** @@ -39,7 +39,7 @@ public class CustomObjectRenderer extends ClickableRenderer { * Class */ - public CustomObjectRenderer(Class presentationType) { + public CustomObjectRenderer(Class presentationType) { super(presentationType); } @@ -55,7 +55,7 @@ public class CustomObjectRenderer extends ClickableRenderer { } @Override - public JsonValue encode(CustomObject resource) { - return super.encode(resource, CustomObject.class); + public JsonValue encode(RendererData resource) { + return super.encode(resource, RendererData.class); } } 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 6649d7dcb..c3e3d3896 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 @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; import com.vaadin.server.FontAwesome; @@ -33,14 +33,16 @@ public class ProxyRollout extends Rollout { private String totalTargetsCount; - private CustomObject customObject; + private RendererData rendererData; - public CustomObject getCustomObject() { - return customObject; + + + public RendererData getRendererData() { + return rendererData; } - public void setCustomObject(CustomObject customObject) { - this.customObject = customObject; + public void setRendererData(RendererData rendererData) { + this.rendererData = rendererData; } /** 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 114d2e432..9d915c80a 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 @@ -17,7 +17,7 @@ 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; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -40,164 +40,165 @@ import com.google.common.base.Strings; */ public class RolloutBeanQuery extends AbstractBeanQuery { - private static final long serialVersionUID = 4027879794344836185L; + private static final long serialVersionUID = 4027879794344836185L; - private final String searchText; + private final String searchText; - private Sort sort = new Sort(Direction.ASC, "createdAt"); + private Sort sort = new Sort(Direction.ASC, "createdAt"); - private transient RolloutManagement rolloutManagement; + private transient RolloutManagement rolloutManagement; - private transient TargetFilterQueryManagement filterQueryManagement; + private transient TargetFilterQueryManagement filterQueryManagement; - private transient RolloutUIState rolloutUIState; + private transient RolloutUIState rolloutUIState; - /** - * Parametric Constructor. - * - * @param definition - * as QueryDefinition - * @param queryConfig - * as Config - * @param sortIds - * as sort - * @param sortStates - * as Sort status - */ - public RolloutBeanQuery(final QueryDefinition definition, final Map queryConfig, - final Object[] sortIds, final boolean[] sortStates) { - super(definition, queryConfig, sortIds, sortStates); + /** + * Parametric Constructor. + * + * @param definition + * as QueryDefinition + * @param queryConfig + * as Config + * @param sortIds + * as sort + * @param sortStates + * as Sort status + */ + public RolloutBeanQuery(final QueryDefinition definition, final Map queryConfig, + final Object[] sortIds, final boolean[] sortStates) { + super(definition, queryConfig, sortIds, sortStates); - searchText = getSearchText(); + searchText = getSearchText(); - if (HawkbitCommonUtil.checkBolArray(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. - for (int targetId = 1; targetId < sortIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); - } - } - } + if (HawkbitCommonUtil.checkBolArray(sortStates)) { + // Initalize Sor + sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); + // Add sort. + for (int targetId = 1; targetId < sortIds.length; targetId++) { + sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); + } + } + } - private String getSearchText() { - if (getRolloutUIState().getSearchText().isPresent()) { - return String.format("%%%s%%", getRolloutUIState().getSearchText().get()); - } - return null; - } + private String getSearchText() { + if (getRolloutUIState().getSearchText().isPresent()) { + return String.format("%%%s%%", getRolloutUIState().getSearchText().get()); + } + return null; + } - @Override - protected ProxyRollout constructBean() { - return new ProxyRollout(); - } + @Override + protected ProxyRollout constructBean() { + return new ProxyRollout(); + } - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int, - * int) - */ - @Override - protected List loadBeans(final int startIndex, final int count) { - final Slice rolloutBeans; - if (Strings.isNullOrEmpty(searchText)) { - rolloutBeans = getRolloutManagement().findAllRolloutsWithDetailedStatus( - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); - } else { - rolloutBeans = getRolloutManagement().findRolloutByFilters( - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), - searchText); - } - return getProxyRolloutList(rolloutBeans); - } + /* + * (non-Javadoc) + * + * @see + * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#loadBeans(int, + * int) + */ + @Override + protected List loadBeans(final int startIndex, final int count) { + final Slice rolloutBeans; + if (Strings.isNullOrEmpty(searchText)) { + rolloutBeans = getRolloutManagement().findAllRolloutsWithDetailedStatus( + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); + } else { + rolloutBeans = getRolloutManagement().findRolloutByFilters( + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), + searchText); + } + return getProxyRolloutList(rolloutBeans); + } - private List getProxyRolloutList(final Slice rolloutBeans) { - final List proxyRolloutList = new ArrayList<>(); - for (final Rollout rollout : rolloutBeans) { - final ProxyRollout proxyRollout = new ProxyRollout(); - proxyRollout.setName(rollout.getName()); - proxyRollout.setDescription(rollout.getDescription()); - final DistributionSet distributionSet = rollout.getDistributionSet(); - proxyRollout.setDistributionSetNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - distributionSet.getName(), distributionSet.getVersion())); - proxyRollout.setDistributionSet(distributionSet); - proxyRollout.setNumberOfGroups(Long.valueOf(rollout.getRolloutGroups().size())); - proxyRollout.setCreatedDate(SPDateTimeUtil.getFormattedDate(rollout.getCreatedAt())); - proxyRollout.setModifiedDate(SPDateTimeUtil.getFormattedDate(rollout.getLastModifiedAt())); - proxyRollout.setCreatedBy(HawkbitCommonUtil.getIMUser(rollout.getCreatedBy())); - proxyRollout.setLastModifiedBy(HawkbitCommonUtil.getIMUser(rollout.getLastModifiedBy())); - proxyRollout.setForcedTime(rollout.getForcedTime()); - proxyRollout.setId(rollout.getId()); - proxyRollout.setStatus(rollout.getStatus()); - proxyRollout.setCustomObject(new CustomObject(rollout.getName(), rollout.getStatus().toString())); - - final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); - proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); - proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); - - proxyRolloutList.add(proxyRollout); - } - return proxyRolloutList; - } + private List getProxyRolloutList(final Slice rolloutBeans) { + final List proxyRolloutList = new ArrayList<>(); + for (final Rollout rollout : rolloutBeans) { + final ProxyRollout proxyRollout = new ProxyRollout(); + proxyRollout.setName(rollout.getName()); + proxyRollout.setDescription(rollout.getDescription()); + final DistributionSet distributionSet = rollout.getDistributionSet(); + proxyRollout.setDistributionSetNameVersion( + HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); + proxyRollout.setDistributionSet(distributionSet); + proxyRollout.setNumberOfGroups(Long.valueOf(rollout.getRolloutGroups().size())); + proxyRollout.setCreatedDate(SPDateTimeUtil.getFormattedDate(rollout.getCreatedAt())); + proxyRollout.setModifiedDate(SPDateTimeUtil.getFormattedDate(rollout.getLastModifiedAt())); + proxyRollout.setCreatedBy(HawkbitCommonUtil.getIMUser(rollout.getCreatedBy())); + proxyRollout.setLastModifiedBy(HawkbitCommonUtil.getIMUser(rollout.getLastModifiedBy())); + proxyRollout.setForcedTime(rollout.getForcedTime()); + proxyRollout.setId(rollout.getId()); + proxyRollout.setStatus(rollout.getStatus()); + proxyRollout.setRendererData(new RendererData(rollout.getName(), rollout.getStatus().toString())); - /* - * (non-Javadoc) - * - * @see - * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#saveBeans(java - * .util.List, java.util.List, java.util.List) - */ - @Override - protected void saveBeans(final List arg0, final List arg1, final List arg2) { - /** - * CRUD operations on Target will be done through repository methods - */ - } + final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); + proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); + proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); - /* - * (non-Javadoc) - * - * @see org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#size() - */ - @Override - public int size() { - int size = getRolloutManagement().countRolloutsAll().intValue(); - if (!Strings.isNullOrEmpty(searchText)) { - size = getRolloutManagement().countRolloutsAllByFilters(searchText).intValue(); - } - return size; - } + proxyRolloutList.add(proxyRollout); + } + return proxyRolloutList; + } - /** - * @return the rolloutManagement - */ - public RolloutManagement getRolloutManagement() { - if (null == rolloutManagement) { - rolloutManagement = SpringContextHelper.getBean(RolloutManagement.class); - } - return rolloutManagement; - } + /* + * (non-Javadoc) + * + * @see + * org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#saveBeans(java + * .util.List, java.util.List, java.util.List) + */ + @Override + protected void saveBeans(final List arg0, final List arg1, + final List arg2) { + /** + * CRUD operations on Target will be done through repository methods + */ + } - /** - * @return the filterQueryManagement - */ - public TargetFilterQueryManagement getFilterQueryManagement() { - if (null == filterQueryManagement) { - filterQueryManagement = SpringContextHelper.getBean(TargetFilterQueryManagement.class); - } - return filterQueryManagement; - } + /* + * (non-Javadoc) + * + * @see org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery#size() + */ + @Override + public int size() { + int size = getRolloutManagement().countRolloutsAll().intValue(); + if (!Strings.isNullOrEmpty(searchText)) { + size = getRolloutManagement().countRolloutsAllByFilters(searchText).intValue(); + } + return size; + } - /** - * @return the rolloutUIState - */ - public RolloutUIState getRolloutUIState() { - if (null == rolloutUIState) { - rolloutUIState = SpringContextHelper.getBean(RolloutUIState.class); - } - return rolloutUIState; - } + /** + * @return the rolloutManagement + */ + public RolloutManagement getRolloutManagement() { + if (null == rolloutManagement) { + rolloutManagement = SpringContextHelper.getBean(RolloutManagement.class); + } + return rolloutManagement; + } + + /** + * @return the filterQueryManagement + */ + public TargetFilterQueryManagement getFilterQueryManagement() { + if (null == filterQueryManagement) { + filterQueryManagement = SpringContextHelper.getBean(TargetFilterQueryManagement.class); + } + return filterQueryManagement; + } + + /** + * @return the rolloutUIState + */ + public RolloutUIState getRolloutUIState() { + if (null == rolloutUIState) { + rolloutUIState = SpringContextHelper.getBean(RolloutUIState.class); + } + return rolloutUIState; + } } 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 65f94aee6..b6e828d6c 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 @@ -22,7 +22,7 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; import org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; @@ -145,7 +145,7 @@ public class RolloutListGrid extends AbstractGrid { .setValue(Long.valueOf(rollout.getRolloutGroups().size())); } item.getItemProperty(customObject) - .setValue(new CustomObject(rollout.getName(), rollout.getStatus().toString())); + .setValue(new RendererData(rollout.getName(), rollout.getStatus().toString())); } @@ -160,7 +160,7 @@ public class RolloutListGrid extends AbstractGrid { protected void addContainerProperties() { final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGridContainer.addContainerProperty(customObject, CustomObject.class, null, false, false); + rolloutGridContainer.addContainerProperty(customObject, RendererData.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, false); @@ -287,7 +287,7 @@ public class RolloutListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - CustomObjectRenderer customObjectRenderer = new CustomObjectRenderer(CustomObject.class); + CustomObjectRenderer customObjectRenderer = new CustomObjectRenderer(RendererData.class); customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); getColumn(customObject).setRenderer(customObjectRenderer); @@ -452,7 +452,7 @@ public class RolloutListGrid extends AbstractGrid { } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { return SPUILabelDefinitions.ACTION.toLowerCase(); } else if (customObject.equals(cell.getPropertyId())) { - return ((CustomObject) cell.getProperty().getValue()).getName(); + return ((RendererData) cell.getProperty().getValue()).getName(); } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { return DistributionBarHelper .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); 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 71fe2aa8e..418ec5e40 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 @@ -9,10 +9,10 @@ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; /** - * Proxy rollout group with custom properties. + * Proxy rollout group with renderer properties. * */ public class ProxyRolloutGroup extends RolloutGroup { @@ -41,14 +41,14 @@ public class ProxyRolloutGroup extends RolloutGroup { private String totalTargetsCount; - private CustomObject customObject; + private RendererData rendererData; - public CustomObject getCustomObject() { - return customObject; + public RendererData getRendererData() { + return rendererData; } - public void setCustomObject(CustomObject customObject) { - this.customObject = customObject; + public void setRendererData(RendererData rendererData) { + this.rendererData = rendererData; } /** diff --git a/hawkbit-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 index 1902a7d9d..b025cb4bd 100644 --- a/hawkbit-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 @@ -15,7 +15,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -35,160 +35,160 @@ import org.vaadin.addons.lazyquerycontainer.QueryDefinition; */ public class RolloutGroupBeanQuery extends AbstractBeanQuery { - private static final long serialVersionUID = 5342450502894318589L; + private static final long serialVersionUID = 5342450502894318589L; - private Sort sort = new Sort(Direction.ASC, "createdAt"); + private Sort sort = new Sort(Direction.ASC, "createdAt"); - private transient Page firstPageRolloutGroupSets = null; + private transient Page firstPageRolloutGroupSets = null; - private transient RolloutManagement rolloutManagement; + private transient RolloutManagement rolloutManagement; - private transient RolloutGroupManagement rolloutGroupManagement; + private transient RolloutGroupManagement rolloutGroupManagement; - private transient RolloutUIState rolloutUIState; + private transient RolloutUIState rolloutUIState; - private final Long rolloutId; + private final Long rolloutId; - /** - * Parametric Constructor. - * - * @param definition - * as QueryDefinition - * @param queryConfig - * as Config - * @param sortPropertyIds - * as sort - * @param sortStates - * as Sort status - */ - public RolloutGroupBeanQuery(final QueryDefinition definition, final Map queryConfig, - final Object[] sortPropertyIds, final boolean[] sortStates) { - super(definition, queryConfig, sortPropertyIds, sortStates); + /** + * Parametric Constructor. + * + * @param definition + * as QueryDefinition + * @param queryConfig + * as Config + * @param sortPropertyIds + * as sort + * @param sortStates + * as Sort status + */ + public RolloutGroupBeanQuery(final QueryDefinition definition, final Map queryConfig, + final Object[] sortPropertyIds, final boolean[] sortStates) { + super(definition, queryConfig, sortPropertyIds, sortStates); - rolloutId = getRolloutId(); + rolloutId = getRolloutId(); - if (HawkbitCommonUtil.checkBolArray(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortPropertyIds[0]); - // Add sort. - for (int targetId = 1; targetId < sortPropertyIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, - (String) sortPropertyIds[targetId])); - } - } - } + if (HawkbitCommonUtil.checkBolArray(sortStates)) { + // Initalize Sor + sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortPropertyIds[0]); + // Add sort. + for (int targetId = 1; targetId < sortPropertyIds.length; targetId++) { + sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, + (String) sortPropertyIds[targetId])); + } + } + } - /** - * @return - */ - private Long getRolloutId() { - return getRolloutUIState().getRolloutId().isPresent() ? getRolloutUIState().getRolloutId().get() : null; - } + /** + * @return + */ + private Long getRolloutId() { + return getRolloutUIState().getRolloutId().isPresent() ? getRolloutUIState().getRolloutId().get() : null; + } - @Override - protected ProxyRolloutGroup constructBean() { - return new ProxyRolloutGroup(); - } + @Override + protected ProxyRolloutGroup constructBean() { + return new ProxyRolloutGroup(); + } - @Override - protected List loadBeans(final int startIndex, final int count) { - List proxyRolloutGroupsList = new ArrayList<>(); - if (startIndex == 0 && firstPageRolloutGroupSets != null) { - proxyRolloutGroupsList = firstPageRolloutGroupSets.getContent(); - } else if (null != rolloutId) { - proxyRolloutGroupsList = getRolloutGroupManagement() - .findAllRolloutGroupsWithDetailedStatus(rolloutId, new PageRequest(startIndex / count, count)) - .getContent(); - } - return getProxyRolloutGroupList(proxyRolloutGroupsList); - } + @Override + protected List loadBeans(final int startIndex, final int count) { + List proxyRolloutGroupsList = new ArrayList<>(); + if (startIndex == 0 && firstPageRolloutGroupSets != null) { + proxyRolloutGroupsList = firstPageRolloutGroupSets.getContent(); + } else if (null != rolloutId) { + proxyRolloutGroupsList = getRolloutGroupManagement() + .findAllRolloutGroupsWithDetailedStatus(rolloutId, new PageRequest(startIndex / count, count)) + .getContent(); + } + return getProxyRolloutGroupList(proxyRolloutGroupsList); + } - private List getProxyRolloutGroupList(final List rolloutGroupBeans) { - final List proxyRolloutGroupsList = new ArrayList<>(); - for (final RolloutGroup rolloutGroup : rolloutGroupBeans) { - final ProxyRolloutGroup proxyRolloutGroup = new ProxyRolloutGroup(); - proxyRolloutGroup.setName(rolloutGroup.getName()); - proxyRolloutGroup.setDescription(rolloutGroup.getDescription()); - proxyRolloutGroup.setCreatedDate(SPDateTimeUtil.getFormattedDate(rolloutGroup.getCreatedAt())); - proxyRolloutGroup.setModifiedDate(SPDateTimeUtil.getFormattedDate(rolloutGroup.getLastModifiedAt())); - proxyRolloutGroup.setCreatedBy(HawkbitCommonUtil.getIMUser(rolloutGroup.getCreatedBy())); - proxyRolloutGroup.setLastModifiedBy(HawkbitCommonUtil.getIMUser(rolloutGroup.getLastModifiedBy())); - proxyRolloutGroup.setId(rolloutGroup.getId()); - proxyRolloutGroup.setStatus(rolloutGroup.getStatus()); - proxyRolloutGroup.setErrorAction(rolloutGroup.getErrorAction()); - proxyRolloutGroup.setErrorActionExp(rolloutGroup.getErrorActionExp()); - proxyRolloutGroup.setErrorCondition(rolloutGroup.getErrorCondition()); - proxyRolloutGroup.setErrorConditionExp(rolloutGroup.getErrorConditionExp()); - proxyRolloutGroup.setSuccessCondition(rolloutGroup.getSuccessCondition()); - proxyRolloutGroup.setSuccessConditionExp(rolloutGroup.getSuccessConditionExp()); - proxyRolloutGroup.setFinishedPercentage(calculateFinishedPercentage(rolloutGroup)); - - proxyRolloutGroup.setCustomObject(new CustomObject(rolloutGroup.getName(), null)); + private List getProxyRolloutGroupList(final List rolloutGroupBeans) { + final List proxyRolloutGroupsList = new ArrayList<>(); + for (final RolloutGroup rolloutGroup : rolloutGroupBeans) { + final ProxyRolloutGroup proxyRolloutGroup = new ProxyRolloutGroup(); + proxyRolloutGroup.setName(rolloutGroup.getName()); + proxyRolloutGroup.setDescription(rolloutGroup.getDescription()); + proxyRolloutGroup.setCreatedDate(SPDateTimeUtil.getFormattedDate(rolloutGroup.getCreatedAt())); + proxyRolloutGroup.setModifiedDate(SPDateTimeUtil.getFormattedDate(rolloutGroup.getLastModifiedAt())); + proxyRolloutGroup.setCreatedBy(HawkbitCommonUtil.getIMUser(rolloutGroup.getCreatedBy())); + proxyRolloutGroup.setLastModifiedBy(HawkbitCommonUtil.getIMUser(rolloutGroup.getLastModifiedBy())); + proxyRolloutGroup.setId(rolloutGroup.getId()); + proxyRolloutGroup.setStatus(rolloutGroup.getStatus()); + proxyRolloutGroup.setErrorAction(rolloutGroup.getErrorAction()); + proxyRolloutGroup.setErrorActionExp(rolloutGroup.getErrorActionExp()); + proxyRolloutGroup.setErrorCondition(rolloutGroup.getErrorCondition()); + proxyRolloutGroup.setErrorConditionExp(rolloutGroup.getErrorConditionExp()); + proxyRolloutGroup.setSuccessCondition(rolloutGroup.getSuccessCondition()); + proxyRolloutGroup.setSuccessConditionExp(rolloutGroup.getSuccessConditionExp()); + proxyRolloutGroup.setFinishedPercentage(calculateFinishedPercentage(rolloutGroup)); - proxyRolloutGroup.setTotalTargetsCount(String.valueOf(rolloutGroup.getTotalTargets())); - proxyRolloutGroup.setTotalTargetCountStatus(rolloutGroup.getTotalTargetCountStatus()); + proxyRolloutGroup.setRendererData(new RendererData(rolloutGroup.getName(), null)); - proxyRolloutGroupsList.add(proxyRolloutGroup); - } - return proxyRolloutGroupsList; - } + proxyRolloutGroup.setTotalTargetsCount(String.valueOf(rolloutGroup.getTotalTargets())); + proxyRolloutGroup.setTotalTargetCountStatus(rolloutGroup.getTotalTargetCountStatus()); - private String calculateFinishedPercentage(final RolloutGroup rolloutGroup) { - return HawkbitCommonUtil.formattingFinishedPercentage(rolloutGroup, getRolloutManagement() - .getFinishedPercentForRunningGroup(rolloutGroup.getRollout().getId(), rolloutGroup)); - } + proxyRolloutGroupsList.add(proxyRolloutGroup); + } + return proxyRolloutGroupsList; + } - @Override - protected void saveBeans(final List arg0, final List arg1, - final List arg2) { - /** - * CRUD operations be done through repository methods. - */ - } + private String calculateFinishedPercentage(final RolloutGroup rolloutGroup) { + return HawkbitCommonUtil.formattingFinishedPercentage(rolloutGroup, getRolloutManagement() + .getFinishedPercentForRunningGroup(rolloutGroup.getRollout().getId(), rolloutGroup)); + } - @Override - public int size() { - long size = 0; - if (null != rolloutId) { - firstPageRolloutGroupSets = getRolloutGroupManagement().findAllRolloutGroupsWithDetailedStatus(rolloutId, - new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort)); - size = firstPageRolloutGroupSets.getTotalElements(); - } - if (size > Integer.MAX_VALUE) { - return Integer.MAX_VALUE; - } + @Override + protected void saveBeans(final List arg0, final List arg1, + final List arg2) { + /** + * CRUD operations be done through repository methods. + */ + } - return (int) size; - } + @Override + public int size() { + long size = 0; + if (null != rolloutId) { + firstPageRolloutGroupSets = getRolloutGroupManagement().findAllRolloutGroupsWithDetailedStatus(rolloutId, + new PageRequest(0, SPUIDefinitions.PAGE_SIZE, sort)); + size = firstPageRolloutGroupSets.getTotalElements(); + } + if (size > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } - /** - * @return the rolloutManagement - */ - public RolloutManagement getRolloutManagement() { - if (null == rolloutManagement) { - rolloutManagement = SpringContextHelper.getBean(RolloutManagement.class); - } - return rolloutManagement; - } + return (int) size; + } - /** - * @return the rolloutManagement - */ - public RolloutGroupManagement getRolloutGroupManagement() { - if (null == rolloutGroupManagement) { - rolloutGroupManagement = SpringContextHelper.getBean(RolloutGroupManagement.class); - } - return rolloutGroupManagement; - } + /** + * @return the rolloutManagement + */ + public RolloutManagement getRolloutManagement() { + if (null == rolloutManagement) { + rolloutManagement = SpringContextHelper.getBean(RolloutManagement.class); + } + return rolloutManagement; + } - /** - * @return the rolloutUIState - */ - public RolloutUIState getRolloutUIState() { - if (null == rolloutUIState) { - rolloutUIState = SpringContextHelper.getBean(RolloutUIState.class); - } - return rolloutUIState; - } + /** + * @return the rolloutManagement + */ + public RolloutGroupManagement getRolloutGroupManagement() { + if (null == rolloutGroupManagement) { + rolloutGroupManagement = SpringContextHelper.getBean(RolloutGroupManagement.class); + } + return rolloutGroupManagement; + } + + /** + * @return the rolloutUIState + */ + public RolloutUIState getRolloutUIState() { + if (null == rolloutUIState) { + rolloutUIState = SpringContextHelper.getBean(RolloutUIState.class); + } + return rolloutUIState; + } } 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 b8a799c41..3ccfb6d2d 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 @@ -23,7 +23,7 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObject; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; import org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; @@ -132,7 +132,7 @@ public class RolloutGroupListGrid extends AbstractGrid { final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource(); rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGroupGridContainer.addContainerProperty(customObject, CustomObject.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(customObject, RendererData.class, null, false, false); rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, false, false); @@ -286,7 +286,7 @@ public class RolloutGroupListGrid extends AbstractGrid { } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { return SPUILabelDefinitions.ACTION.toLowerCase(); } else if (customObject.equals(cell.getPropertyId())) { - return ((CustomObject) cell.getProperty().getValue()).getName(); + return ((RendererData) cell.getProperty().getValue()).getName(); } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { return DistributionBarHelper .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); From 97f099d1946c493999a5794a6cd0ee6674d03d36 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 19 Apr 2016 09:10:27 +0200 Subject: [PATCH 155/344] 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 156/344] 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 702decee621284b3a0504e85bbcee7b5cb0c557c Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 19 Apr 2016 10:42:29 +0200 Subject: [PATCH 157/344] Rename deadletter queue and add ttl Signed-off-by: SirWayne --- .../src/main/resources/hawkbitdefaults.properties | 2 +- .../java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java | 6 ++++++ .../main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties index 198fce255..488777b8d 100644 --- a/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties +++ b/hawkbit-autoconfigure/src/main/resources/hawkbitdefaults.properties @@ -42,6 +42,6 @@ hawkbit.controller.minPollingTime=00:00:30 # Configuration for RabbitMQ integration -hawkbit.dmf.rabbitmq.deadLetterQueue=dmf_connector_deadletter +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 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 448206924..20a11713f 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 @@ -41,6 +41,12 @@ public class AmqpConfiguration { @Autowired private ConnectionFactory connectionFactory; + /** + * Create a {@link RabbitAdmin} and ignore declaration exceptions. + * {@link RabbitAdmin#setIgnoreDeclarationExceptions(boolean)} + * + * @return the bean + */ @Bean public RabbitAdmin rabbitAdmin() { final RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); 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 38c6d34b3..ce6068ce8 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 @@ -21,7 +21,7 @@ public class AmqpProperties { /** * DMF API dead letter queue. */ - private String deadLetterQueue = "dmf_connector_deadletter"; + private String deadLetterQueue = "dmf_connector_deadletter_ttl"; /** * DMF API dead letter exchange. From 5437f36c7507048354df2021a2a72cc43e9bbca8 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 19 Apr 2016 10:42:56 +0200 Subject: [PATCH 158/344] Rename deadletter queue and add ttl Signed-off-by: SirWayne --- .../src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hawkbit-example-app/src/main/resources/application.properties b/examples/hawkbit-example-app/src/main/resources/application.properties index 7864087c8..64661d2ec 100644 --- a/examples/hawkbit-example-app/src/main/resources/application.properties +++ b/examples/hawkbit-example-app/src/main/resources/application.properties @@ -21,7 +21,7 @@ spring.rabbitmq.password=guest spring.rabbitmq.virtualHost=/ spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 -hawkbit.dmf.rabbitmq.deadLetterQueue=dmf_connector_deadletter +hawkbit.dmf.rabbitmq.deadLetterQueue=dmf_connector_deadletter_ttl hawkbit.dmf.rabbitmq.deadLetterExchange=dmf.connector.deadletter hawkbit.dmf.rabbitmq.receiverQueue=dmf_receiver From 86e313fc291f0d153c699f3e8195233469288c4c Mon Sep 17 00:00:00 2001 From: venu1278 Date: Tue, 19 Apr 2016 14:47:31 +0530 Subject: [PATCH 159/344] Rollout management issues Signed-off-by: venu1278 --- ...nector.java => RolloutRendererConnector.java} | 10 +++++----- ...ObjectRenederer.java => RolloutRenderer.java} | 4 ++-- ...endererData.java => RolloutRendererData.java} | 6 +++--- ...mObjectRenderer.java => RolloutRenderer.java} | 16 ++++++++-------- .../hawkbit/ui/rollout/rollout/ProxyRollout.java | 9 ++++----- .../ui/rollout/rollout/RolloutBeanQuery.java | 4 ++-- .../ui/rollout/rollout/RolloutListGrid.java | 12 ++++++------ .../rollout/rolloutgroup/ProxyRolloutGroup.java | 8 ++++---- .../rolloutgroup/RolloutGroupBeanQuery.java | 4 ++-- .../rolloutgroup/RolloutGroupListGrid.java | 10 +++++----- 10 files changed, 41 insertions(+), 42 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/{CustomObjectRendererConnector.java => RolloutRendererConnector.java} (80%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/{CustomObjectRenederer.java => RolloutRenderer.java} (91%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/{RendererData.java => RolloutRendererData.java} (87%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/{CustomObjectRenderer.java => RolloutRenderer.java} (73%) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java similarity index 80% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java index 321b8876e..2175dea29 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/CustomObjectRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/RolloutRendererConnector.java @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.customrenderers.client; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import com.google.web.bindery.event.shared.HandlerRegistration; import com.vaadin.client.connectors.ClickableRendererConnector; @@ -21,12 +21,12 @@ import elemental.json.JsonObject; * A connector for {@link CustomObjectRenderer }. * */ -@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer.class) -public class CustomObjectRendererConnector extends ClickableRendererConnector { +@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer.class) +public class RolloutRendererConnector extends ClickableRendererConnector { private static final long serialVersionUID = 7734682321931830566L; - public org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObjectRenederer getRenderer() { - return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.CustomObjectRenederer) super.getRenderer(); + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRenderer) super.getRenderer(); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java similarity index 91% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java index 13d5887ca..da8fc2544 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/CustomObjectRenederer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/RolloutRenderer.java @@ -18,7 +18,7 @@ import com.vaadin.client.widget.grid.RendererCellReference; * Used to display button with link. * */ -public class CustomObjectRenederer extends ClickableRenderer { +public class RolloutRenderer extends ClickableRenderer { @Override public VButton createWidget() { @@ -29,7 +29,7 @@ public class CustomObjectRenederer extends ClickableRenderer { +public class RolloutRenderer extends ClickableRenderer { private static final long serialVersionUID = -8754180585906263554L; /** * Creates a new custom object renderer. */ - public CustomObjectRenderer() { - super(RendererData.class, null); + public RolloutRenderer() { + super(RolloutRendererData.class, null); } /** @@ -39,7 +39,7 @@ public class CustomObjectRenderer extends ClickableRenderer { * Class */ - public CustomObjectRenderer(Class presentationType) { + public RolloutRenderer(Class presentationType) { super(presentationType); } @@ -49,13 +49,13 @@ public class CustomObjectRenderer extends ClickableRenderer { * @param listener * the click listener to register */ - public CustomObjectRenderer(RendererClickListener listener) { + public RolloutRenderer(RendererClickListener listener) { this(); addClickListener(listener); } @Override - public JsonValue encode(RendererData resource) { - return super.encode(resource, RendererData.class); + public JsonValue encode(RolloutRendererData resource) { + return super.encode(resource, RolloutRendererData.class); } } 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 c3e3d3896..75c0f59cb 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 @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.rollout.rollout; import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import com.vaadin.server.FontAwesome; @@ -33,15 +33,14 @@ public class ProxyRollout extends Rollout { private String totalTargetsCount; - private RendererData rendererData; + private RolloutRendererData rendererData; - - public RendererData getRendererData() { + public RolloutRendererData getRendererData() { return rendererData; } - public void setRendererData(RendererData rendererData) { + public void setRendererData(RolloutRendererData rendererData) { this.rendererData = rendererData; } 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 9d915c80a..aa98f6bf4 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 @@ -17,7 +17,7 @@ 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; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -131,7 +131,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); - proxyRollout.setRendererData(new RendererData(rollout.getName(), rollout.getStatus().toString())); + proxyRollout.setRendererData(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); 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 b6e828d6c..4f9ba636f 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 @@ -22,8 +22,8 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; -import org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; +import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; @@ -145,7 +145,7 @@ public class RolloutListGrid extends AbstractGrid { .setValue(Long.valueOf(rollout.getRolloutGroups().size())); } item.getItemProperty(customObject) - .setValue(new RendererData(rollout.getName(), rollout.getStatus().toString())); + .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); } @@ -160,7 +160,7 @@ public class RolloutListGrid extends AbstractGrid { protected void addContainerProperties() { final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGridContainer.addContainerProperty(customObject, RendererData.class, null, false, false); + rolloutGridContainer.addContainerProperty(customObject, RolloutRendererData.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, false); @@ -287,7 +287,7 @@ public class RolloutListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - CustomObjectRenderer customObjectRenderer = new CustomObjectRenderer(RendererData.class); + RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); getColumn(customObject).setRenderer(customObjectRenderer); @@ -452,7 +452,7 @@ public class RolloutListGrid extends AbstractGrid { } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { return SPUILabelDefinitions.ACTION.toLowerCase(); } else if (customObject.equals(cell.getPropertyId())) { - return ((RendererData) cell.getProperty().getValue()).getName(); + return ((RolloutRendererData) cell.getProperty().getValue()).getName(); } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { return DistributionBarHelper .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); 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 418ec5e40..be1e09794 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 @@ -9,7 +9,7 @@ package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; /** * Proxy rollout group with renderer properties. @@ -41,13 +41,13 @@ public class ProxyRolloutGroup extends RolloutGroup { private String totalTargetsCount; - private RendererData rendererData; + private RolloutRendererData rendererData; - public RendererData getRendererData() { + public RolloutRendererData getRendererData() { return rendererData; } - public void setRendererData(RendererData rendererData) { + public void setRendererData(RolloutRendererData rendererData) { this.rendererData = rendererData; } diff --git a/hawkbit-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 index b025cb4bd..0850164c9 100644 --- a/hawkbit-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 @@ -15,7 +15,7 @@ import java.util.Map; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; @@ -123,7 +123,7 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery proxyRolloutGroup.setSuccessConditionExp(rolloutGroup.getSuccessConditionExp()); proxyRolloutGroup.setFinishedPercentage(calculateFinishedPercentage(rolloutGroup)); - proxyRolloutGroup.setRendererData(new RendererData(rolloutGroup.getName(), null)); + proxyRolloutGroup.setRendererData(new RolloutRendererData(rolloutGroup.getName(), null)); proxyRolloutGroup.setTotalTargetsCount(String.valueOf(rolloutGroup.getTotalTargets())); proxyRolloutGroup.setTotalTargetCountStatus(rolloutGroup.getTotalTargetCountStatus()); 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 3ccfb6d2d..da0a8271a 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 @@ -23,8 +23,8 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; -import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RendererData; -import org.eclipse.hawkbit.ui.customrenderers.renderers.CustomObjectRenderer; +import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; +import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; @@ -132,7 +132,7 @@ public class RolloutGroupListGrid extends AbstractGrid { final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource(); rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGroupGridContainer.addContainerProperty(customObject, RendererData.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(customObject, RolloutRendererData.class, null, false, false); rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, false, false); @@ -238,7 +238,7 @@ public class RolloutGroupListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), new TotalTargetCountStatusConverter()); if (permissionChecker.hasRolloutTargetsReadPermission()) { - getColumn(customObject).setRenderer(new CustomObjectRenderer(event -> onClickOfRolloutGroupName(event))); + getColumn(customObject).setRenderer(new RolloutRenderer(event -> onClickOfRolloutGroupName(event))); } } @@ -286,7 +286,7 @@ public class RolloutGroupListGrid extends AbstractGrid { } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { return SPUILabelDefinitions.ACTION.toLowerCase(); } else if (customObject.equals(cell.getPropertyId())) { - return ((RendererData) cell.getProperty().getValue()).getName(); + return ((RolloutRendererData) cell.getProperty().getValue()).getName(); } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { return DistributionBarHelper .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); From 3c454bfb9be3eb9485d843c11a994db93cc64554 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 19 Apr 2016 11:27:33 +0200 Subject: [PATCH 160/344] Modfiy username formatting Signed-off-by: SirWayne --- .../ui/common/UserDetailsFormatter.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) 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 61261c1d1..df741a6fd 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 @@ -28,7 +28,7 @@ import com.vaadin.server.VaadinService; */ public final class UserDetailsFormatter { - private static final String TRIM_APPENDIX = ".."; + private static final String TRIM_APPENDIX = "..."; private static final String DETAIL_SEPERATOR = ", "; private UserDetailsFormatter() { @@ -45,7 +45,7 @@ public final class UserDetailsFormatter { * @return the formatted user name (max 100 characters) cannot be */ public static String loadAndFormatUsername(final String username) { - return loadAndFormatUsername(username, 50); + return loadAndFormatUsername(username, 100); } /** @@ -93,7 +93,7 @@ public final class UserDetailsFormatter { * @return the formatted user name (max 12 characters) cannot be */ public static String loadAndFormatCurrentUsername() { - return loadAndFormatUsername(getCurrentUser().getUsername(), 6); + return loadAndFormatUsername(getCurrentUser().getUsername(), 12); } /** @@ -109,7 +109,7 @@ public final class UserDetailsFormatter { * the user name * @param expectedNameLength * the name size of each name part - * @return the formatted user name (max 2 * expectedNameLength characters) + * @return the formatted user name (max expectedNameLength characters) * cannot be */ public static String loadAndFormatUsername(final String username, final int expectedNameLength) { @@ -120,13 +120,21 @@ public final class UserDetailsFormatter { final UserPrincipal userPrincipal = (UserPrincipal) userDetails; - final String trimmedFirstname = trimAndFormatDetail(userPrincipal.getFirstname(), expectedNameLength); - final String trimmedLastname = trimAndFormatDetail(userPrincipal.getLastname(), expectedNameLength); + String firstname = StringUtils.defaultIfEmpty(userPrincipal.getFirstname(), StringUtils.EMPTY); - if (StringUtils.isEmpty(trimmedFirstname) && StringUtils.isEmpty(trimmedLastname)) { - return StringUtils.substring(userPrincipal.getLoginname(), 0, 2 * expectedNameLength); + if (!StringUtils.isEmpty(firstname)) { + firstname += DETAIL_SEPERATOR; } - return trimmedFirstname + DETAIL_SEPERATOR + trimmedLastname; + + final String firstAndLastname = firstname + + StringUtils.defaultIfEmpty(userPrincipal.getLastname(), StringUtils.EMPTY); + + final String trimmedUsername = trimAndFormatDetail(firstAndLastname, expectedNameLength); + + if (StringUtils.isEmpty(trimmedUsername)) { + return trimAndFormatDetail(userPrincipal.getLoginname(), expectedNameLength); + } + return firstAndLastname; } /** @@ -168,8 +176,8 @@ public final class UserDetailsFormatter { throw new UsernameNotFoundException("User not found " + username); } return loadUserByUsername; - } catch (final UsernameNotFoundException e) { // NOSONAR + } catch (final UsernameNotFoundException e) { + return new User(username, "", Collections.emptyList()); } - return new User(username, "", Collections.emptyList()); } } From 681a23e51dec4ccc949dfa37fa4ceb10669269d8 Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Wed, 20 Apr 2016 12:31:32 +0200 Subject: [PATCH 161/344] Update UserDetailsFormatter.java --- .../org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 df741a6fd..04ad0c51a 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 @@ -98,7 +98,7 @@ public final class UserDetailsFormatter { /** * Load user details by the user name and format the user name. If the - * loaded {@link UserDetails} is not a instance of a {@link UserPrincipal}, + * loaded {@link UserDetails} is not an instance of a {@link UserPrincipal}, * then just the {@link UserDetails#getUsername()} will return. * * If first and last name available, they will combined. Otherwise the From 5027b36c59dc01a85c431c232bb5661ae6227db2 Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Wed, 20 Apr 2016 12:49:50 +0200 Subject: [PATCH 162/344] Update SPDateTimeUtil.java --- .../main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java index d28ac5f05..49bae86e1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPDateTimeUtil.java @@ -101,7 +101,7 @@ public final class SPDateTimeUtil { } /** - * Get formatted date 'last modefied at' by entity. + * Get formatted date 'last modified at' by entity. * * @param baseEntity * the entity From 3c0e34ee410cbc2f282a168916a94fa1d549aa5f Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 20 Apr 2016 13:42:43 +0200 Subject: [PATCH 163/344] 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 164/344] 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 165/344] 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 1220b490f8bbd76fb7bcbbcfba7cc9dcb5b0645e Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 20 Apr 2016 16:15:03 +0200 Subject: [PATCH 166/344] Small fix since checkbox was using wrong item for enabling Signed-off-by: Jonathan Philip Knoblauch --- .../ui/tenantconfiguration/AuthenticationConfigurationView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java index 616acaf3f..329318b0f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/tenantconfiguration/AuthenticationConfigurationView.java @@ -113,7 +113,7 @@ public class AuthenticationConfigurationView extends BaseConfigurationView downloadAnonymousCheckBox = SPUIComponentProvider.getCheckBox("", DIST_CHECKBOX_STYLE, null, false, ""); downloadAnonymousCheckBox.setId("downloadanonymouscheckbox"); - downloadAnonymousCheckBox.setValue(targetSecurityTokenAuthenticationConfigurationItem.isConfigEnabled()); + downloadAnonymousCheckBox.setValue(anonymousDownloadAuthenticationConfigurationItem.isConfigEnabled()); downloadAnonymousCheckBox.addValueChangeListener(this); anonymousDownloadAuthenticationConfigurationItem.addChangeListener(this); gridLayout.addComponent(downloadAnonymousCheckBox, 0, 3); From c3c405c986dd85b156aa8161e87a300231cc318b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 20 Apr 2016 17:33:03 +0200 Subject: [PATCH 167/344] 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 168/344] 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 d561ad99de28917a053b0ef2bd957a12d49407e0 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 21 Apr 2016 08:06:10 +0200 Subject: [PATCH 169/344] fix rollout renderer, using wrong itemd ID property naming Signed-off-by: Michael Hirsch --- .../ui/rollout/rollout/ProxyRollout.java | 10 +- .../ui/rollout/rollout/RolloutBeanQuery.java | 2 +- .../ui/rollout/rollout/RolloutListGrid.java | 1116 ++++++++--------- .../rolloutgroup/ProxyRolloutGroup.java | 10 +- .../rolloutgroup/RolloutGroupBeanQuery.java | 2 +- .../rolloutgroup/RolloutGroupListGrid.java | 553 ++++---- 6 files changed, 847 insertions(+), 846 deletions(-) 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 75c0f59cb..6514ba2df 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 @@ -33,15 +33,15 @@ public class ProxyRollout extends Rollout { private String totalTargetsCount; - private RolloutRendererData rendererData; + private RolloutRendererData rolloutRendererData; - public RolloutRendererData getRendererData() { - return rendererData; + public RolloutRendererData getRolloutRendererData() { + return rolloutRendererData; } - public void setRendererData(RolloutRendererData rendererData) { - this.rendererData = rendererData; + public void setRolloutRendererData(RolloutRendererData rendererData) { + this.rolloutRendererData = rendererData; } /** 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 aa98f6bf4..34ae323da 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 @@ -131,7 +131,7 @@ public class RolloutBeanQuery extends AbstractBeanQuery { proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); - proxyRollout.setRendererData(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); + proxyRollout.setRolloutRendererData(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); 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 4f9ba636f..1bb0fd831 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 @@ -23,9 +23,9 @@ import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; -import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; +import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -68,562 +68,562 @@ import com.vaadin.ui.renderers.HtmlRenderer; @ViewScope public class RolloutListGrid extends AbstractGrid { - private static final long serialVersionUID = 4060904914954370524L; - - 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 customObject = "customObject"; - - @Autowired - private transient RolloutManagement rolloutManagement; - - @Autowired - private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; - - @Autowired - private UINotification uiNotification; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Autowired - private transient SpPermissionChecker permissionChecker; - - private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - - /** - * Handles the RolloutEvent to refresh Grid. - * - */ - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - switch (event) { - case FILTER_BY_TEXT: - case CREATE_ROLLOUT: - case UPDATE_ROLLOUT: - case SHOW_ROLLOUTS: - refreshGrid(); - break; - default: - return; - } - } - - /** - * Handles the RolloutChangeEvent to refresh the item in the grid. - * - * @param rolloutChangeEvent - * the event which contains the rollout which has been changed - */ - @SuppressWarnings("unchecked") - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { - if (!rolloutUIState.isShowRollOuts()) { - return; - } - final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); - final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); - if (item == null) { - return; - } - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); - final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); - final int groupsCreated = rollout.getRolloutGroupsCreated(); - if (groupsCreated != 0) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); - } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) - .setValue(Long.valueOf(rollout.getRolloutGroups().size())); - } - item.getItemProperty(customObject) - .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); - - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } - - @Override - protected void addContainerProperties() { - final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGridContainer.addContainerProperty(customObject, RolloutRendererData.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); - - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - 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); - - } - - @Override - protected void setColumnExpandRatio() { - - getColumn(customObject).setMinimumWidth(40); - getColumn(customObject).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - - 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); - - setFrozenColumnCount(getColumns().size()); - } - - @Override - protected void setColumnHeaderNames() { - getColumn(customObject).setHeaderCaption(i18n.get("header.name")); - 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")); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); - getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - 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")); - } - - @Override - protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; - } - - @Override - protected void setColumnProperties() { - final List columnList = new ArrayList<>(); - columnList.add(customObject); - columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - 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(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); - alignColumns(); - } - - @Override - protected void setHiddenColumns() { - final List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (final Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - - } - - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } - - @Override - protected void addColumnRenderes() { - getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), - new TotalTargetGroupsConverter()); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new TotalTargetCountStatusConverter()); - - createRolloutStatusToFontMap(); - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); - - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - - RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); - customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); - getColumn(customObject).setRenderer(customObjectRenderer); - - } - - private void createRolloutStatusToFontMap() { - statusIconMap.put(RolloutStatus.FINISHED, - new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); - statusIconMap.put(RolloutStatus.PAUSED, - new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); - statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); - statusIconMap.put(RolloutStatus.READY, - new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); - statusIconMap.put(RolloutStatus.STOPPED, - new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); - statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); - statusIconMap.put(RolloutStatus.ERROR_CREATING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.ERROR_STARTING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - } - - 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; - } - }); - } - - private void onClickOfRolloutName(final RendererClickEvent event) { - rolloutUIState.setRolloutId((long) event.getItemId()); - final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutUIState.setRolloutName(rolloutName); - final String ds = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); - rolloutUIState.setRolloutDistributionSet(ds); - 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(event -> menuItemClicked(event)); - 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()) { - 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; - } - } - - 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); - } - - private void refreshGrid() { - ((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(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); - } else if (customObject.equals(cell.getPropertyId())) { - return ((RolloutRendererData) cell.getProperty().getValue()).getName(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } - return null; - } - - enum ACTION { - PAUSE, RESUME, START, UPDATE - } - - /** - * Represents data of context menu item. - * - */ - public static class ContextMenuData { - - private Long rolloutId; - - private ACTION action; - - /** - * Set rollout if and action. - * - * @param rolloutId - * id of rollout - * @param action - * user action {@link ACTION} - */ - public ContextMenuData(final Long rolloutId, final ACTION action) { - this.action = action; - this.rolloutId = rolloutId; - } - - /** - * @return the rolloutId - */ - public Long getRolloutId() { - return rolloutId; - } - - /** - * @param rolloutId - * the rolloutId to set - */ - public void setRolloutId(final Long rolloutId) { - this.rolloutId = rolloutId; - } - - /** - * @return the action - */ - public ACTION getAction() { - return action; - } - - /** - * @param action - * the action to set - */ - public void setAction(final ACTION action) { - this.action = action; - } - } - - /** - * - * Converter to convert {@link RolloutStatus} to string. - * - */ - class RolloutStatusConverter implements Converter { - - private static final long serialVersionUID = -1217685750825632678L; - - @Override - public RolloutStatus convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final RolloutStatus value, final Class targetType, - final Locale locale) { - return convertRolloutStatusToString(value); - } - - @Override - public Class getModelType() { - return RolloutStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - - private String convertRolloutStatusToString(final RolloutStatus value) { - final StatusFontIcon statusFontIcon = statusIconMap.get(value); - final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); - } - } - - /** - * Converter to convert {@link TotalTargetCountStatus} to formatted string - * with status and count details. - * - */ - class TotalTargetCountStatusConverter implements Converter { - - private static final long serialVersionUID = -5794528427855153924L; - - @Override - public TotalTargetCountStatus convertToModel(final String value, - final Class targetType, final Locale locale) - 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 { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } - - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - } - - /** - * Converter to convert 0 to empty, if total target groups is zero. - * - */ - class TotalTargetGroupsConverter implements Converter { - - private static final long serialVersionUID = 6589305227035220369L; - - @Override - public Long convertToModel(String value, Class targetType, Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - return null; - } - - @Override - public String convertToPresentation(Long value, Class targetType, Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - if (value == 0) { - return ""; - } - return value.toString(); - } - - @Override - public Class getModelType() { - return Long.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - - } + private static final long serialVersionUID = 4060904914954370524L; + + 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 ROLLOUT_RENDERER_DATA = "rolloutRendererData"; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); + + /** + * Handles the RolloutEvent to refresh Grid. + * + */ + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + switch (event) { + case FILTER_BY_TEXT: + case CREATE_ROLLOUT: + case UPDATE_ROLLOUT: + case SHOW_ROLLOUTS: + refreshGrid(); + break; + default: + return; + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the grid. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + if (!rolloutUIState.isShowRollOuts()) { + return; + } + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + if (item == null) { + return; + } + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + final int groupsCreated = rollout.getRolloutGroupsCreated(); + if (groupsCreated != 0) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); + } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } + item.getItemProperty(ROLLOUT_RENDERER_DATA) + .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); + + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } + + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + 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); + + } + + @Override + protected void setColumnExpandRatio() { + + getColumn(ROLLOUT_RENDERER_DATA).setMinimumWidth(40); + getColumn(ROLLOUT_RENDERER_DATA).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); + + 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + + setFrozenColumnCount(getColumns().size()); + } + + @Override + protected void setColumnHeaderNames() { + getColumn(ROLLOUT_RENDERER_DATA).setHeaderCaption(i18n.get("header.name")); + 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")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + 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")); + } + + @Override + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; + } + + @Override + protected void setColumnProperties() { + final List columnList = new ArrayList<>(); + columnList.add(ROLLOUT_RENDERER_DATA); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + 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(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } + + @Override + protected void setHiddenColumns() { + final List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + for (final Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } + + @Override + protected void addColumnRenderes() { + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), + new TotalTargetGroupsConverter()); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); + + createRolloutStatusToFontMap(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); + + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + + final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); + customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); + getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); + + } + + private void createRolloutStatusToFontMap() { + statusIconMap.put(RolloutStatus.FINISHED, + new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); + statusIconMap.put(RolloutStatus.PAUSED, + new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); + statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); + statusIconMap.put(RolloutStatus.READY, + new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); + statusIconMap.put(RolloutStatus.STOPPED, + new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); + statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); + statusIconMap.put(RolloutStatus.ERROR_CREATING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.ERROR_STARTING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + } + + 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; + } + }); + } + + private void onClickOfRolloutName(final RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutUIState.setRolloutName(rolloutName); + final String ds = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); + rolloutUIState.setRolloutDistributionSet(ds); + 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(event -> menuItemClicked(event)); + 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()) { + 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; + } + } + + 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); + } + + private void refreshGrid() { + ((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(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { + return ((RolloutRendererData) cell.getProperty().getValue()).getName(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } + return null; + } + + enum ACTION { + PAUSE, RESUME, START, UPDATE + } + + /** + * Represents data of context menu item. + * + */ + public static class ContextMenuData { + + private Long rolloutId; + + private ACTION action; + + /** + * Set rollout if and action. + * + * @param rolloutId + * id of rollout + * @param action + * user action {@link ACTION} + */ + public ContextMenuData(final Long rolloutId, final ACTION action) { + this.action = action; + this.rolloutId = rolloutId; + } + + /** + * @return the rolloutId + */ + public Long getRolloutId() { + return rolloutId; + } + + /** + * @param rolloutId + * the rolloutId to set + */ + public void setRolloutId(final Long rolloutId) { + this.rolloutId = rolloutId; + } + + /** + * @return the action + */ + public ACTION getAction() { + return action; + } + + /** + * @param action + * the action to set + */ + public void setAction(final ACTION action) { + this.action = action; + } + } + + /** + * + * Converter to convert {@link RolloutStatus} to string. + * + */ + class RolloutStatusConverter implements Converter { + + private static final long serialVersionUID = -1217685750825632678L; + + @Override + public RolloutStatus convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, final Class targetType, + final Locale locale) { + return convertRolloutStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + private String convertRolloutStatusToString(final RolloutStatus value) { + final StatusFontIcon statusFontIcon = statusIconMap.get(value); + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + } + } + + /** + * Converter to convert {@link TotalTargetCountStatus} to formatted string + * with status and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { + + private static final long serialVersionUID = -5794528427855153924L; + + @Override + public TotalTargetCountStatus convertToModel(final String value, + final Class targetType, final Locale locale) + 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 { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * Converter to convert 0 to empty, if total target groups is zero. + * + */ + class TotalTargetGroupsConverter implements Converter { + + 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 { + return null; + } + + @Override + public String convertToPresentation(final Long value, final Class targetType, + final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + if (value == 0) { + return ""; + } + return value.toString(); + } + + @Override + public Class getModelType() { + return Long.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + } } 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 be1e09794..08f2c0a0b 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 @@ -41,14 +41,14 @@ public class ProxyRolloutGroup extends RolloutGroup { private String totalTargetsCount; - private RolloutRendererData rendererData; + private RolloutRendererData rolloutRendererData; - public RolloutRendererData getRendererData() { - return rendererData; + public RolloutRendererData getRolloutRendererData() { + return rolloutRendererData; } - public void setRendererData(RolloutRendererData rendererData) { - this.rendererData = rendererData; + public void setRolloutRendererData(RolloutRendererData rendererData) { + this.rolloutRendererData = rendererData; } /** diff --git a/hawkbit-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 index 0850164c9..efc350dc4 100644 --- a/hawkbit-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 @@ -123,7 +123,7 @@ public class RolloutGroupBeanQuery extends AbstractBeanQuery proxyRolloutGroup.setSuccessConditionExp(rolloutGroup.getSuccessConditionExp()); proxyRolloutGroup.setFinishedPercentage(calculateFinishedPercentage(rolloutGroup)); - proxyRolloutGroup.setRendererData(new RolloutRendererData(rolloutGroup.getName(), null)); + proxyRolloutGroup.setRolloutRendererData(new RolloutRendererData(rolloutGroup.getName(), null)); proxyRolloutGroup.setTotalTargetsCount(String.valueOf(rolloutGroup.getTotalTargets())); proxyRolloutGroup.setTotalTargetCountStatus(rolloutGroup.getTotalTargetCountStatus()); 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 da0a8271a..f09b02cfc 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 @@ -24,9 +24,8 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; -import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; - +import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; import org.eclipse.hawkbit.ui.rollout.StatusFontIcon; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -60,329 +59,331 @@ import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope public class RolloutGroupListGrid extends AbstractGrid { - private static final long serialVersionUID = 4060904914954370524L; + private static final long serialVersionUID = 4060904914954370524L; - private static final String customObject = "customObject"; + private static final String ROLLOUT_RENDERER_DATA = "rolloutRendererData"; - @Autowired - private transient RolloutGroupManagement rolloutGroupManagement; + @Autowired + private transient RolloutGroupManagement rolloutGroupManagement; - @Autowired - private transient RolloutManagement rolloutManagement; + @Autowired + private transient RolloutManagement rolloutManagement; - @Autowired - private transient RolloutUIState rolloutUIState; + @Autowired + private transient RolloutUIState rolloutUIState; - @Autowired - private transient SpPermissionChecker permissionChecker; + @Autowired + private transient SpPermissionChecker permissionChecker; - private transient Map statusIconMap = new EnumMap<>(RolloutGroupStatus.class); + private transient Map statusIconMap = new EnumMap<>(RolloutGroupStatus.class); - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - if (RolloutEvent.SHOW_ROLLOUT_GROUPS != event) { - return; - } - ((LazyQueryContainer) getContainerDataSource()).refresh(); - } + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + if (RolloutEvent.SHOW_ROLLOUT_GROUPS != event) { + return; + } + ((LazyQueryContainer) getContainerDataSource()).refresh(); + } - /** - * - * Handles the RolloutGroupChangeEvent to refresh the item in the grid. - * - * - * @param rolloutGroupChangeEvent - * the event which contains the rollout group which has been - * change - */ - @SuppressWarnings("unchecked") - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutGroupChangeEvent rolloutGroupChangeEvent) { - if (!rolloutUIState.isShowRolloutGroups()) { - return; - } - final RolloutGroup rolloutGroup = rolloutGroupManagement - .findRolloutGroupWithDetailedStatus(rolloutGroupChangeEvent.getRolloutGroupId()); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutGroup.getId()); - if (item == null) { - return; - } - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rolloutGroup.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) - .setValue(rolloutGroup.getTotalTargetCountStatus()); - item.getItemProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) - .setValue(calculateFinishedPercentage(rolloutGroup)); - } + /** + * + * Handles the RolloutGroupChangeEvent to refresh the item in the grid. + * + * + * @param rolloutGroupChangeEvent + * the event which contains the rollout group which has been + * change + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutGroupChangeEvent rolloutGroupChangeEvent) { + if (!rolloutUIState.isShowRolloutGroups()) { + return; + } + final RolloutGroup rolloutGroup = rolloutGroupManagement + .findRolloutGroupWithDetailedStatus(rolloutGroupChangeEvent.getRolloutGroupId()); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutGroup.getId()); + if (item == null) { + return; + } + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rolloutGroup.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setValue(rolloutGroup.getTotalTargetCountStatus()); + item.getItemProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) + .setValue(calculateFinishedPercentage(rolloutGroup)); + } - private String calculateFinishedPercentage(final RolloutGroup rolloutGroup) { - return HawkbitCommonUtil.formattingFinishedPercentage(rolloutGroup, - rolloutManagement.getFinishedPercentForRunningGroup(rolloutGroup.getRollout().getId(), rolloutGroup)); - } + private String calculateFinishedPercentage(final RolloutGroup rolloutGroup) { + return HawkbitCommonUtil.formattingFinishedPercentage(rolloutGroup, + rolloutManagement.getFinishedPercentForRunningGroup(rolloutGroup.getRollout().getId(), rolloutGroup)); + } - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutGroupBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutGroupBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } - @Override - protected void addContainerProperties() { - final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGroupGridContainer.addContainerProperty(customObject, RolloutRendererData.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE, - String.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, String.class, - null, false, false); + rolloutGroupGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, + false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE, + String.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, String.class, + null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD, String.class, null, - false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD, String.class, null, + false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, - TotalTargetCountStatus.class, null, false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, + false, false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, + TotalTargetCountStatus.class, null, false, false); - } + } - @Override - protected void setColumnExpandRatio() { - getColumn(customObject).setMinimumWidth(40); - getColumn(customObject).setMaximumWidth(200); + @Override + protected void setColumnExpandRatio() { + getColumn(ROLLOUT_RENDERER_DATA).setMinimumWidth(40); + getColumn(ROLLOUT_RENDERER_DATA).setMaximumWidth(200); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); - setFrozenColumnCount(7); - } + setFrozenColumnCount(7); + } - @Override - protected void setColumnHeaderNames() { - getColumn(customObject).setHeaderCaption(i18n.get("header.name")); - getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) - .setHeaderCaption(i18n.get("header.detail.status")); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) - .setHeaderCaption(i18n.get("header.rolloutgroup.installed.percentage")); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD) - .setHeaderCaption(i18n.get("header.rolloutgroup.threshold.error")); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD) - .setHeaderCaption(i18n.get("header.rolloutgroup.threshold")); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); - getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); - } + @Override + protected void setColumnHeaderNames() { + getColumn(ROLLOUT_RENDERER_DATA).setHeaderCaption(i18n.get("header.name")); + getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE) + .setHeaderCaption(i18n.get("header.rolloutgroup.installed.percentage")); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD) + .setHeaderCaption(i18n.get("header.rolloutgroup.threshold.error")); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD) + .setHeaderCaption(i18n.get("header.rolloutgroup.threshold")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); + } - @Override - protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; - } + @Override + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; + } - @Override - protected void setColumnProperties() { - final List columnList = new ArrayList<>(); - columnList.add(customObject); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); - columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE); - columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD); - columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD); - columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); - alignColumns(); - } + @Override + protected void setColumnProperties() { + final List columnList = new ArrayList<>(); + columnList.add(ROLLOUT_RENDERER_DATA); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE); + columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD); + columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD); + columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } - @Override - protected void addColumnRenderes() { - createRolloutGroupStatusToFontMap(); - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), - new RolloutGroupStatusConverter()); + @Override + protected void addColumnRenderes() { + createRolloutGroupStatusToFontMap(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), + new RolloutGroupStatusConverter()); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new TotalTargetCountStatusConverter()); - if (permissionChecker.hasRolloutTargetsReadPermission()) { - getColumn(customObject).setRenderer(new RolloutRenderer(event -> onClickOfRolloutGroupName(event))); - } - } + 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))); + } + } - @Override - protected void setHiddenColumns() { - final List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (final Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - } + @Override + protected void setHiddenColumns() { + final List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + for (final Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + } - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } - private void onClickOfRolloutGroupName(final RendererClickEvent event) { - rolloutUIState - .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); - } + private void onClickOfRolloutGroupName(final RendererClickEvent event) { + rolloutUIState + .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); + } - private void createRolloutGroupStatusToFontMap() { - statusIconMap.put(RolloutGroupStatus.FINISHED, - new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); - statusIconMap.put(RolloutGroupStatus.SCHEDULED, - new StatusFontIcon(FontAwesome.HOURGLASS_1, SPUIStyleDefinitions.STATUS_ICON_PENDING)); - statusIconMap.put(RolloutGroupStatus.RUNNING, - new StatusFontIcon(FontAwesome.ADJUST, SPUIStyleDefinitions.STATUS_ICON_YELLOW)); - statusIconMap.put(RolloutGroupStatus.READY, - new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); - statusIconMap.put(RolloutGroupStatus.ERROR, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - } + private void createRolloutGroupStatusToFontMap() { + statusIconMap.put(RolloutGroupStatus.FINISHED, + new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); + statusIconMap.put(RolloutGroupStatus.SCHEDULED, + new StatusFontIcon(FontAwesome.HOURGLASS_1, SPUIStyleDefinitions.STATUS_ICON_PENDING)); + statusIconMap.put(RolloutGroupStatus.RUNNING, + new StatusFontIcon(FontAwesome.ADJUST, SPUIStyleDefinitions.STATUS_ICON_YELLOW)); + statusIconMap.put(RolloutGroupStatus.READY, + new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); + statusIconMap.put(RolloutGroupStatus.ERROR, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + } - private String getDescription(final CellReference cell) { - if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { - return cell.getProperty().getValue().toString().toLowerCase(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); - } else if (customObject.equals(cell.getPropertyId())) { - return ((RolloutRendererData) cell.getProperty().getValue()).getName(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } - return null; - } + private String getDescription(final CellReference cell) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString().toLowerCase(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { + return ((RolloutRendererData) cell.getProperty().getValue()).getName(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } + return null; + } - private void alignColumns() { - setCellStyleGenerator(new CellStyleGenerator() { - private static final long serialVersionUID = 5573570647129792429L; + 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.VAR_TOTAL_TARGETS_COUNT_STATUS }; - if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { - return "centeralign"; - } - return null; - } - }); - } + @Override + public String getStyle(final CellReference cellReference) { + final String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); + } - /** - * - * Converts {@link TotalTargetCountStatus} into formatted string with status - * and count details. - * - */ - class TotalTargetCountStatusConverter implements Converter { + /** + * + * Converts {@link TotalTargetCountStatus} into formatted string with status + * and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { - private static final long serialVersionUID = -9205943894818450807L; + private static final long serialVersionUID = -9205943894818450807L; - @Override - public TotalTargetCountStatus convertToModel(final String value, - final Class targetType, final Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - return null; - } + @Override + public TotalTargetCountStatus convertToModel(final String value, + final Class targetType, final Locale locale) + 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 { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } + @Override + public String convertToPresentation(final TotalTargetCountStatus value, + final Class targetType, final Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } - @Override - public Class getPresentationType() { - return String.class; - } - } + @Override + public Class getPresentationType() { + return String.class; + } + } - /** - * - * Converts {@link RolloutGroupStatus} to string. - * - */ - class RolloutGroupStatusConverter implements Converter { + /** + * + * Converts {@link RolloutGroupStatus} to string. + * + */ + class RolloutGroupStatusConverter implements Converter { - private static final long serialVersionUID = 5448062736373292820L; + private static final long serialVersionUID = 5448062736373292820L; - @Override - public RolloutGroupStatus convertToModel(final String value, - final Class targetType, final Locale locale) { - return null; - } + @Override + public RolloutGroupStatus convertToModel(final String value, + final Class targetType, final Locale locale) { + return null; + } - @Override - public String convertToPresentation(final RolloutGroupStatus value, final Class targetType, - final Locale locale) { - return convertRolloutGroupStatusToString(value); - } + @Override + public String convertToPresentation(final RolloutGroupStatus value, final Class targetType, + final Locale locale) { + return convertRolloutGroupStatusToString(value); + } - @Override - public Class getModelType() { - return RolloutGroupStatus.class; - } + @Override + public Class getModelType() { + return RolloutGroupStatus.class; + } - @Override - public Class getPresentationType() { - return String.class; - } + @Override + public Class getPresentationType() { + return String.class; + } - private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { - final StatusFontIcon statusFontIcon = statusIconMap.get(value); - final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { + final StatusFontIcon statusFontIcon = statusIconMap.get(value); + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); - } + } - } + } } From 3fa91054284b8f3dbff9e74dbe33eeef73fa00b6 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 10:02:03 +0200 Subject: [PATCH 170/344] 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 171/344] 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 ffd3373b3480ed694b65700b9f53d283ecf0916d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 11:53:54 +0200 Subject: [PATCH 172/344] Signed-off-by: SirWayne --- 3rd-dependencies/listDeps.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 3rd-dependencies/listDeps.sh diff --git a/3rd-dependencies/listDeps.sh b/3rd-dependencies/listDeps.sh old mode 100755 new mode 100644 From 2b3d9789786f65a1aad864ff27e4259b248796ea Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 13:00:54 +0200 Subject: [PATCH 173/344] =?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 174/344] 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 175/344] 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 176/344] =?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 177/344] 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 8995195e443bf713623930d6d89e1241118da08d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 15:53:02 +0200 Subject: [PATCH 178/344] 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 179/344] 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 180/344] 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 181/344] 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 f7b30a59ba1d3353f87fe47258d6000a0dce721b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 21 Apr 2016 16:58:08 +0200 Subject: [PATCH 182/344] Signed-off-by: SirWayne --- 3rd-dependencies/listDeps.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 3rd-dependencies/listDeps.sh diff --git a/3rd-dependencies/listDeps.sh b/3rd-dependencies/listDeps.sh old mode 100755 new mode 100644 From a615317ba44cc0585e691952e90dba0b8e8156b1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 22 Apr 2016 12:24:11 +0200 Subject: [PATCH 183/344] 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 184/344] 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 185/344] 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 186/344] 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 187/344] 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 188/344] 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 189/344] 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 190/344] 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 191/344] 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 192/344] 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 193/344] 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 6e85c724bf79b7a7d54148f228419b192b2191d6 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 25 Apr 2016 14:09:38 +0200 Subject: [PATCH 194/344] Removed the method exception from transaction manager as they where not needed anymore. The bean in systemmanagement should also not open a transaction. Signed-off-by: Kai Zimmermann --- .../MultiTenantJpaTransactionManager.java | 16 ---------------- .../hawkbit/repository/SystemManagement.java | 3 +-- .../hawkbit/tenancy/MultiTenancyEntityTest.java | 16 ++++++++++++++++ 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java index ac6bc8806..a45c846a9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit; import javax.persistence.EntityManager; import javax.transaction.Transaction; -import org.eclipse.hawkbit.repository.SystemManagement; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.persistence.config.PersistenceUnitProperties; @@ -37,11 +36,6 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { protected void doBegin(final Object transaction, final TransactionDefinition definition) { super.doBegin(transaction, definition); - // ignore transactions on tenant independent calls - if (isTenantManagement(definition) || isCurrentTenantKeyGenerator(definition)) { - return; - } - final EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager .getResource(getEntityManagerFactory()); final EntityManager em = emHolder.getEntityManager(); @@ -54,14 +48,4 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, currentTenant.toUpperCase()); } - - private boolean isCurrentTenantKeyGenerator(final TransactionDefinition definition) { - return definition.getName() - .startsWith(SystemManagement.class.getCanonicalName() + ".currentTenantKeyGenerator"); - } - - private boolean isTenantManagement(final TransactionDefinition definition) { - return definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".deleteTenant") - && !definition.getName().startsWith(SystemManagement.class.getCanonicalName() + ".findTenants"); - } } 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 5577e1d61..c1cee7223 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 @@ -164,6 +164,7 @@ public class SystemManagement { * @return the {@link CurrentTenantKeyGenerator} */ @Bean + @Transactional(propagation = Propagation.NOT_SUPPORTED) public CurrentTenantKeyGenerator currentTenantKeyGenerator() { return new CurrentTenantKeyGenerator(); } @@ -206,7 +207,6 @@ public class SystemManagement { @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) - // tenant independent public List findTenants() { return tenantMetaDataRepository.findAll().stream().map(md -> md.getTenant()).collect(Collectors.toList()); } @@ -221,7 +221,6 @@ public class SystemManagement { @Transactional @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) - // tenant independent public void deleteTenant(@NotNull final String tenant) { cacheManager.evictCaches(tenant); cacheManager.getCache("currentTenant").evict(currentTenantKeyGenerator().generate(null, null)); 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 1dd4c9823..67b9b5a26 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 @@ -78,6 +78,22 @@ public class MultiTenancyEntityTest extends AbstractIntegrationTest { assertThat(findTargetsForTenant).hasSize(1); } + @Test + @Description(value = "Ensures that tenant with proper permissions can read and delete other tenants.") + @WithUser(tenantId = "mytenant", allSpPermissions = true) + public void deleteAnotherTenantPossible() throws Exception { + // create target for another tenant + final String anotherTenant = "anotherTenant"; + final String controllerAnotherTenant = "anotherController"; + createTargetForTenant(controllerAnotherTenant, anotherTenant); + + assertThat(systemManagement.findTenants()).as("Expected number if tenants before deletion is").hasSize(3); + + systemManagement.deleteTenant(anotherTenant); + + assertThat(systemManagement.findTenants()).as("Expected number if tenants after deletion is").hasSize(2); + } + @Test @Description(value = "Ensures that tenant metadata is retrieved for the current tenant.") @WithUser(tenantId = "mytenant", autoCreateTenant = false, allSpPermissions = true) From a065a81aeddc0c54cac6003817230afbee16d404 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 10:56:33 +0200 Subject: [PATCH 195/344] 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 66914de984f023322fef427d16cdb2c57dd4f3dc Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 26 Apr 2016 10:58:24 +0200 Subject: [PATCH 196/344] Set default behavior of our repository transaction isolation level to READ_UNCOMMITED. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/ActionRepository.java | 11 ++-- .../repository/ActionStatusRepository.java | 3 +- .../repository/ArtifactManagement.java | 39 ++++++-------- .../repository/BaseEntityRepository.java | 8 ++- .../repository/ControllerManagement.java | 23 +++++---- .../repository/DeploymentManagement.java | 41 +++++++-------- .../repository/DistributionSetManagement.java | 51 ++++++++++--------- .../DistributionSetMetadataRepository.java | 3 +- .../repository/DistributionSetRepository.java | 9 ++-- .../DistributionSetTagRepository.java | 7 ++- .../DistributionSetTypeRepository.java | 6 +-- .../EclipseLinkTargetInfoRepository.java | 10 ++-- .../ExternalArtifactProviderRepository.java | 6 +-- .../ExternalArtifactRepository.java | 5 +- .../repository/LocalArtifactRepository.java | 3 +- .../hawkbit/repository/ReportManagement.java | 13 ++--- .../repository/RolloutGroupManagement.java | 10 ++-- .../repository/RolloutGroupRepository.java | 3 +- .../hawkbit/repository/RolloutManagement.java | 25 +++++---- .../hawkbit/repository/RolloutRepository.java | 5 +- .../RolloutTargetGroupRepository.java | 5 +- .../repository/SoftwareManagement.java | 31 +++++------ .../SoftwareModuleMetadataRepository.java | 5 +- .../repository/SoftwareModuleRepository.java | 7 ++- .../SoftwareModuleTypeRepository.java | 6 +-- .../hawkbit/repository/SystemManagement.java | 13 ++--- .../hawkbit/repository/TagManagement.java | 26 ++++------ .../TargetFilterQueryManagement.java | 11 ++-- .../TargetFilterQueryRepository.java | 5 +- .../repository/TargetInfoRepository.java | 10 ++-- .../hawkbit/repository/TargetManagement.java | 31 +++++------ .../hawkbit/repository/TargetRepository.java | 13 +++-- .../repository/TargetTagRepository.java | 7 ++- .../TenantConfigurationManagement.java | 7 +-- .../TenantConfigurationRepository.java | 3 +- .../repository/TenantMetaDataRepository.java | 6 +-- 36 files changed, 229 insertions(+), 238 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java index 8221fa0ca..742a7d731 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionRepository.java @@ -29,13 +29,14 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link Action} repository. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface ActionRepository extends BaseEntityRepository, JpaSpecificationExecutor { /** * Retrieves an Action with all lazy attributes. @@ -172,7 +173,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * active */ @Modifying - @Transactional + @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); @@ -191,7 +192,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the current status of the actions which are affected */ @Modifying - @Transactional + @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") void switchStatus(@Param("statusToSet") Action.Status statusToSet, @Param("targetsIds") List targetIds, @Param("active") boolean active, @Param("currentStatus") Action.Status currentStatus); @@ -211,7 +212,7 @@ public interface ActionRepository extends BaseEntityRepository, Jp * the current status of the actions which are affected */ @Modifying - @Transactional + @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, @Param("active") boolean active, @Param("currentStatus") Action.Status currentStatus); @@ -386,6 +387,4 @@ public interface ActionRepository extends BaseEntityRepository, Jp @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") List getStatusCountByRolloutGroupId(List rolloutGroupId); - // Asha-ends here - } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java index 2705b9ac6..2a0e8cfb3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ActionStatusRepository.java @@ -16,13 +16,14 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link ActionStatus} repository. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface ActionStatusRepository extends BaseEntityRepository, JpaSpecificationExecutor { 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 145287fbf..a8a9b5ee5 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 @@ -43,17 +43,15 @@ 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. - * - * - * + * Service for {@link Artifact} management operations. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class ArtifactManagement { @@ -108,7 +106,7 @@ public class ArtifactManagement { * if check against provided SHA1 checksum failed */ @Modifying - @Transactional + @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, @@ -138,7 +136,7 @@ public class ArtifactManagement { return storeArtifactMetadata(softwareModule, filename, result, existing); } - private LocalArtifact checkForExistingArtifact(final String filename, final boolean overrideExisting, + private static LocalArtifact checkForExistingArtifact(final String filename, final boolean overrideExisting, final SoftwareModule softwareModule) { if (softwareModule.getLocalArtifactByFilename(filename).isPresent()) { if (overrideExisting) { @@ -222,9 +220,7 @@ public class ArtifactManagement { artifact.setSize(result.getSize()); LOG.debug("storing new artifact into repository {}", artifact); - final LocalArtifact artifactPersisted = localArtifactRepository.save(artifact); - - return artifactPersisted; + return localArtifactRepository.save(artifact); } /** @@ -242,7 +238,7 @@ public class ArtifactManagement { * @return created {@link ExternalArtifactProvider} */ @Modifying - @Transactional + @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) { @@ -268,16 +264,13 @@ public class ArtifactManagement { * if {@link SoftwareModule} with given ID does not exist */ @Modifying - @Transactional + @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); - final ExternalArtifact result = externalArtifactRepository - .save(new ExternalArtifact(externalRepository, urlSuffix, module)); - - return result; + return externalArtifactRepository.save(new ExternalArtifact(externalRepository, urlSuffix, module)); } /** @@ -290,7 +283,7 @@ public class ArtifactManagement { * */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteLocalArtifact(@NotNull final Long id) { final LocalArtifact existing = localArtifactRepository.findOne(id); @@ -313,7 +306,7 @@ public class ArtifactManagement { * the related local artifact */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteGridFsArtifact(@NotNull final LocalArtifact existing) { if (existing == null) { @@ -350,7 +343,7 @@ public class ArtifactManagement { * */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteExternalArtifact(@NotNull final Long id) { final ExternalArtifact existing = externalArtifactRepository.findOne(id); @@ -425,17 +418,17 @@ public class ArtifactManagement { * @param filename * of the artifact * @param overrideExisting - * to true if the artifact binary can be overdiden + * 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 failes + * @throw ArtifactUploadFailedException if upload fails */ @Modifying - @Transactional + @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) { @@ -461,7 +454,7 @@ public class ArtifactManagement { * @throw ArtifactUploadFailedException if upload failes */ @Modifying - @Transactional + @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) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java index 2b4de2b81..16f80596d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/BaseEntityRepository.java @@ -14,21 +14,19 @@ import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * Command repository operations for all {@link TenantAwareBaseEntity}s. * - * - * - * * @param * type if the entity type * @param * of the entity type */ @NoRepositoryBean -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface BaseEntityRepository extends PagingAndSortingRepository { @@ -39,7 +37,7 @@ public interface BaseEntityRepository spec = (targetRoot, query, cb) -> cb.equal(targetRoot.get(Target_.controllerId), @@ -271,7 +272,7 @@ public class ControllerManagement { * @return the updated TargetInfo */ @Modifying - @Transactional + @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) { @@ -300,7 +301,7 @@ public class ControllerManagement { * */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) public Action addCancelActionStatus(@NotNull final ActionStatus actionStatus, final Action action) { @@ -346,7 +347,7 @@ public class ControllerManagement { * inserted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) public Action addUpdateActionStatus(@NotNull final ActionStatus actionStatus, final Action action) { @@ -454,7 +455,7 @@ public class ControllerManagement { */ @Modifying @NotNull - @Transactional + @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); @@ -492,7 +493,7 @@ public class ControllerManagement { * {@link Status#RETRIEVED} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) public Action registerRetrieved(final Action action, final String message) { return handleRegisterRetrieved(action, message); @@ -556,7 +557,7 @@ public class ControllerManagement { */ @PreAuthorize(SpringEvalExpressions.IS_CONTROLLER) @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) public void addActionStatusMessage(final ActionStatus statusMessage) { actionStatusRepository.save(statusMessage); } @@ -573,7 +574,7 @@ public class ControllerManagement { * @return the security context of the target, in case no target exists for * the given controllerId {@code null} is returned */ - @Transactional + @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/DeploymentManagement.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DeploymentManagement.java index 77f71bebf..3eedee415 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,6 +67,7 @@ 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; @@ -78,7 +79,7 @@ import com.google.common.eventbus.EventBus; * * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class DeploymentManagement { @@ -133,7 +134,7 @@ public class DeploymentManagement { * {@link SoftwareModuleType} are not assigned as define by the * {@link DistributionSetType}. * */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) @@ -167,7 +168,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, @@ -195,7 +196,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, final ActionType actionType, @@ -219,7 +220,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, @@ -243,8 +244,8 @@ public class DeploymentManagement { * a list of all targets and their action type * @param rollout * the rollout for this assignment - * @param rolloutgroup - * the rolloutgroup for this assignment + * @param rolloutGroup + * the rollout group for this assignment * @return the assignment result * * @throw IncompleteDistributionSetException if mandatory @@ -252,7 +253,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) public DistributionSetAssignmentResult assignDistributionSet(@NotNull final Long dsID, @@ -276,8 +277,8 @@ public class DeploymentManagement { * a list of all targets and their action type * @param rollout * the rollout for this assignment - * @param rolloutgroup - * the rolloutgroup for this assignment + * @param rolloutGroup + * the rollout group for this assignment * @return the assignment result * * @throw IncompleteDistributionSetException if mandatory @@ -389,8 +390,8 @@ public class DeploymentManagement { softwareModules)); } - private Action createTargetAction(final Map targetsWithActionMap, final Target target, - final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) { + 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()); @@ -512,7 +513,7 @@ public class DeploymentManagement { * action */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public Action cancelAction(@NotNull final Action action, @NotNull final Target target) { LOG.debug("cancelAction({}, {})", action, target); @@ -569,7 +570,7 @@ public class DeploymentManagement { * in case the given action is not active */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public Action forceQuitAction(@NotNull final Action action) { final Action mergedAction = entityManager.merge(action); @@ -614,7 +615,7 @@ public class DeploymentManagement { * the rolloutgroup for this action */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public void createScheduledAction(final List targets, final DistributionSet distributionSet, final ActionType actionType, final long forcedTime, final Rollout rollout, @@ -648,7 +649,7 @@ public class DeploymentManagement { * @return the action which has been started */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) public Action startScheduledAction(@NotNull final Action action) { @@ -911,7 +912,7 @@ public class DeploymentManagement { * @return the updated or the found {@link TargetAction} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public Action forceTargetAction(final Long actionId) { final Action action = actionRepository.findOne(actionId); @@ -923,7 +924,7 @@ public class DeploymentManagement { } /** - * retrieves all the {@link ActionStatus} entries of the given + * Retrieves all the {@link ActionStatus} entries of the given * {@link Action} and {@link Target}. * * @param pageReq @@ -981,11 +982,11 @@ public class DeploymentManagement { * @param rollout * the rollout the actions belong to * @param rolloutGroupParent - * the parent rolloutgroup the actions should reference + * the parent rollout group the actions should reference * @param actionStatus * the status the actions have * @return the actions referring a specific rollout and a specific parent - * rolloutgroup in a specific status + * rollout group in a specific status */ @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) 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 8bee7c703..db1ade60e 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 @@ -59,6 +59,7 @@ 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; @@ -69,7 +70,7 @@ import com.google.common.eventbus.EventBus; * Business facade for managing the {@link DistributionSet}s. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class DistributionSetManagement { @@ -142,7 +143,7 @@ public class DistributionSetManagement { * the assignment outcome. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final List sets, @@ -164,7 +165,7 @@ public class DistributionSetManagement { * the assignment outcome. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection dsIds, @@ -229,7 +230,7 @@ public class DistributionSetManagement { * @throw DataDependencyViolationException in case of illegal update */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSet updateDistributionSet(@NotNull final DistributionSet ds) { checkNotNull(ds.getId()); @@ -254,7 +255,7 @@ public class DistributionSetManagement { * to delete */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteDistributionSet(@NotNull final DistributionSet set) { deleteDistributionSet(set.getId()); @@ -269,7 +270,7 @@ public class DistributionSetManagement { * to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteDistributionSet(@NotEmpty final Long... distributionSetIDs) { final List toHardDelete = new ArrayList<>(); @@ -310,7 +311,7 @@ public class DistributionSetManagement { * {@link SoftwareModule}s. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public DistributionSet createDistributionSet(@NotNull final DistributionSet dSet) { prepareDsSave(dSet); @@ -344,7 +345,7 @@ public class DistributionSetManagement { * {@link SoftwareModule}s. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public List createDistributionSets(@NotNull final Iterable distributionSets) { for (final DistributionSet ds : distributionSets) { @@ -366,7 +367,7 @@ public class DistributionSetManagement { * @return the updated {@link DistributionSet}. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSet assignSoftwareModules(@NotNull final DistributionSet ds, final Set softwareModules) { @@ -388,7 +389,7 @@ public class DistributionSetManagement { * @return the updated {@link DistributionSet}. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSet unassignSoftwareModule(@NotNull final DistributionSet ds, final SoftwareModule softwareModule) { @@ -413,7 +414,7 @@ public class DistributionSetManagement { * s while the DS type is already in use. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSetType updateDistributionSetType(@NotNull final DistributionSetType dsType) { checkNotNull(dsType.getId()); @@ -715,7 +716,7 @@ public class DistributionSetManagement { * @return created {@link Entity} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public DistributionSetType createDistributionSetType(@NotNull final DistributionSetType type) { if (type.getId() != null) { @@ -732,7 +733,7 @@ public class DistributionSetManagement { * to delete */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteDistributionSetType(@NotNull final DistributionSetType type) { @@ -755,7 +756,7 @@ public class DistributionSetManagement { * in case the meta data entry already exists for the specific * key */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSetMetadata createDistributionSetMetadata(@NotNull final DistributionSetMetadata metadata) { @@ -780,7 +781,7 @@ public class DistributionSetManagement { * in case one of the meta data entry already exists for the * specific key */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public List createDistributionSetMetadata( @@ -802,7 +803,7 @@ public class DistributionSetManagement { * in case the meta data entry does not exists and cannot be * updated */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSetMetadata updateDistributionSetMetadata(@NotNull final DistributionSetMetadata metadata) { @@ -820,7 +821,7 @@ public class DistributionSetManagement { * @param id * the ID of the distribution set meta data to delete */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public void deleteDistributionSetMetadata(@NotNull final DsMetadataCompositeKey id) { @@ -913,7 +914,7 @@ public class DistributionSetManagement { * @return created {@link Entity} */ @Modifying - @Transactional + @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()); @@ -926,7 +927,7 @@ public class DistributionSetManagement { * @param softwareModules */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public void checkDistributionSetAlreadyUse(final DistributionSet distributionSet) { checkDistributionSetSoftwareModulesIsAllowedToModify(distributionSet); @@ -992,14 +993,14 @@ public class DistributionSetManagement { } } - private Boolean isDSWithNoTagSelected(final DistributionSetFilter distributionSetFilter) { + private static Boolean isDSWithNoTagSelected(final DistributionSetFilter distributionSetFilter) { if (distributionSetFilter.getSelectDSWithNoTag() != null && distributionSetFilter.getSelectDSWithNoTag()) { return true; } return false; } - private Boolean isTagsSelected(final DistributionSetFilter distributionSetFilter) { + private static Boolean isTagsSelected(final DistributionSetFilter distributionSetFilter) { if (distributionSetFilter.getTagNames() != null && !distributionSetFilter.getTagNames().isEmpty()) { return true; } @@ -1033,7 +1034,7 @@ public class DistributionSetManagement { } } - private void throwMetadataKeyAlreadyExists(final String metadataKey) { + private static void throwMetadataKeyAlreadyExists(final String metadataKey) { throw new EntityAlreadyExistsException("Metadata entry with key '" + metadataKey + "' already exists"); } @@ -1048,7 +1049,7 @@ public class DistributionSetManagement { * @return list of assigned ds */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public List assignTag(@NotEmpty final Collection dsIds, @@ -1077,7 +1078,7 @@ public class DistributionSetManagement { * @return list of unassigned ds */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public List unAssignAllDistributionSetsByTag(@NotNull final DistributionSetTag tag) { @@ -1095,7 +1096,7 @@ public class DistributionSetManagement { * @return the unassigned ds or if no ds is unassigned */ @Modifying - @Transactional + @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)); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java index 1ff6c1ca5..c042a32d0 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetMetadataRepository.java @@ -12,6 +12,7 @@ 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; import org.springframework.transaction.annotation.Transactional; /** @@ -20,7 +21,7 @@ import org.springframework.transaction.annotation.Transactional; * * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetMetadataRepository extends PagingAndSortingRepository, JpaSpecificationExecutor { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java index 1a59fdca7..f2138bb2d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetRepository.java @@ -21,6 +21,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** @@ -29,7 +30,7 @@ import org.springframework.transaction.annotation.Transactional; * * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetRepository extends BaseEntityRepository, JpaSpecificationExecutor { @@ -50,7 +51,7 @@ public interface DistributionSetRepository * to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Query("update DistributionSet d set d.deleted = 1 where d.id in :ids") void deleteDistributionSet(@Param("ids") Long... ids); @@ -62,7 +63,7 @@ public interface DistributionSetRepository * @return number of affected/deleted records */ @Modifying - @Transactional + @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") int deleteByIdIn(Collection ids); @@ -82,7 +83,7 @@ public interface DistributionSetRepository * yet to an {@link UpdateAction}, i.e. unused. * * @param ids - * to searcgh for + * to search for * @return */ @Query("select ac.distributionSet.id from Action ac where ac.distributionSet.id in :ids") diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java index c00713fc4..8521a96b9 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTagRepository.java @@ -15,15 +15,14 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link TargetTag} repository. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetTagRepository extends BaseEntityRepository, JpaSpecificationExecutor { /** @@ -34,7 +33,7 @@ public interface DistributionSetTagRepository * @return 1 if tag was deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) Long deleteByName(final String tagName); /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java index b9da6b3cc..289dd6c09 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/DistributionSetTypeRepository.java @@ -14,16 +14,14 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link PagingAndSortingRepository} for {@link DistributionSetType}. * - * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface DistributionSetTypeRepository extends BaseEntityRepository, JpaSpecificationExecutor { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java index c9be0bf38..e37a51d6c 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/EclipseLinkTargetInfoRepository.java @@ -13,7 +13,6 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; -import javax.transaction.Transactional; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -21,16 +20,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.jpa.repository.Modifying; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; /** * Custom repository implementation as standard spring repository fails as of * https://bugs.eclipse.org/bugs/show_bug.cgi?id=415027 . * - * - * */ @Service -@Transactional +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @Autowired @@ -38,6 +37,7 @@ public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @Override @Modifying + @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"); @@ -48,6 +48,7 @@ public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @Override @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) public S save(final S entity) { @@ -61,6 +62,7 @@ public class EclipseLinkTargetInfoRepository implements TargetInfoRepository { @Override @Modifying + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) public void deleteByTargetIdIn(final Collection targetIDs) { final javax.persistence.Query query = entityManager diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java index 05634ef63..d0802d242 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactProviderRepository.java @@ -9,16 +9,14 @@ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.model.ExternalArtifactProvider; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * Repository for {@link ExternalArtifactProvider}. * - * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface ExternalArtifactProviderRepository extends BaseEntityRepository { } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java index c7ece2445..d20da8013 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/ExternalArtifactRepository.java @@ -11,15 +11,14 @@ package org.eclipse.hawkbit.repository; import org.eclipse.hawkbit.repository.model.ExternalArtifact; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link ExternalArtifact} repository. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface ExternalArtifactRepository extends BaseEntityRepository { /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java index 5bbac1dd1..4c106957d 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/LocalArtifactRepository.java @@ -15,13 +15,14 @@ import org.eclipse.hawkbit.repository.model.LocalArtifact; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link LocalArtifact} repository. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface LocalArtifactRepository extends BaseEntityRepository { /** 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 b95664d8f..326442283 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 @@ -48,14 +48,15 @@ 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 SP reportings. + * Service layer for generating hawkBit reports. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class ReportManagement { @@ -404,7 +405,7 @@ public class ReportManagement { return innerOuterReport; } - private final class InnerOuter { + private static final class InnerOuter { final DSName name; long count; final List outer; @@ -433,9 +434,6 @@ public class ReportManagement { /** * Object contains the name and the id of an entity. * - * - * - * */ private static final class DSName { @@ -510,9 +508,6 @@ public class ReportManagement { * Return DateTypes. */ public static final class DateTypes implements Serializable { - /** - * - */ private static final long serialVersionUID = 1L; private static final PerMonth PER_MONTH = new PerMonth(); 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 54ff37e87..d204154d0 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 @@ -43,6 +43,7 @@ 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 +53,7 @@ import org.springframework.validation.annotation.Validated; */ @Validated @Service -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class RolloutGroupManagement { @Autowired @@ -189,7 +190,7 @@ public class RolloutGroupManagement { final ListJoin rolloutTargetJoin = root.join(Target_.rolloutTargetGroup); return criteriaBuilder.and(specification.toPredicate(root, query, criteriaBuilder), criteriaBuilder.equal(rolloutTargetJoin.get(RolloutTargetGroup_.rolloutGroup), rolloutGroup)); - } , page); + }, page); } /** @@ -213,7 +214,7 @@ public class RolloutGroupManagement { return targetRepository.findByActionsRolloutGroup(rolloutGroup, page); } - private boolean isRolloutStatusReady(final RolloutGroup rolloutGroup) { + private static boolean isRolloutStatusReady(final RolloutGroup rolloutGroup) { return rolloutGroup != null && RolloutStatus.READY.equals(rolloutGroup.getRollout().getStatus()); } @@ -259,5 +260,4 @@ public class RolloutGroupManagement { .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/RolloutGroupRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupRepository.java index cf3f3d729..e0cb4cc27 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutGroupRepository.java @@ -18,12 +18,13 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * The repository interface for the {@link RolloutGroup} model. */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface RolloutGroupRepository extends BaseEntityRepository, JpaSpecificationExecutor { 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 1573048ec..efead853e 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 @@ -58,6 +58,7 @@ 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.Transactional; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.TransactionTemplate; @@ -72,7 +73,7 @@ import org.springframework.validation.annotation.Validated; @Validated @Service @EnableScheduling -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public class RolloutManagement { private static final Logger LOGGER = LoggerFactory.getLogger(RolloutManagement.class); @@ -199,7 +200,7 @@ public class RolloutManagement { * @throws IllegalArgumentException * in case the given groupSize is zero or lower. */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) public Rollout createRollout(final Rollout rollout, final int amountGroup, @@ -242,7 +243,7 @@ public class RolloutManagement { * @return the created rollout entity in state * {@link RolloutStatus#CREATING} */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) public Rollout createRolloutAsync(final Rollout rollout, final int amountGroup, @@ -280,7 +281,7 @@ public class RolloutManagement { return rolloutRepository.save(rollout); } - private void verifyRolloutGroupParameter(final int amountGroup) { + private static void verifyRolloutGroupParameter(final int amountGroup) { if (amountGroup <= 0) { throw new IllegalArgumentException("the amountGroup must be greater than zero"); } else if (amountGroup > 500) { @@ -362,11 +363,13 @@ public class RolloutManagement { * @param rollout * the rollout to be started * + * @return started rollout + * * @throws RolloutIllegalStateException * if given rollout is not in {@link RolloutStatus#READY}. Only * ready rollouts can be started. */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) @@ -389,6 +392,8 @@ public class RolloutManagement { * @param rollout * the rollout to be started * + * @return the started rollout + * * @throws RolloutIllegalStateException * if given rollout is not in {@link RolloutStatus#READY}. Only * ready rollouts can be started. @@ -468,7 +473,7 @@ public class RolloutManagement { * if given rollout is not in {@link RolloutStatus#RUNNING}. * Only running rollouts can be paused. */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) @@ -498,7 +503,7 @@ public class RolloutManagement { * if given rollout is not in {@link RolloutStatus#PAUSED}. Only * paused rollouts can be resumed. */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) @@ -540,7 +545,7 @@ public class RolloutManagement { * this check. This check is only applied if the last check is * less than (lastcheck-delay). */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_SYSTEM_CODE) @@ -783,7 +788,7 @@ public class RolloutManagement { * @return Rollout updated rollout */ @NotNull - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_ROLLOUT_MANAGEMENT_WRITE) public Rollout updateRollout(@NotNull final Rollout rollout) { @@ -845,7 +850,7 @@ public class RolloutManagement { } } - private void checkIfRolloutCanStarted(final Rollout rollout, final Rollout mergedRollout) { + 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()); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java index 9c4318a3f..5a22f5ab5 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutRepository.java @@ -18,12 +18,13 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * The repository interface for the {@link Rollout} model. */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface RolloutRepository extends BaseEntityRepository, JpaSpecificationExecutor { /** @@ -40,7 +41,7 @@ public interface RolloutRepository extends BaseEntityRepository, * @return the count of the updated rows. Zero if no row has been updated */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Query("UPDATE Rollout 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); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java index 6564e2c1f..14d9b8353 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/RolloutTargetGroupRepository.java @@ -12,11 +12,14 @@ import org.eclipse.hawkbit.repository.model.RolloutTargetGroup; import org.eclipse.hawkbit.repository.model.RolloutTargetGroupId; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.CrudRepository; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; /** - * + * Spring data repository for {@link RolloutTargetGroup}. * */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface RolloutTargetGroupRepository extends CrudRepository, JpaSpecificationExecutor { } 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 384353b8e..d719667ed 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 @@ -52,6 +52,7 @@ 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; @@ -62,7 +63,7 @@ import com.google.common.collect.Sets; * Business facade for managing {@link SoftwareModule}s. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class SoftwareManagement { @@ -108,7 +109,7 @@ public class SoftwareManagement { * of {@link SoftwareModule#getId()} is null */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public SoftwareModule updateSoftwareModule(@NotNull final SoftwareModule sm) { checkNotNull(sm.getId()); @@ -138,7 +139,7 @@ public class SoftwareManagement { * @return updated {@link Entity} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public SoftwareModuleType updateSoftwareModuleType(@NotNull final SoftwareModuleType sm) { checkNotNull(sm.getId()); @@ -283,7 +284,7 @@ public class SoftwareManagement { * is the {@link SoftwareModule} to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteSoftwareModule(@NotNull final SoftwareModule bsm) { @@ -314,10 +315,10 @@ public class SoftwareManagement { * Deletes {@link SoftwareModule}s which is any if the given ids. * * @param ids - * of the Software Moduels to be deleted + * of the Software Modules to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteSoftwareModules(@NotNull final Iterable ids) { final List swModulesToDelete = softwareModuleRepository.findByIdIn(ids); @@ -579,7 +580,7 @@ public class SoftwareManagement { return new SliceImpl<>(resultList); } - private List> buildSpecificationList(final String searchText, + private static List> buildSpecificationList(final String searchText, final SoftwareModuleType type) { final List> specList = new ArrayList<>(); if (!Strings.isNullOrEmpty(searchText)) { @@ -700,7 +701,7 @@ public class SoftwareManagement { * @return created {@link Entity} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public SoftwareModuleType createSoftwareModuleType(@NotNull final SoftwareModuleType type) { if (type.getId() != null) { @@ -718,7 +719,7 @@ public class SoftwareManagement { * @return created {@link Entity} */ @Modifying - @Transactional + @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()); @@ -731,7 +732,7 @@ public class SoftwareManagement { * to delete */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteSoftwareModuleType(@NotNull final SoftwareModuleType type) { @@ -785,7 +786,7 @@ public class SoftwareManagement { * in case the meta data entry already exists for the specific * key */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public SoftwareModuleMetadata createSoftwareModuleMetadata(@NotNull final SoftwareModuleMetadata metadata) { @@ -810,7 +811,7 @@ public class SoftwareManagement { * in case one of the meta data entry already exists for the * specific key */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public List createSoftwareModuleMetadata( @@ -832,7 +833,7 @@ public class SoftwareManagement { * in case the meta data entry does not exists and cannot be * updated */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public SoftwareModuleMetadata updateSoftwareModuleMetadata(@NotNull final SoftwareModuleMetadata metadata) { @@ -851,7 +852,7 @@ public class SoftwareManagement { * @param id * the ID of the software module meta data to delete */ - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public void deleteSoftwareModuleMetadata(@NotNull final SwMetadataCompositeKey id) { @@ -925,7 +926,7 @@ public class SoftwareManagement { } } - private void throwMetadataKeyAlreadyExists(final String metadataKey) { + private static void throwMetadataKeyAlreadyExists(final String metadataKey) { throw new EntityAlreadyExistsException("Metadata entry with key '" + metadataKey + "' already exists"); } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java index 0d80e1932..c40a96e92 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleMetadataRepository.java @@ -16,15 +16,14 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link SoftwareModuleMetadata} repository. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface SoftwareModuleMetadataRepository extends PagingAndSortingRepository, JpaSpecificationExecutor { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java index d70e8226f..95b01c270 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleRepository.java @@ -21,15 +21,14 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link SoftwareModule} repository. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface SoftwareModuleRepository extends BaseEntityRepository, JpaSpecificationExecutor { @@ -69,7 +68,7 @@ public interface SoftwareModuleRepository * */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Query("UPDATE SoftwareModule 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); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java index 44b85b06b..ac9425a08 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/SoftwareModuleTypeRepository.java @@ -12,16 +12,14 @@ 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; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * Repository for {@link SoftwareModuleType}. * - * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface SoftwareModuleTypeRepository extends BaseEntityRepository, JpaSpecificationExecutor { 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 5577e1d61..2492930f2 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 @@ -35,6 +35,7 @@ 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; import org.springframework.validation.annotation.Validated; @@ -43,7 +44,7 @@ import org.springframework.validation.annotation.Validated; * Central system management operations of the SP server. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class SystemManagement { @@ -179,7 +180,7 @@ public class SystemManagement { * @return */ @Cacheable(value = "tenantMetadata", key = "#tenant.toUpperCase()") - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @NotNull public TenantMetaData getTenantMetadata(@NotNull final String tenant) { @@ -218,7 +219,7 @@ public class SystemManagement { * to delete */ @CacheEvict(value = { "tenantMetadata" }, key = "#tenant.toUpperCase()") - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_SYSTEM_ADMIN) // tenant independent @@ -250,7 +251,7 @@ public class SystemManagement { * @return {@link TenantMetaData} of {@link TenantAware#getCurrentTenant()} */ @Cacheable(value = "tenantMetadata", keyGenerator = "tenantKeyGenerator") - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @NotNull public TenantMetaData getTenantMetadata() { @@ -279,7 +280,7 @@ public class SystemManagement { // suspend the transaction here to do a read-request against the medata // table, when the current // tenant is not cached anyway already. - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Transactional(propagation = Propagation.NOT_SUPPORTED, isolation = Isolation.READ_UNCOMMITTED) public String currentTenant() { final String initialTenantCreation = createInitialTenant.get(); if (initialTenantCreation == null) { @@ -298,7 +299,7 @@ public class SystemManagement { * @return updated {@link TenantMetaData} entity */ @CachePut(value = "tenantMetadata", key = "#metaData.tenant.toUpperCase()") - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @NotNull public TenantMetaData updateTenantMetadata(@NotNull final TenantMetaData metaData) { 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 e0ab951ac..8db9773e6 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 @@ -38,21 +38,17 @@ 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.eventbus.EventBus; /** - * - * Mangement service class for {@link Tag}s. - * - * - * - * + * Management service class for {@link Tag}s. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class TagManagement { @@ -102,7 +98,7 @@ public class TagManagement { * if given object already exists */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) public TargetTag createTargetTag(@NotNull final TargetTag targetTag) { @@ -133,7 +129,7 @@ public class TagManagement { * if given object has already an ID. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) public List createTargetTags(@NotNull final Iterable targetTags) { @@ -155,7 +151,7 @@ public class TagManagement { * tag name of the {@link TargetTag} to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) public void deleteTargetTag(@NotEmpty final String targetTagName) { final TargetTag tag = targetTagRepository.findByNameEquals(targetTagName); @@ -220,7 +216,7 @@ public class TagManagement { * @return the new {@link TargetTag} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public TargetTag updateTargetTag(@NotNull final TargetTag targetTag) { @@ -254,7 +250,7 @@ public class TagManagement { * */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public DistributionSetTag createDistributionSetTag(@NotNull final DistributionSetTag distributionSetTag) { if (null != distributionSetTag.getId()) { @@ -282,7 +278,7 @@ public class TagManagement { * if a given entity already exists */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_REPOSITORY) public List createDistributionSetTags( @NotNull final Iterable distributionSetTags) { @@ -306,7 +302,7 @@ public class TagManagement { * to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_REPOSITORY) public void deleteDistributionSetTag(@NotEmpty final String tagName) { final DistributionSetTag tag = distributionSetTagRepository.findByNameEquals(tagName); @@ -335,7 +331,7 @@ public class TagManagement { * of {@link DistributionSetTag#getName()} is null */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_REPOSITORY) public DistributionSetTag updateDistributionSetTag(@NotNull final DistributionSetTag distributionSetTag) { 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 c55127d0f..4f7c91da3 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 @@ -26,6 +26,7 @@ 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; import org.springframework.validation.annotation.Validated; @@ -35,10 +36,8 @@ import com.google.common.base.Strings; /** * Business service facade for managing {@link TargetFilterQuery}s. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class TargetFilterQueryManagement { @@ -53,7 +52,7 @@ public class TargetFilterQueryManagement { * @return the created {@link TargetFilterQuery} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) public TargetFilterQuery createTargetFilterQuery(@NotNull final TargetFilterQuery customTargetFilter) { @@ -71,7 +70,7 @@ public class TargetFilterQueryManagement { * IDs of target filter query to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) public void deleteTargetFilterQuery(@NotNull final Long targetFilterQueryId) { targetFilterQueryRepository.delete(targetFilterQueryId); @@ -161,7 +160,7 @@ public class TargetFilterQueryManagement { * @return the updated {@link TargetFilterQuery} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public TargetFilterQuery updateTargetFilterQuery(@NotNull final TargetFilterQuery targetFilterQuery) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java index b9bfcc8b6..3604785cd 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetFilterQueryRepository.java @@ -12,13 +12,14 @@ import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** - * + * Spring data repositories for {@link TargetFilterQuery}s. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TargetFilterQueryRepository extends BaseEntityRepository, JpaSpecificationExecutor { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java index 4582b7397..436f1e7b6 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetInfoRepository.java @@ -12,7 +12,6 @@ import java.util.Collection; import java.util.List; import javax.persistence.Entity; -import javax.transaction.Transactional; import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -20,15 +19,16 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; /** * Usually a JPA spring data repository to handle {@link TargetInfo} entity. * However, do to an eclipselink bug with spring boot now a regular interface * that is implemented by {@link EclipseLinkTargetInfoRepository}. * - * - * */ +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TargetInfoRepository { /** @@ -41,7 +41,7 @@ public interface TargetInfoRepository { * to set it for */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Query("update TargetInfo ti set ti.updateStatus = :status where ti.targetId in :targets and ti.updateStatus != :status") void setTargetUpdateStatus(@Param("status") TargetUpdateStatus status, @Param("targets") List targets); @@ -63,7 +63,7 @@ public interface TargetInfoRepository { * to delete */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) void deleteByTargetIdIn(final Collection targetIDs); } 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 0e0e474b2..4d6540acf 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 @@ -62,6 +62,7 @@ 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; import org.springframework.validation.annotation.Validated; @@ -74,7 +75,7 @@ import com.google.common.eventbus.EventBus; * Business service facade for managing {@link Target}s. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated @Service public class TargetManagement { @@ -260,7 +261,7 @@ public class TargetManagement { * @return the updated {@link Target} */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_CONTROLLER) @@ -278,7 +279,7 @@ public class TargetManagement { * @return the updated {@link Target}s */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_CONTROLLER) @@ -294,7 +295,7 @@ public class TargetManagement { * the technical IDs of the targets to be deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_DELETE_TARGET) public void deleteTargets(@NotEmpty final Long... targetIDs) { // we need to select the target IDs first to check the if the targetIDs @@ -527,11 +528,11 @@ public class TargetManagement { * @param targets * to toggle for * @param tag - * to toogle - * @return TagAssigmentResult with all metadata of the assigment outcome. + * to toggle + * @return TagAssigmentResult with all metadata of the assignment outcome. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public TargetTagAssignmentResult toggleTagAssignment(@NotEmpty final List targets, @@ -553,7 +554,7 @@ public class TargetManagement { * @return TagAssigmentResult with all metadata of the assigment outcome. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public TargetTagAssignmentResult toggleTagAssignment(@NotEmpty final Collection targetIds, @@ -596,7 +597,7 @@ public class TargetManagement { * @return list of assigned targets */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public List assignTag(@NotEmpty final Collection targetIds, @NotNull final TargetTag tag) { @@ -635,7 +636,7 @@ public class TargetManagement { * @return list of unassigned targets */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public List unAssignAllTargetsByTag(@NotNull final TargetTag tag) { @@ -652,7 +653,7 @@ public class TargetManagement { * @return the unassigned target or if no target is unassigned */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public Target unAssignTag(@NotNull final String controllerID, @NotNull final TargetTag targetTag) { final List allTargets = targetRepository @@ -934,7 +935,7 @@ public class TargetManagement { * @return */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_CONTROLLER) @@ -972,7 +973,7 @@ public class TargetManagement { * */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET + SpringEvalExpressions.HAS_AUTH_OR + SpringEvalExpressions.IS_CONTROLLER) @@ -996,7 +997,7 @@ public class TargetManagement { * already exist. */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) public List createTargets(@NotNull final List targets) { @@ -1028,7 +1029,7 @@ public class TargetManagement { * @return newly created target */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @NotNull @PreAuthorize(SpringEvalExpressions.HAS_AUTH_CREATE_TARGET) public List createTargets(@NotNull final Collection targets, diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java index 35ba39660..5e37902ab 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetRepository.java @@ -27,15 +27,14 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link Target} repository. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TargetRepository extends BaseEntityRepository, JpaSpecificationExecutor { /** @@ -64,7 +63,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * to be deleted */ @Modifying - @Transactional + @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") void deleteByIdIn(final Collection targetIDs); @@ -153,7 +152,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp */ @Override @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) List save(Iterable entities); @@ -167,7 +166,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp */ @Override @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @CacheEvict(value = { "targetStatus", "distributionUsageInstalled", "targetsLastPoll" }, allEntries = true) S save(S entity); @@ -276,7 +275,7 @@ public interface TargetRepository extends BaseEntityRepository, Jp * to update */ @Modifying - @Transactional + @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, @Param("lastModifiedBy") String modifiedBy, @Param("targets") Collection targets); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java index a81ed81ab..e0f03ee78 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TargetTagRepository.java @@ -13,15 +13,14 @@ import java.util.List; import org.eclipse.hawkbit.repository.model.TargetTag; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * {@link TargetTag} repository. * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TargetTagRepository extends BaseEntityRepository, JpaSpecificationExecutor { @@ -33,7 +32,7 @@ public interface TargetTagRepository * @return 1 if tag was deleted */ @Modifying - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) Long deleteByName(final String tagName); /** 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 e311cf288..bd63a827a 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,13 +24,14 @@ 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.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) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) @Validated public class TenantConfigurationManagement implements EnvironmentAware { @@ -221,7 +222,7 @@ public class TenantConfigurationManagement implements EnvironmentAware { * if the property cannot be converted to the given */ @CacheEvict(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) public TenantConfigurationValue addOrUpdateConfiguration(final TenantConfigurationKey configurationKey, @@ -264,7 +265,7 @@ public class TenantConfigurationManagement implements EnvironmentAware { * the configuration key to be deleted */ @CacheEvict(value = "tenantConfiguration", key = "#configurationKey.getKeyName()") - @Transactional + @Transactional(isolation = Isolation.READ_UNCOMMITTED) @Modifying @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) public void deleteConfiguration(final TenantConfigurationKey configurationKey) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java index dd741697b..0497ea924 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantConfigurationRepository.java @@ -11,13 +11,14 @@ package org.eclipse.hawkbit.repository; import java.util.List; import org.eclipse.hawkbit.repository.model.TenantConfiguration; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * The spring-data repository for the entity {@link TenantConfiguration}. * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TenantConfigurationRepository extends BaseEntityRepository { /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java index 08d672803..4aa4c48dc 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/TenantMetaDataRepository.java @@ -12,16 +12,14 @@ import java.util.List; import org.eclipse.hawkbit.repository.model.TenantMetaData; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** * repository for operations on {@link TenantMetaData} entity. * - * - * - * */ -@Transactional(readOnly = true) +@Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public interface TenantMetaDataRepository extends PagingAndSortingRepository { /** From d67e0c6381535716c23aaa5bff06bd3720a9bcf0 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 11:06:28 +0200 Subject: [PATCH 197/344] 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 328d5ab2b0698cfd997e0e721d7b4be24185d637 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 26 Apr 2016 11:07:15 +0200 Subject: [PATCH 198/344] Set complex assignment operations to READ_COMMITED to ensure consitent updates. Signed-off-by: Kai Zimmermann --- .../hawkbit/repository/DeploymentManagement.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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 3eedee415..834c37f81 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 @@ -134,7 +134,7 @@ public class DeploymentManagement { * {@link SoftwareModuleType} are not assigned as define by the * {@link DistributionSetType}. * */ - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Transactional(isolation = Isolation.READ_COMMITTED) @Modifying @PreAuthorize(SpringEvalExpressions.HAS_AUTH_READ_REPOSITORY_AND_UPDATE_TARGET) @CacheEvict(value = { "distributionUsageAssigned" }, allEntries = true) @@ -168,7 +168,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @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, @@ -220,7 +220,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @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, @@ -253,7 +253,7 @@ public class DeploymentManagement { * {@link DistributionSetType}. */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @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, @@ -513,7 +513,7 @@ public class DeploymentManagement { * action */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @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); @@ -570,7 +570,7 @@ public class DeploymentManagement { * in case the given action is not active */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @Transactional(isolation = Isolation.READ_COMMITTED) @PreAuthorize(SpringEvalExpressions.HAS_AUTH_UPDATE_TARGET) public Action forceQuitAction(@NotNull final Action action) { final Action mergedAction = entityManager.merge(action); @@ -615,7 +615,7 @@ public class DeploymentManagement { * the rolloutgroup for this action */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @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, @@ -649,7 +649,7 @@ public class DeploymentManagement { * @return the action which has been started */ @Modifying - @Transactional(isolation = Isolation.READ_UNCOMMITTED) + @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) { From 05d9536caef5374bb3eb383ee2dcb51d83b84357 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 11:14:23 +0200 Subject: [PATCH 199/344] 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 23d15bf646242e44b4f752bd49c95b4cc7e18fbb Mon Sep 17 00:00:00 2001 From: venu1278 Date: Tue, 26 Apr 2016 16:13:06 +0530 Subject: [PATCH 200/344] Displaying DistributionSet Details in Tooltip Signed-off-by: venu1278 --- .../ui/common/table/AbstractTable.java | 4 + .../hawkbit/ui/components/ProxyTarget.java | 478 +++---- .../CreateOrUpdateFilterTable.java | 402 +++--- .../targettable/TargetBeanQuery.java | 329 ++--- .../management/targettable/TargetTable.java | 65 + .../ui/rollout/rollout/ProxyRollout.java | 77 ++ .../ui/rollout/rollout/RolloutBeanQuery.java | 5 + .../ui/rollout/rollout/RolloutListGrid.java | 1173 +++++++++-------- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 8 + 9 files changed, 1426 insertions(+), 1115 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 0737f42c8..8e68be0d5 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 @@ -323,6 +323,10 @@ public abstract class AbstractTable extends Table { return columnList; } columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); + columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, + i18n.get("header.assigned.ds"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, + i18n.get("header.installed.ds"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); 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 d85b2bc71..084890f87 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 @@ -10,9 +10,11 @@ package org.eclipse.hawkbit.ui.components; import java.net.URI; import java.security.SecureRandom; +import java.util.Set; import org.eclipse.hawkbit.repository.model.Action.Status; 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.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -26,275 +28,293 @@ import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; * */ public class ProxyTarget extends Target { - private static final long serialVersionUID = -8891449133620645310L; - private String controllerId; - private URI address = null; - private Long lastTargetQuery = null; - private Long installationDate; + private static final long serialVersionUID = -8891449133620645310L; + private String controllerId; + private URI address = null; + private Long lastTargetQuery = null; + private Long installationDate; - private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; + private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; - private DistributionSet installedDistributionSet; + private DistributionSet installedDistributionSet; - private TargetIdName targetIdName; + private DistributionSet assignedDistributionSet; - private String assignedDistNameVersion; + private TargetIdName targetIdName; - private String installedDistNameVersion; + private String assignedDistNameVersion; - private String pollStatusToolTip; + private String installedDistNameVersion; - private String createdByUser; + private String pollStatusToolTip; - private String createdDate; + private String createdByUser; - private String lastModifiedDate; + private String createdDate; - private String modifiedByUser; + private String lastModifiedDate; - private Status status; + private String modifiedByUser; - /** - * @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()); - } + private Status status; - /** - * @return the createdByUser - */ - public String getCreatedByUser() { - return createdByUser; - } + /** + * @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()); + } - /** - * @param createdByUser - * the createdByUser to set - */ - public void setCreatedByUser(final String createdByUser) { - this.createdByUser = createdByUser; - } + /** + * @return the createdByUser + */ + public String getCreatedByUser() { + return createdByUser; + } - /** - * @return the createdDate - */ - public String getCreatedDate() { - return createdDate; - } + /** + * @param createdByUser + * the createdByUser to set + */ + public void setCreatedByUser(final String createdByUser) { + this.createdByUser = createdByUser; + } - /** - * @param createdDate - * the createdDate to set - */ - public void setCreatedDate(final String createdDate) { - this.createdDate = createdDate; - } + /** + * @return the createdDate + */ + public String getCreatedDate() { + return createdDate; + } - /** - * @return the modifiedByUser - */ - public String getModifiedByUser() { - return modifiedByUser; - } + /** + * @param createdDate + * the createdDate to set + */ + public void setCreatedDate(final String createdDate) { + this.createdDate = createdDate; + } - /** - * @param modifiedByUser - * the modifiedByUser to set - */ - public void setModifiedByUser(final String modifiedByUser) { - this.modifiedByUser = modifiedByUser; - } + /** + * @return the modifiedByUser + */ + public String getModifiedByUser() { + return modifiedByUser; + } - /** - * @return the lastModifiedDate - */ - public String getLastModifiedDate() { - return lastModifiedDate; - } + /** + * @param modifiedByUser + * the modifiedByUser to set + */ + public void setModifiedByUser(final String modifiedByUser) { + this.modifiedByUser = modifiedByUser; + } - /** - * @param lastModifiedDate - * the lastModifiedDate to set - */ - public void setLastModifiedDate(final String lastModifiedDate) { - this.lastModifiedDate = lastModifiedDate; - } + /** + * @return the lastModifiedDate + */ + public String getLastModifiedDate() { + return lastModifiedDate; + } - /** - * @return the assignedDistNameVersion - */ - public String getAssignedDistNameVersion() { - return assignedDistNameVersion; - } + /** + * @param lastModifiedDate + * the lastModifiedDate to set + */ + public void setLastModifiedDate(final String lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } - /** - * @param assignedDistNameVersion - * the assignedDistNameVersion to set - */ - public void setAssignedDistNameVersion(final String assignedDistNameVersion) { - this.assignedDistNameVersion = assignedDistNameVersion; - } + /** + * @return the assignedDistNameVersion + */ + public String getAssignedDistNameVersion() { + return assignedDistNameVersion; + } - /** - * @return the installedDistNameVersion - */ - public String getInstalledDistNameVersion() { - return installedDistNameVersion; - } + /** + * @param assignedDistNameVersion + * the assignedDistNameVersion to set + */ + public void setAssignedDistNameVersion(final String assignedDistNameVersion) { + this.assignedDistNameVersion = assignedDistNameVersion; + } - /** - * @param installedDistNameVersion - * the installedDistNameVersion to set - */ - public void setInstalledDistNameVersion(final String installedDistNameVersion) { - this.installedDistNameVersion = installedDistNameVersion; - } + /** + * @return the installedDistNameVersion + */ + public String getInstalledDistNameVersion() { + return installedDistNameVersion; + } - /** - * GET - ID. - * - * @return String as ID. - */ - @Override - public String getControllerId() { - return controllerId; - } + /** + * @param installedDistNameVersion + * the installedDistNameVersion to set + */ + public void setInstalledDistNameVersion(final String installedDistNameVersion) { + this.installedDistNameVersion = installedDistNameVersion; + } - /** - * SET - ID. - * - * @param controllerId - * as ID - */ - @Override - public void setControllerId(final String controllerId) { - this.controllerId = controllerId; - } + /** + * GET - ID. + * + * @return String as ID. + */ + @Override + public String getControllerId() { + return controllerId; + } - /** - * @return the ipAddress - */ - public URI getAddress() { - return address; - } + /** + * SET - ID. + * + * @param controllerId + * as ID + */ + @Override + public void setControllerId(final String controllerId) { + this.controllerId = controllerId; + } - /** - * @param ipAddress - * the ipAddress to set - */ - public void setAddress(final URI address) { - this.address = address; - } + /** + * @return the ipAddress + */ + public URI getAddress() { + return address; + } - /** - * @return the lastTargetQuery - */ - public Long getLastTargetQuery() { - return lastTargetQuery; - } + /** + * @param ipAddress + * the ipAddress to set + */ + public void setAddress(final URI address) { + this.address = address; + } - /** - * @param lastTargetQuery - * the lastTargetQuery to set - */ - public void setLastTargetQuery(final Long lastTargetQuery) { - this.lastTargetQuery = lastTargetQuery; - } + /** + * @return the lastTargetQuery + */ + public Long getLastTargetQuery() { + return lastTargetQuery; + } - /** - * @return the installationDate - */ - public Long getInstallationDate() { - return installationDate; - } + /** + * @param lastTargetQuery + * the lastTargetQuery to set + */ + public void setLastTargetQuery(final Long lastTargetQuery) { + this.lastTargetQuery = lastTargetQuery; + } - /** - * @param installationDate - * the installationDate to set - */ - public void setInstallationDate(final Long installationDate) { - this.installationDate = installationDate; - } + /** + * @return the installationDate + */ + public Long getInstallationDate() { + return installationDate; + } - /** - * @return the updateStatus - */ - public TargetUpdateStatus getUpdateStatus() { - return updateStatus; - } + /** + * @param installationDate + * the installationDate to set + */ + public void setInstallationDate(final Long installationDate) { + this.installationDate = installationDate; + } - /** - * @param updateStatus - * the updateStatus to set - */ - public void setUpdateStatus(final TargetUpdateStatus updateStatus) { - this.updateStatus = updateStatus; - } + /** + * @return the updateStatus + */ + public TargetUpdateStatus getUpdateStatus() { + return updateStatus; + } - /** - * @return the installedDistributionSet - */ - public DistributionSet getInstalledDistributionSet() { - return installedDistributionSet; - } + /** + * @param updateStatus + * the updateStatus to set + */ + public void setUpdateStatus(final TargetUpdateStatus updateStatus) { + this.updateStatus = updateStatus; + } - /** - * @param installedDistributionSet - * the installedDistributionSet to set - */ - public void setInstalledDistributionSet(final DistributionSet installedDistributionSet) { - this.installedDistributionSet = installedDistributionSet; - } + /** + * @return the installedDistributionSet + */ + public DistributionSet getInstalledDistributionSet() { + return installedDistributionSet; + } - /** - * @return the targetIdName - */ - @Override - public TargetIdName getTargetIdName() { - if (this.targetIdName == null) { - return super.getTargetIdName(); - } - return this.targetIdName; - } + /** + * @param installedDistributionSet + * the installedDistributionSet to set + */ + public void setInstalledDistributionSet(final DistributionSet installedDistributionSet) { + this.installedDistributionSet = installedDistributionSet; + } - /** - * @param targetIdName - * the targetIdName to set - */ - public void setTargetIdName(final TargetIdName targetIdName) { - this.targetIdName = targetIdName; - } + /** + * @return the assignedDistributionSet + */ + public DistributionSet getAssignedDistributionSet() { + return assignedDistributionSet; + } - /** - * @return the pollStatusToolTip - */ - public String getPollStatusToolTip() { - return pollStatusToolTip; - } + /** + * @param assignedDistributionSet + * the assignedDistributionSet to set + */ + public void setAssignedDistributionSet(DistributionSet assignedDistributionSet) { + this.assignedDistributionSet = assignedDistributionSet; + } - /** - * @param pollStatusToolTip - * the pollStatusToolTip to set - */ - public void setPollStatusToolTip(final String pollStatusToolTip) { - this.pollStatusToolTip = pollStatusToolTip; - } + /** + * @return the targetIdName + */ + @Override + public TargetIdName getTargetIdName() { + if (this.targetIdName == null) { + return super.getTargetIdName(); + } + return this.targetIdName; + } - /** - * @return the status - */ - public Status getStatus() { - return status; - } + /** + * @param targetIdName + * the targetIdName to set + */ + public void setTargetIdName(final TargetIdName targetIdName) { + this.targetIdName = targetIdName; + } + + /** + * @return the pollStatusToolTip + */ + public String getPollStatusToolTip() { + return pollStatusToolTip; + } + + /** + * @param pollStatusToolTip + * the pollStatusToolTip to set + */ + public void setPollStatusToolTip(final String pollStatusToolTip) { + this.pollStatusToolTip = pollStatusToolTip; + } + + /** + * @return the status + */ + public Status getStatus() { + return status; + } + + /** + * @param status + * the status to set + */ + public void setStatus(final Status status) { + this.status = status; + } - /** - * @param status - * the status to set - */ - public void setStatus(final Status status) { - this.status = status; - } } 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 ebeb95957..d067b388b 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 @@ -13,10 +13,13 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.filtermanagement.event.CustomFilterUIEvent; @@ -54,194 +57,259 @@ import com.vaadin.ui.themes.ValoTheme; @ViewScope public class CreateOrUpdateFilterTable extends Table { - private static final long serialVersionUID = 6887304217281629713L; + private static final long serialVersionUID = 6887304217281629713L; - @Autowired - private I18N i18n; + @Autowired + private I18N i18n; - @Autowired - private transient EventBus.SessionEventBus eventBus; + @Autowired + private transient EventBus.SessionEventBus eventBus; - @Autowired - private FilterManagementUIState filterManagementUIState; + @Autowired + private FilterManagementUIState filterManagementUIState; - private LazyQueryContainer container; + private LazyQueryContainer container; - private static final int PROPERTY_DEPT = 3; + private static final int PROPERTY_DEPT = 3; - /** - * Initialize the Action History Table. - */ - @PostConstruct - public void init() { - setStyleName("sp-table"); - setSizeFull(); - setImmediate(true); - setHeight(100.0f, Unit.PERCENTAGE); - addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); - addStyleName(ValoTheme.TABLE_SMALL); - setColumnCollapsingAllowed(true); - addCustomGeneratedColumns(); - restoreOnLoad(); - populateTableData(); - setId(SPUIComponetIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); - setSelectable(false); - eventBus.subscribe(this); - } + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } + private static final String INSTALL_DIST_SET = "installedDistributionSet"; - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final CustomFilterUIEvent custFUIEvent) { - if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW - || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { - UI.getCurrent().access(() -> populateTableData()); - } else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY) { - UI.getCurrent().access(() -> onQuery()); - } - } + /** + * Initialize the Action History Table. + */ + @PostConstruct + public void init() { + setStyleName("sp-table"); + setSizeFull(); + setImmediate(true); + setHeight(100.0f, Unit.PERCENTAGE); + addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); + addStyleName(ValoTheme.TABLE_SMALL); + setColumnCollapsingAllowed(true); + addCustomGeneratedColumns(); + restoreOnLoad(); + populateTableData(); + setId(SPUIComponetIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); + setSelectable(false); + eventBus.subscribe(this); + setItemDescriptionGenerator(new TooltipGenerator()); + } - private void restoreOnLoad() { - if (filterManagementUIState.isCreateFilterViewDisplayed()) { - filterManagementUIState.setFilterQueryValue(null); - } else { - filterManagementUIState.getTfQuery() - .ifPresent(value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); - } - } + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } - /** - * Create a empty HierarchicalContainer. - */ - private LazyQueryContainer createContainer() { - // ADD all the filters to the query config - final Map queryConfig = prepareQueryConfigFilters(); + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final CustomFilterUIEvent custFUIEvent) { + if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW + || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { + UI.getCurrent().access(() -> populateTableData()); + } else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY) { + UI.getCurrent().access(() -> onQuery()); + } + } - // Create TargetBeanQuery factory with the query config. - final BeanQueryFactory targetQF = new BeanQueryFactory<>(CustomTargetBeanQuery.class); - targetQF.setQueryConfiguration(queryConfig); + private void restoreOnLoad() { + if (filterManagementUIState.isCreateFilterViewDisplayed()) { + filterManagementUIState.setFilterQueryValue(null); + } else { + filterManagementUIState.getTfQuery() + .ifPresent(value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); + } + } - // create lazy query container with lazy defination and query - final LazyQueryContainer targetTableContainer = new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_CONT_ID_NAME), - targetQF); - targetTableContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); + /** + * Create a empty HierarchicalContainer. + */ + private LazyQueryContainer createContainer() { + // ADD all the filters to the query config + final Map queryConfig = prepareQueryConfigFilters(); - return targetTableContainer; + // Create TargetBeanQuery factory with the query config. + final BeanQueryFactory targetQF = new BeanQueryFactory<>(CustomTargetBeanQuery.class); + targetQF.setQueryConfiguration(queryConfig); - } + // create lazy query container with lazy defination and query + final LazyQueryContainer targetTableContainer = new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_CONT_ID_NAME), + targetQF); + targetTableContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); - private Map prepareQueryConfigFilters() { - final Map queryConfig = new HashMap<>(); - if (!Strings.isNullOrEmpty(filterManagementUIState.getFilterQueryValue())) { - queryConfig.put(SPUIDefinitions.FILTER_BY_QUERY, filterManagementUIState.getFilterQueryValue()); - } - queryConfig.put(SPUIDefinitions.FILTER_BY_INVALID_QUERY, - filterManagementUIState.getIsFilterByInvalidFilterQuery()); - return queryConfig; - } + return targetTableContainer; - /** - * populate campaign data. - * - */ - public void populateTableData() { - container = createContainer(); - setContainerDataSource(container); - addContainerproperties(); - setColumnProperties(); - setPageLength(30); - setCollapsibleColumns(); - } + } - private void setCollapsibleColumns() { - setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, true); - } + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap<>(); + if (!Strings.isNullOrEmpty(filterManagementUIState.getFilterQueryValue())) { + queryConfig.put(SPUIDefinitions.FILTER_BY_QUERY, filterManagementUIState.getFilterQueryValue()); + } + queryConfig.put(SPUIDefinitions.FILTER_BY_INVALID_QUERY, + filterManagementUIState.getIsFilterByInvalidFilterQuery()); + return queryConfig; + } - /** - * Create a empty HierarchicalContainer. - */ - private void addContainerproperties() { - /* Create HierarchicalContainer container */ - container.addContainerProperty(SPUILabelDefinitions.NAME, String.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_BY, String.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, Date.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, null, false, true); - container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); - container.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, String.class, ""); - container.addContainerProperty(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, String.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_TARGET_STATUS, TargetUpdateStatus.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); - } + /** + * populate campaign data. + * + */ + public void populateTableData() { + container = createContainer(); + setContainerDataSource(container); + addContainerproperties(); + setColumnProperties(); + setPageLength(30); + setCollapsibleColumns(); + } - private List getVisbleColumns() { - final List columnList = new ArrayList<>(); - columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - i18n.get("header.assigned.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, - i18n.get("header.installed.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); - return columnList; - } + private void setCollapsibleColumns() { + setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, true); + setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, true); - private Component getStatusIcon(final Object itemId) { - final Item row1 = getItem(itemId); - final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1 - .getItemProperty(SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); - final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); - label.setContentMode(ContentMode.HTML); - if (targetStatus == TargetUpdateStatus.PENDING) { - label.setDescription("Pending"); - label.setStyleName("statusIconYellow"); - label.setValue(FontAwesome.ADJUST.getHtml()); - } else if (targetStatus == TargetUpdateStatus.REGISTERED) { - label.setDescription("Registered"); - label.setStyleName("statusIconLightBlue"); - label.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); - } else if (targetStatus == TargetUpdateStatus.ERROR) { - label.setDescription(i18n.get("label.error")); - label.setStyleName("statusIconRed"); - label.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - } else if (targetStatus == TargetUpdateStatus.IN_SYNC) { - label.setStyleName("statusIconGreen"); - label.setDescription("In-Synch"); - label.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - } else if (targetStatus == TargetUpdateStatus.UNKNOWN) { - label.setStyleName("statusIconBlue"); - label.setDescription(i18n.get("label.unknown")); - label.setValue(FontAwesome.QUESTION_CIRCLE.getHtml()); - } - return label; - } + setColumnCollapsed(ASSIGN_DIST_SET, true); + setColumnCollapsed(INSTALL_DIST_SET, true); + } - private void setColumnProperties() { - final List columnList = getVisbleColumns(); - final List swColumnIds = new ArrayList<>(); - for (final TableColumn column : columnList) { - setColumnHeader(column.getColumnPropertyId(), column.getColumnHeader()); - setColumnExpandRatio(column.getColumnPropertyId(), column.getExpandRatio()); - swColumnIds.add(column.getColumnPropertyId()); - } - setVisibleColumns(swColumnIds.toArray()); - } + /** + * Create a empty HierarchicalContainer. + */ + private void addContainerproperties() { + /* Create HierarchicalContainer container */ + container.addContainerProperty(SPUILabelDefinitions.NAME, String.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_BY, String.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, Date.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, null, false, true); + container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); + container.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, String.class, ""); + container.addContainerProperty(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, String.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_TARGET_STATUS, TargetUpdateStatus.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); - protected void addCustomGeneratedColumns() { - addGeneratedColumn(SPUILabelDefinitions.STATUS_ICON, (source, itemId, columnId) -> getStatusIcon(itemId)); - } + container.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); + container.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); + } - private void onQuery() { - populateTableData(); - eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); - } + private List getVisbleColumns() { + final List columnList = new ArrayList<>(); + columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.15f)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); + columnList.add( + new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, + i18n.get("header.assigned.ds"), 0.125F)); + columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, + i18n.get("header.installed.ds"), 0.125F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); + return columnList; + } + + private Component getStatusIcon(final Object itemId) { + final Item row1 = getItem(itemId); + final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1 + .getItemProperty(SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); + final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + label.setContentMode(ContentMode.HTML); + if (targetStatus == TargetUpdateStatus.PENDING) { + label.setDescription("Pending"); + label.setStyleName("statusIconYellow"); + label.setValue(FontAwesome.ADJUST.getHtml()); + } else if (targetStatus == TargetUpdateStatus.REGISTERED) { + label.setDescription("Registered"); + label.setStyleName("statusIconLightBlue"); + label.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); + } else if (targetStatus == TargetUpdateStatus.ERROR) { + label.setDescription(i18n.get("label.error")); + label.setStyleName("statusIconRed"); + label.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); + } else if (targetStatus == TargetUpdateStatus.IN_SYNC) { + label.setStyleName("statusIconGreen"); + label.setDescription("In-Synch"); + label.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); + } else if (targetStatus == TargetUpdateStatus.UNKNOWN) { + label.setStyleName("statusIconBlue"); + label.setDescription(i18n.get("label.unknown")); + label.setValue(FontAwesome.QUESTION_CIRCLE.getHtml()); + } + return label; + } + + private void setColumnProperties() { + final List columnList = getVisbleColumns(); + final List swColumnIds = new ArrayList<>(); + for (final TableColumn column : columnList) { + setColumnHeader(column.getColumnPropertyId(), column.getColumnHeader()); + setColumnExpandRatio(column.getColumnPropertyId(), column.getExpandRatio()); + swColumnIds.add(column.getColumnPropertyId()); + } + setVisibleColumns(swColumnIds.toArray()); + } + + protected void addCustomGeneratedColumns() { + addGeneratedColumn(SPUILabelDefinitions.STATUS_ICON, (source, itemId, columnId) -> getStatusIcon(itemId)); + } + + private void onQuery() { + populateTableData(); + eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); + } + + public class TooltipGenerator implements ItemDescriptionGenerator { + private static final long serialVersionUID = 688730421728162456L; + + @Override + public String generateDescription(Component source, Object itemId, Object propertyId) { + final DistributionSet distributionSet; + final Item item = getItem(itemId); + if (propertyId != null) { + if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } + } + return null; + } + + private String getDSDetails(final DistributionSet distributionSet) { + StringBuilder swModuleNames = new StringBuilder(); + StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = (Set)distributionSet.getModules(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("
    "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" Required Migration step : ") + .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append("
  • "); + + stringBuilder.append("
"); + return stringBuilder.toString(); + } + + } } 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 dac50ab0d..fae76caf9 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 @@ -41,183 +41,188 @@ import com.google.common.base.Strings; * */ public class TargetBeanQuery extends AbstractBeanQuery { - private static final long serialVersionUID = -5645680058303167558L; - private Sort sort = new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"); - private Collection status = null; - private String[] targetTags = null; - private Long distributionId = null; - private String searchText = null; - private Boolean noTagClicked = Boolean.FALSE; - private transient TargetManagement targetManagement; - private transient I18N i18N; - private Long pinnedDistId = null; - private TargetFilterQuery targetFilterQuery; - private ManagementUIState managementUIState; + private static final long serialVersionUID = -5645680058303167558L; + private Sort sort = new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"); + private Collection status = null; + private String[] targetTags = null; + private Long distributionId = null; + private String searchText = null; + private Boolean noTagClicked = Boolean.FALSE; + private transient TargetManagement targetManagement; + private transient I18N i18N; + private Long pinnedDistId = null; + private TargetFilterQuery targetFilterQuery; + private ManagementUIState managementUIState; - /** - * Parametric Constructor. - * - * @param definition - * as Def - * @param queryConfig - * as Config - * @param sortIds - * as sort - * @param sortStates - * as Sort status - */ - public TargetBeanQuery(final QueryDefinition definition, final Map queryConfig, - final Object[] sortIds, final boolean[] sortStates) { - super(definition, queryConfig, sortIds, sortStates); + /** + * Parametric Constructor. + * + * @param definition + * as Def + * @param queryConfig + * as Config + * @param sortIds + * as sort + * @param sortStates + * as Sort status + */ + public TargetBeanQuery(final QueryDefinition definition, final Map queryConfig, + final Object[] sortIds, final boolean[] sortStates) { + super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { - status = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS); - targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); - noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); - distributionId = (Long) queryConfig.get(SPUIDefinitions.FILTER_BY_DISTRIBUTION); - searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); - targetFilterQuery = (TargetFilterQuery) queryConfig.get(SPUIDefinitions.FILTER_BY_TARGET_FILTER_QUERY); - if (!Strings.isNullOrEmpty(searchText)) { - searchText = String.format("%%%s%%", searchText); - } - pinnedDistId = (Long) queryConfig.get(SPUIDefinitions.ORDER_BY_DISTRIBUTION); - } + if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + status = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS); + targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); + noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); + distributionId = (Long) queryConfig.get(SPUIDefinitions.FILTER_BY_DISTRIBUTION); + searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); + targetFilterQuery = (TargetFilterQuery) queryConfig.get(SPUIDefinitions.FILTER_BY_TARGET_FILTER_QUERY); + if (!Strings.isNullOrEmpty(searchText)) { + searchText = String.format("%%%s%%", searchText); + } + pinnedDistId = (Long) queryConfig.get(SPUIDefinitions.ORDER_BY_DISTRIBUTION); + } - if (HawkbitCommonUtil.checkBolArray(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. - for (int targetId = 1; targetId < sortIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); - } - } - } + if (HawkbitCommonUtil.checkBolArray(sortStates)) { + // Initalize Sor + sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); + // Add sort. + for (int targetId = 1; targetId < sortIds.length; targetId++) { + sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); + } + } + } - @Override - protected ProxyTarget constructBean() { - return new ProxyTarget(); - } + @Override + protected ProxyTarget constructBean() { + return new ProxyTarget(); + } - @Override - protected List loadBeans(final int startIndex, final int count) { - Slice targetBeans; - final List proxyTargetBeans = new ArrayList<>(); - if (pinnedDistId != null) { - targetBeans = getTargetManagement().findTargetsAllOrderByLinkedDistributionSet( - new OffsetBasedPageRequest(startIndex, SPUIDefinitions.PAGE_SIZE, sort), pinnedDistId, - distributionId, status, searchText, noTagClicked, targetTags); - } else if (null != targetFilterQuery) { - targetBeans = getTargetManagement().findTargetsAll(targetFilterQuery, - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); - } else if (!anyFilterSelected()) { - targetBeans = getTargetManagement().findTargetsAll( - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); - } else { - targetBeans = getTargetManagement().findTargetByFilters( - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), status, - searchText, distributionId, noTagClicked, targetTags); - } - for (final Target targ : targetBeans) { - final ProxyTarget prxyTarget = new ProxyTarget(); - prxyTarget.setTargetIdName(targ.getTargetIdName()); - prxyTarget.setName(targ.getName()); - prxyTarget.setDescription(targ.getDescription()); - prxyTarget.setControllerId(targ.getControllerId()); - prxyTarget.setInstallationDate(targ.getTargetInfo().getInstallationDate()); - prxyTarget.setAddress(targ.getTargetInfo().getAddress()); - prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); - prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); - prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); - prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); - prxyTarget.setCreatedAt(targ.getCreatedAt()); - prxyTarget.setCreatedByUser(HawkbitCommonUtil.getIMUser(targ.getCreatedBy())); - prxyTarget.setModifiedByUser(HawkbitCommonUtil.getIMUser(targ.getLastModifiedBy())); + @Override + protected List loadBeans(final int startIndex, final int count) { + Slice targetBeans; + final List proxyTargetBeans = new ArrayList<>(); + if (pinnedDistId != null) { + targetBeans = getTargetManagement().findTargetsAllOrderByLinkedDistributionSet( + new OffsetBasedPageRequest(startIndex, SPUIDefinitions.PAGE_SIZE, sort), pinnedDistId, + distributionId, status, searchText, noTagClicked, targetTags); + } else if (null != targetFilterQuery) { + targetBeans = getTargetManagement().findTargetsAll(targetFilterQuery, + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); + } else if (!anyFilterSelected()) { + targetBeans = getTargetManagement().findTargetsAll( + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); + } else { + targetBeans = getTargetManagement().findTargetByFilters( + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), status, + searchText, distributionId, noTagClicked, targetTags); + } + for (final Target targ : targetBeans) { + final ProxyTarget prxyTarget = new ProxyTarget(); + prxyTarget.setTargetIdName(targ.getTargetIdName()); + prxyTarget.setName(targ.getName()); + prxyTarget.setDescription(targ.getDescription()); + prxyTarget.setControllerId(targ.getControllerId()); + prxyTarget.setInstallationDate(targ.getTargetInfo().getInstallationDate()); + prxyTarget.setAddress(targ.getTargetInfo().getAddress()); + prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); + prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); + prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); + prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); + prxyTarget.setCreatedAt(targ.getCreatedAt()); + prxyTarget.setCreatedByUser(HawkbitCommonUtil.getIMUser(targ.getCreatedBy())); + prxyTarget.setModifiedByUser(HawkbitCommonUtil.getIMUser(targ.getLastModifiedBy())); - if (pinnedDistId == null) { - prxyTarget.setInstalledDistributionSet(null); - prxyTarget.setAssignedDistributionSet(null); - } else { - final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); - final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); - prxyTarget.setInstalledDistributionSet(installedDistributionSet); - final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); - prxyTarget.setAssignedDistributionSet(assignedDistributionSet); - } + if (pinnedDistId == null) { + prxyTarget.setInstalledDistributionSet(null); + prxyTarget.setAssignedDistributionSet(null); - prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); - prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); - prxyTarget.setTargetInfo(targ.getTargetInfo()); - prxyTarget.setPollStatusToolTip( - HawkbitCommonUtil.getPollStatusToolTip(prxyTarget.getTargetInfo().getPollStatus(), getI18N())); - proxyTargetBeans.add(prxyTarget); - } - return proxyTargetBeans; - } + } else { + final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); + final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); + prxyTarget.setInstalledDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( + installedDistributionSet.getName(), installedDistributionSet.getVersion())); + prxyTarget.setInstalledDistributionSet(installedDistributionSet); + final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); + prxyTarget.setAssignedDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( + assignedDistributionSet.getName(), assignedDistributionSet.getVersion())); + prxyTarget.setAssignedDistributionSet(assignedDistributionSet); + } - private Boolean isTagSelected() { - if (targetTags == null && !noTagClicked) { - return false; - } - return true; - } + prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); + prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); + prxyTarget.setTargetInfo(targ.getTargetInfo()); + prxyTarget.setPollStatusToolTip( + HawkbitCommonUtil.getPollStatusToolTip(prxyTarget.getTargetInfo().getPollStatus(), getI18N())); + proxyTargetBeans.add(prxyTarget); + } + return proxyTargetBeans; + } - @Override - protected void saveBeans(final List addedTargets, final List modifiedTargets, - final List removedTargets) { - // CRUD operations on Target will be done through repository methods - } + private Boolean isTagSelected() { + if (targetTags == null && !noTagClicked) { + return false; + } + return true; + } - private Boolean anyFilterSelected() { - if (status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected()) { - return false; - } - return true; - } + @Override + protected void saveBeans(final List addedTargets, final List modifiedTargets, + final List removedTargets) { + // CRUD operations on Target will be done through repository methods + } - @Override - public int size() { - final long totSize = getTargetManagement().countTargetsAll(); - long size; - if (null != targetFilterQuery) { - size = getTargetManagement().countTargetByTargetFilterQuery(targetFilterQuery); - } else if (!anyFilterSelected()) { - size = totSize; - } else { - size = getTargetManagement().countTargetByFilters(status, searchText, distributionId, noTagClicked, - targetTags); - } + private Boolean anyFilterSelected() { + if (status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected()) { + return false; + } + return true; + } - final ManagementUIState tmpManagementUIState = getManagementUIState(); - tmpManagementUIState.setTargetsCountAll(totSize); - if (size > SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES) { - tmpManagementUIState.setTargetsTruncated(size - SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES); - size = SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES; - } else { - tmpManagementUIState.setTargetsTruncated(null); - } + @Override + public int size() { + final long totSize = getTargetManagement().countTargetsAll(); + long size; + if (null != targetFilterQuery) { + size = getTargetManagement().countTargetByTargetFilterQuery(targetFilterQuery); + } else if (!anyFilterSelected()) { + size = totSize; + } else { + size = getTargetManagement().countTargetByFilters(status, searchText, distributionId, noTagClicked, + targetTags); + } - return (int) size; - } + final ManagementUIState tmpManagementUIState = getManagementUIState(); + tmpManagementUIState.setTargetsCountAll(totSize); + if (size > SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES) { + tmpManagementUIState.setTargetsTruncated(size - SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES); + size = SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES; + } else { + tmpManagementUIState.setTargetsTruncated(null); + } - private TargetManagement getTargetManagement() { - if (targetManagement == null) { - targetManagement = SpringContextHelper.getBean(TargetManagement.class); - } - return targetManagement; - } + return (int) size; + } - private ManagementUIState getManagementUIState() { - if (managementUIState == null) { - managementUIState = SpringContextHelper.getBean(ManagementUIState.class); - } - return managementUIState; - } + private TargetManagement getTargetManagement() { + if (targetManagement == null) { + targetManagement = SpringContextHelper.getBean(TargetManagement.class); + } + return targetManagement; + } - private I18N getI18N() { - if (i18N == null) { - i18N = SpringContextHelper.getBean(I18N.class); - } - return i18N; - } + private ManagementUIState getManagementUIState() { + if (managementUIState == null) { + managementUIState = SpringContextHelper.getBean(ManagementUIState.class); + } + return managementUIState; + } + + private I18N getI18N() { + if (i18N == null) { + i18N = SpringContextHelper.getBean(I18N.class); + } + return i18N; + } } 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..2bfb717f3 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,7 +24,9 @@ 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.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; +import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetIdName; @@ -40,6 +42,7 @@ import org.eclipse.hawkbit.ui.filter.target.CustomTargetFilter; import org.eclipse.hawkbit.ui.filter.target.TargetSearchTextFilter; import org.eclipse.hawkbit.ui.filter.target.TargetStatusFilter; import org.eclipse.hawkbit.ui.filter.target.TargetTagFilter; +import org.eclipse.hawkbit.ui.filtermanagement.CreateOrUpdateFilterTable.TooltipGenerator; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.ManagementViewAcceptCriteria; @@ -92,6 +95,7 @@ import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; +import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; /** * Concrete implementation of Target table. @@ -108,6 +112,9 @@ public class TargetTable extends AbstractTable implements private static final int PROPERTY_DEPT = 3; private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; + + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; + private static final String INSTALL_DIST_SET = "installedDistributionSet"; @Autowired private transient TargetManagement targetManagement; @@ -136,6 +143,7 @@ public class TargetTable extends AbstractTable implements addActionHandler(this); actionSelectAll = new ShortcutAction(i18n.get("action.target.table.selectall")); actionUnSelectAll = new ShortcutAction(i18n.get("action.target.table.clear")); + setItemDescriptionGenerator(new TooltipGenerator()); } /** @@ -1073,4 +1081,61 @@ public class TargetTable extends AbstractTable implements private boolean isFilteredByTags() { return !managementUIState.getTargetTableFilters().getClickedTargetTags().isEmpty(); } + + + /** + * tooltip for assignedDS and installedDS + */ + + protected class TooltipGenerator implements ItemDescriptionGenerator { + private static final long serialVersionUID = 688730421728162456L; + + @Override + public String generateDescription(Component source, Object itemId, Object propertyId) { + final DistributionSet distributionSet; + final Item item = getItem(itemId); + if (propertyId != null) { + if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } + } + return null; + } + + private String getDSDetails(final DistributionSet distributionSet) { + StringBuilder swModuleNames = new StringBuilder(); + StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = (Set)distributionSet.getModules(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("
    "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" Required Migration step : ") + .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append("
  • "); + stringBuilder.append("
"); + return stringBuilder.toString(); + } + } } \ No newline at end of file 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 6514ba2df..a010a3ba4 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 @@ -8,7 +8,10 @@ */ package org.eclipse.hawkbit.ui.rollout.rollout; +import java.util.Set; + import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import com.vaadin.server.FontAwesome; @@ -30,11 +33,85 @@ public class ProxyRollout extends Rollout { private Long numberOfGroups; private Boolean isActionRecieved = Boolean.FALSE; + + private Boolean isRequiredMigrationStep = Boolean.FALSE; private String totalTargetsCount; private RolloutRendererData rolloutRendererData; + + private String discription; + private String type; + + private Set swModules; + + + + /** + * @return the isRequiredMigrationStep + */ + + public Boolean getIsRequiredMigrationStep() { + return isRequiredMigrationStep; + } + + /** + * @param isRequiredMigrationStep + * the isRequiredMigrationStep to set + */ + + public void setIsRequiredMigrationStep(Boolean isRequiredMigrationStep) { + this.isRequiredMigrationStep = isRequiredMigrationStep; + } + + + /** + * @return the discription + */ + + public String getDiscription() { + return discription; + } + + /** + * @param discription + * the discription to set + */ + + public void setDiscription(String discription) { + this.discription = discription; + } + + /** + * @return the type + */ + public String getType() { + return type; + } + + /** + * @param type + * the type to set + */ + + public void setType(String type) { + this.type = type; + } + /** + * + * @return the Set of Software modules + */ + public Set getSwModules() { + return swModules; + } + /** + * @param swModules + * Set to set + */ + public void setSwModules(Set swModules) { + this.swModules = swModules; + } public RolloutRendererData getRolloutRendererData() { return rolloutRendererData; 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 34ae323da..dbd01ac8a 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 @@ -136,6 +136,11 @@ 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()); proxyRolloutList.add(proxyRollout); } 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 1bb0fd831..c68bbf700 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,12 +14,14 @@ import java.util.EnumMap; import java.util.List; 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.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.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; @@ -68,562 +70,619 @@ import com.vaadin.ui.renderers.HtmlRenderer; @ViewScope public class RolloutListGrid extends AbstractGrid { - private static final long serialVersionUID = 4060904914954370524L; - - 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 ROLLOUT_RENDERER_DATA = "rolloutRendererData"; - - @Autowired - private transient RolloutManagement rolloutManagement; - - @Autowired - private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; - - @Autowired - private UINotification uiNotification; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Autowired - private transient SpPermissionChecker permissionChecker; - - private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - - /** - * Handles the RolloutEvent to refresh Grid. - * - */ - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - switch (event) { - case FILTER_BY_TEXT: - case CREATE_ROLLOUT: - case UPDATE_ROLLOUT: - case SHOW_ROLLOUTS: - refreshGrid(); - break; - default: - return; - } - } - - /** - * Handles the RolloutChangeEvent to refresh the item in the grid. - * - * @param rolloutChangeEvent - * the event which contains the rollout which has been changed - */ - @SuppressWarnings("unchecked") - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { - if (!rolloutUIState.isShowRollOuts()) { - return; - } - final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); - final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); - if (item == null) { - return; - } - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); - final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); - final int groupsCreated = rollout.getRolloutGroupsCreated(); - if (groupsCreated != 0) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); - } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) - .setValue(Long.valueOf(rollout.getRolloutGroups().size())); - } - item.getItemProperty(ROLLOUT_RENDERER_DATA) - .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); - - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } - - @Override - protected void addContainerProperties() { - final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); - - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - 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); - - } - - @Override - protected void setColumnExpandRatio() { - - getColumn(ROLLOUT_RENDERER_DATA).setMinimumWidth(40); - getColumn(ROLLOUT_RENDERER_DATA).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - - 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); - - setFrozenColumnCount(getColumns().size()); - } - - @Override - protected void setColumnHeaderNames() { - getColumn(ROLLOUT_RENDERER_DATA).setHeaderCaption(i18n.get("header.name")); - 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")); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); - getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - 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")); - } - - @Override - protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; - } - - @Override - protected void setColumnProperties() { - final List columnList = new ArrayList<>(); - columnList.add(ROLLOUT_RENDERER_DATA); - columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - 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(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); - alignColumns(); - } - - @Override - protected void setHiddenColumns() { - final List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (final Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - - } - - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } - - @Override - protected void addColumnRenderes() { - getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), - new TotalTargetGroupsConverter()); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new TotalTargetCountStatusConverter()); - - createRolloutStatusToFontMap(); - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); - - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - - final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); - customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); - getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); - - } - - private void createRolloutStatusToFontMap() { - statusIconMap.put(RolloutStatus.FINISHED, - new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); - statusIconMap.put(RolloutStatus.PAUSED, - new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); - statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); - statusIconMap.put(RolloutStatus.READY, - new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); - statusIconMap.put(RolloutStatus.STOPPED, - new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); - statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); - statusIconMap.put(RolloutStatus.ERROR_CREATING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.ERROR_STARTING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - } - - 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; - } - }); - } - - private void onClickOfRolloutName(final RendererClickEvent event) { - rolloutUIState.setRolloutId((long) event.getItemId()); - final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutUIState.setRolloutName(rolloutName); - final String ds = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); - rolloutUIState.setRolloutDistributionSet(ds); - 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(event -> menuItemClicked(event)); - 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()) { - 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; - } - } - - 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); - } - - private void refreshGrid() { - ((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(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); - } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { - return ((RolloutRendererData) cell.getProperty().getValue()).getName(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } - return null; - } - - enum ACTION { - PAUSE, RESUME, START, UPDATE - } - - /** - * Represents data of context menu item. - * - */ - public static class ContextMenuData { - - private Long rolloutId; - - private ACTION action; - - /** - * Set rollout if and action. - * - * @param rolloutId - * id of rollout - * @param action - * user action {@link ACTION} - */ - public ContextMenuData(final Long rolloutId, final ACTION action) { - this.action = action; - this.rolloutId = rolloutId; - } - - /** - * @return the rolloutId - */ - public Long getRolloutId() { - return rolloutId; - } - - /** - * @param rolloutId - * the rolloutId to set - */ - public void setRolloutId(final Long rolloutId) { - this.rolloutId = rolloutId; - } - - /** - * @return the action - */ - public ACTION getAction() { - return action; - } - - /** - * @param action - * the action to set - */ - public void setAction(final ACTION action) { - this.action = action; - } - } - - /** - * - * Converter to convert {@link RolloutStatus} to string. - * - */ - class RolloutStatusConverter implements Converter { - - private static final long serialVersionUID = -1217685750825632678L; - - @Override - public RolloutStatus convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final RolloutStatus value, final Class targetType, - final Locale locale) { - return convertRolloutStatusToString(value); - } - - @Override - public Class getModelType() { - return RolloutStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - - private String convertRolloutStatusToString(final RolloutStatus value) { - final StatusFontIcon statusFontIcon = statusIconMap.get(value); - final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); - } - } - - /** - * Converter to convert {@link TotalTargetCountStatus} to formatted string - * with status and count details. - * - */ - class TotalTargetCountStatusConverter implements Converter { - - private static final long serialVersionUID = -5794528427855153924L; - - @Override - public TotalTargetCountStatus convertToModel(final String value, - final Class targetType, final Locale locale) - 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 { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } - - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - } - - /** - * Converter to convert 0 to empty, if total target groups is zero. - * - */ - class TotalTargetGroupsConverter implements Converter { - - 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 { - return null; - } - - @Override - public String convertToPresentation(final Long value, final Class targetType, - final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - if (value == 0) { - return ""; - } - return value.toString(); - } - - @Override - public Class getModelType() { - return Long.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - - } + private static final long serialVersionUID = 4060904914954370524L; + + 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 DS_TYPE = "type"; + + private static final String SW_MODULES = "swModules"; + + private static final String IS_REQUIRED_MIGRATION_STEP = "isRequiredMigrationStep"; + + private static final String ROLLOUT_RENDERER_DATA = "rolloutRendererData"; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); + + /** + * Handles the RolloutEvent to refresh Grid. + * + */ + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + switch (event) { + case FILTER_BY_TEXT: + case CREATE_ROLLOUT: + case UPDATE_ROLLOUT: + case SHOW_ROLLOUTS: + refreshGrid(); + break; + default: + return; + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the grid. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + if (!rolloutUIState.isShowRollOuts()) { + return; + } + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + if (item == null) { + return; + } + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + final int groupsCreated = rollout.getRolloutGroupsCreated(); + if (groupsCreated != 0) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); + } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } + item.getItemProperty(ROLLOUT_RENDERER_DATA) + .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); + + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } + + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGridContainer.addContainerProperty(DS_TYPE, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SW_MODULES, Set.class, null, false, false); + rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(IS_REQUIRED_MIGRATION_STEP, boolean.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + 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); + + } + + @Override + protected void setColumnExpandRatio() { + + getColumn(ROLLOUT_RENDERER_DATA).setMinimumWidth(40); + getColumn(ROLLOUT_RENDERER_DATA).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); + + 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + + setFrozenColumnCount(getColumns().size()); + } + + @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(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")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + 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")); + } + + @Override + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; + } + + @Override + protected void setColumnProperties() { + final List columnList = new ArrayList<>(); + columnList.add(ROLLOUT_RENDERER_DATA); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(DS_TYPE); + columnList.add(SW_MODULES); + columnList.add(IS_REQUIRED_MIGRATION_STEP); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + 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(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } + + @Override + protected void setHiddenColumns() { + final List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + columnsToBeHidden.add(IS_REQUIRED_MIGRATION_STEP); + columnsToBeHidden.add(DS_TYPE); + columnsToBeHidden.add(SW_MODULES); + for (final Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } + + @Override + protected void addColumnRenderes() { + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), + new TotalTargetGroupsConverter()); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); + + createRolloutStatusToFontMap(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); + + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + + final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); + customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); + getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); + + } + + private void createRolloutStatusToFontMap() { + statusIconMap.put(RolloutStatus.FINISHED, + new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); + statusIconMap.put(RolloutStatus.PAUSED, + new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); + statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); + statusIconMap.put(RolloutStatus.READY, + new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); + statusIconMap.put(RolloutStatus.STOPPED, + new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); + statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); + statusIconMap.put(RolloutStatus.ERROR_CREATING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.ERROR_STARTING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + } + + 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; + } + }); + } + + private void onClickOfRolloutName(final RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutUIState.setRolloutName(rolloutName); + final String ds = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); + rolloutUIState.setRolloutDistributionSet(ds); + 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(event -> menuItemClicked(event)); + 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()) { + 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; + } + } + + 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); + } + + private void refreshGrid() { + ((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(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { + return ((RolloutRendererData) cell.getProperty().getValue()).getName(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } else if (SPUILabelDefinitions.VAR_DIST_NAME_VERSION.equals(cell.getPropertyId())) { + return getDSDetails((Item) cell.getItem()); + } + return null; + } + + private String getDSDetails(final Item rolloutItem) { + StringBuilder swModuleNames = new StringBuilder(); + StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = (Set) rolloutItem.getItemProperty(SW_MODULES).getValue(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("
    "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Description : ") + .append((String) rolloutItem.getItemProperty(SPUILabelDefinitions.VAR_DESC).getValue()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Type : ") + .append((String) rolloutItem.getItemProperty(DS_TYPE).getValue()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("Required Migration step : ") + .append((boolean) rolloutItem.getItemProperty(IS_REQUIRED_MIGRATION_STEP).getValue() ? "Yes" : "No"); + stringBuilder.append("
  • "); + + stringBuilder.append("
  • "); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append("
  • "); + + stringBuilder.append("
  • "); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append("
  • "); + + stringBuilder.append("
"); + return stringBuilder.toString(); + } + + enum ACTION { + PAUSE, RESUME, START, UPDATE + } + + /** + * Represents data of context menu item. + * + */ + public static class ContextMenuData { + + private Long rolloutId; + + private ACTION action; + + /** + * Set rollout if and action. + * + * @param rolloutId + * id of rollout + * @param action + * user action {@link ACTION} + */ + public ContextMenuData(final Long rolloutId, final ACTION action) { + this.action = action; + this.rolloutId = rolloutId; + } + + /** + * @return the rolloutId + */ + public Long getRolloutId() { + return rolloutId; + } + + /** + * @param rolloutId + * the rolloutId to set + */ + public void setRolloutId(final Long rolloutId) { + this.rolloutId = rolloutId; + } + + /** + * @return the action + */ + public ACTION getAction() { + return action; + } + + /** + * @param action + * the action to set + */ + public void setAction(final ACTION action) { + this.action = action; + } + } + + /** + * + * Converter to convert {@link RolloutStatus} to string. + * + */ + class RolloutStatusConverter implements Converter { + + private static final long serialVersionUID = -1217685750825632678L; + + @Override + public RolloutStatus convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, final Class targetType, + final Locale locale) { + return convertRolloutStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + private String convertRolloutStatusToString(final RolloutStatus value) { + final StatusFontIcon statusFontIcon = statusIconMap.get(value); + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + } + } + + /** + * Converter to convert {@link TotalTargetCountStatus} to formatted string + * with status and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { + + private static final long serialVersionUID = -5794528427855153924L; + + @Override + public TotalTargetCountStatus convertToModel(final String value, + final Class targetType, final Locale locale) + 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 { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * Converter to convert 0 to empty, if total target groups is zero. + * + */ + class TotalTargetGroupsConverter implements Converter { + + 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 { + return null; + } + + @Override + public String convertToPresentation(final Long value, final Class targetType, + final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + if (value == 0) { + return ""; + } + return value.toString(); + } + + @Override + public Class getModelType() { + return Long.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + } } 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 117b5bcb8..7fdf3a46b 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 @@ -23,6 +23,7 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.im.authentication.UserPrincipal; 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.RolloutGroup; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -106,6 +107,9 @@ public final class HawkbitCommonUtil { private static final String TARGET_TAG_DROP_REMOVE_SCRIPT = "var m = document.getElementById('show-filter-drop-hint'); if(m) { document.head.removeChild(m); } "; private static final String DELETE_DROP_CREATE_SCRIPT = "var q = document.getElementById('show-delete-drop-hint'); if(q) { } else { showDeleteDrop = document.createElement('style'); showDeleteDrop.id=\"show-delete-drop-hint\"; document.head.appendChild(showDeleteDrop); }"; private static final String DELETE_TAG_DROP_REMOVE_SCRIPT = "var o = document.getElementById('show-delete-drop-hint'); if(o) { document.head.removeChild(o); } "; + + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; + private static final String INSTALL_DIST_SET = "installedDistributionSet"; /** * Define empty string. @@ -1090,6 +1094,10 @@ public final class HawkbitCommonUtil { targetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_POLL_STATUS_TOOL_TIP, String.class, null, false, true); targetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); + + targetTableContainer.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); + targetTableContainer.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); + } /** From 99f0a4e882d01716bc5fd96691fc61def98c82fa Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 26 Apr 2016 14:08:42 +0200 Subject: [PATCH 201/344] 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 202/344] 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 0b275655c01f07bd5c0bd0b3bcf4df2dd2b73659 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Tue, 26 Apr 2016 18:47:47 +0530 Subject: [PATCH 203/344] Focus-TextArea-On-AddNewWindow Signed-off-by: venu1278 --- .../artifacts/smtable/SoftwareModuleAddUpdateWindow.java | 3 ++- .../artifacts/smtype/CreateUpdateSoftwareTypeLayout.java | 1 + .../disttype/CreateUpdateDistSetTypeLayout.java | 3 ++- .../dstable/DistributionAddUpdateWindowLayout.java | 7 ++++--- .../hawkbit/ui/management/tag/CreateUpdateTagLayout.java | 7 ++++--- .../targettable/TargetAddUpdateWindowLayout.java | 2 +- .../ui/rollout/rollout/AddUpdateRolloutWindowLayout.java | 1 + 7 files changed, 15 insertions(+), 9 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 cc08929bb..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 @@ -234,12 +234,13 @@ 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); window.setContent(mainLayout); window.setModal(true); + nameTextField.focus(); } private void addDescriptionTextChangeListener() { 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..fe1fa9024 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 @@ -257,6 +257,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C mainLayout = new HorizontalLayout(); mainLayout.addComponent(fieldButtonLayout); setCompositionRoot(mainLayout); + typeName.focus(); } private void addListeners() { 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..64a06bd38 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 @@ -284,7 +284,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co mainLayout.addComponent(fieldLayout); mainLayout.addComponent(twinTableLayout); - + colorLayout = new HorizontalLayout(); sliderLayout = new VerticalLayout(); final HorizontalLayout chooseColorLayout = new HorizontalLayout(); @@ -299,6 +299,7 @@ public class CreateUpdateDistSetTypeLayout extends CustomComponent implements Co mainWindowLayout.addComponent(colorLayout); mainWindowLayout.addComponent(buttonLayout); setCompositionRoot(mainWindowLayout); + typeName.focus(); } private HorizontalLayout createTwinColumnLayout() { 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..5d9304191 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 @@ -145,11 +145,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. 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..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 @@ -171,7 +171,7 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C tagName = SPUIComponentProvider.getTextField("", 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, false, "", i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); @@ -237,7 +237,8 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C fieldLayout.addComponent(madatoryLabel); fieldLayout.addComponent(tagName); fieldLayout.addComponent(tagDesc); - + + final HorizontalLayout colorLabelLayout = new HorizontalLayout(); colorLabelLayout.addComponents(colorLabel, tagColorPreviewBtn); fieldLayout.addComponent(colorLabelLayout); @@ -257,8 +258,8 @@ public abstract class CreateUpdateTagLayout extends CustomComponent implements C mainLayout = new HorizontalLayout(); mainLayout.addComponent(fieldButtonLayout); - setCompositionRoot(mainLayout); + tagName.focus(); } 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..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 @@ -152,7 +152,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent { madatoryLabel.setVisible(Boolean.FALSE); } mainLayout.addComponents(madatoryLabel, controllerIDTextField, nameTextField, descTextArea, buttonsLayout); - + nameTextField.focus(); } private void addListeners() { 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..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 @@ -209,6 +209,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { actionTypeOptionGroupLayout, linkToHelp, getSaveDiscardButtonLayout()); mainLayout.setComponentAlignment(linkToHelp, Alignment.BOTTOM_RIGHT); setCompositionRoot(mainLayout); + rolloutName.focus(); } private HorizontalLayout getGroupDetailsLayout() { From c2649b4b54dbeb7eaee7c3a4b6e5b7d0301aafaf Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 26 Apr 2016 16:19:37 +0200 Subject: [PATCH 204/344] 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 205/344] 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 5c86d2ad682c6c07fd5162087aedb0e54c3de190 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 26 Apr 2016 17:36:19 +0200 Subject: [PATCH 206/344] Upgrade Vaadin and MariaDB to newest stable version. Signed-off-by: Kai Zimmermann --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0c3207c13..b6d09758e 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,7 @@ 1.0.0 0.0.6.RELEASE - 7.6.4 + 7.6.5 ${vaadin.version} 7.4.0.1 2.2.0 @@ -94,7 +94,7 @@ 0.9.1 1.8.5 19.0 - 1.3.5 + 1.4.3 1.50.2 1.18.1 2.2.4 From e5ddf075be5384d6fe828cf8c3e9b1503d5bad07 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 27 Apr 2016 08:39:12 +0200 Subject: [PATCH 207/344] 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 208/344] 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 209/344] 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 210/344] 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 211/344] 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 9dd51e710544a58134ceb7d40981e3b0f0191c7e Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 27 Apr 2016 15:37:54 +0200 Subject: [PATCH 212/344] Use java 8 duration to calculate ttl Signed-off-by: SirWayne --- .../org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java index e9ad60a1c..7ed5e90c1 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.amqp; +import java.time.Duration; import java.util.HashMap; import java.util.Map; @@ -25,7 +26,7 @@ public class AmqpDeadletterProperties { * Message time to live (ttl) for the deadletter queue. Default ttl is 3 * weeks. */ - private int ttl = 1_814_400_000; + private long ttl = Duration.ofDays(21).toMillis(); /** * Return the deadletter arguments. @@ -57,11 +58,11 @@ public class AmqpDeadletterProperties { return args; } - public int getTtl() { + public long getTtl() { return ttl; } - public void setTtl(final int ttl) { + public void setTtl(final long ttl) { this.ttl = ttl; } From 3851a6c1dfae45511d407ec03efdcfea55da99cb Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Wed, 27 Apr 2016 16:47:14 +0200 Subject: [PATCH 213/344] 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 b53a635c1fc12146697767d6fcedcb851f60d0a9 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 27 Apr 2016 16:50:33 +0200 Subject: [PATCH 214/344] introduce a conditional property which allows to disable the startup generation of default simulator devices. Signed-off-by: Michael Hirsch --- .../java/org/eclipse/hawkbit/simulator/SimulatorStartup.java | 2 ++ 1 file changed, 2 insertions(+) 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 b772bae1f..9e6c0573a 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 @@ -16,6 +16,7 @@ import org.eclipse.hawkbit.simulator.amqp.SpSenderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; @@ -25,6 +26,7 @@ import org.springframework.stereotype.Component; * */ @Component +@ConditionalOnProperty(prefix = "com.bosch.hawkbit.simulator", name = "generateOnStartup", matchIfMissing = true) public class SimulatorStartup implements ApplicationListener { private static final Logger LOGGER = LoggerFactory.getLogger(SimulatorStartup.class); From e5880561a1191fb2a96dbe7fa121638d74e3a8c7 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 27 Apr 2016 16:59:39 +0200 Subject: [PATCH 215/344] re-name property aligning the autostart property Signed-off-by: Michael Hirsch --- .../java/org/eclipse/hawkbit/simulator/SimulatorStartup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 9e6c0573a..19367a9d4 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 @@ -26,7 +26,7 @@ import org.springframework.stereotype.Component; * */ @Component -@ConditionalOnProperty(prefix = "com.bosch.hawkbit.simulator", name = "generateOnStartup", matchIfMissing = true) +@ConditionalOnProperty(prefix = "hawkbit.device.simulator", name = "autostart", matchIfMissing = true) public class SimulatorStartup implements ApplicationListener { private static final Logger LOGGER = LoggerFactory.getLogger(SimulatorStartup.class); From f86f615c917dc334c28dd20858f340ac594e9b10 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 27 Apr 2016 17:34:07 +0200 Subject: [PATCH 216/344] 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 217/344] 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 218/344] 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 63d6448432d5474373de49cde1d7f5194d8981cc Mon Sep 17 00:00:00 2001 From: venu1278 Date: Thu, 28 Apr 2016 11:55:48 +0530 Subject: [PATCH 219/344] Displaying DistributionSet Details in Tooltip Signed-off-by: venu1278 --- .../hawkbit/ui/management/targettable/TargetBeanQuery.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d6b7f47c9..943efc262 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 @@ -131,8 +131,8 @@ public class TargetBeanQuery extends AbstractBeanQuery { prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); prxyTarget.setCreatedAt(targ.getCreatedAt()); - prxyTarget.setCreatedByUser(HawkbitCommonUtil.getIMUser(targ.getCreatedBy())); - prxyTarget.setModifiedByUser(HawkbitCommonUtil.getIMUser(targ.getLastModifiedBy())); + prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); + prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); if (pinnedDistId == null) { prxyTarget.setInstalledDistributionSet(null); From d7d48df47d8f579c0bb2c0df5aeced0cfc87855b Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 09:50:48 +0200 Subject: [PATCH 220/344] 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 221/344] 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 f62b740ae8dfd1518910484b9e99d6ffb40a5a32 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 28 Apr 2016 11:43:46 +0200 Subject: [PATCH 222/344] change propagation level to SUPPORTS instead of NOT_SUPPORTED Signed-off-by: Michael Hirsch --- .../java/org/eclipse/hawkbit/repository/SystemManagement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c1cee7223..be370cf2d 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 @@ -164,7 +164,7 @@ public class SystemManagement { * @return the {@link CurrentTenantKeyGenerator} */ @Bean - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Transactional(propagation = Propagation.SUPPORTS) public CurrentTenantKeyGenerator currentTenantKeyGenerator() { return new CurrentTenantKeyGenerator(); } From 30788904be49bb3ab6064f5d6126871e945c2581 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 28 Apr 2016 11:45:06 +0200 Subject: [PATCH 223/344] code cleanup pull-request feedback Signed-off-by: Michael Hirsch --- .../hawkbit/repository/RolloutManagement.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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 6fb2ce0f9..d02b64f35 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 @@ -299,7 +299,7 @@ public class RolloutManagement { * amount of given groups. In same cases this will lead to less rollout * groups than given by client. * - * @param amountGroup + * @param amountOfGroups * the amount of groups * @param conditions * the rollout group conditions @@ -307,18 +307,17 @@ public class RolloutManagement { * the rollout * @return the rollout with created groups */ - private Rollout createRolloutGroups(final int amountGroup, final RolloutGroupConditions conditions, + 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) amountGroup); - // validate if the amount of groups that will be created are the - // amount + 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 = amountGroup; + int amountGroupValidated = amountOfGroups; final int amountGroupCreation = (int) (Math.ceil((double) totalCount / (double) groupSize)); - if (amountGroupCreation == (amountGroup - 1)) { + if (amountGroupCreation == (amountOfGroups - 1)) { amountGroupValidated--; } RolloutGroup lastSavedGroup = null; From 4e48c7c9d7e7d8323e337762560ae47ffb90ad60 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 28 Apr 2016 11:46:01 +0200 Subject: [PATCH 224/344] code cleanup pull-request feedback Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/repository/RolloutManagement.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d02b64f35..9508a6aeb 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 @@ -284,13 +284,13 @@ public class RolloutManagement { } } - private Rollout createRolloutGroupsInNewTransaction(final int amountGroup, final RolloutGroupConditions conditions, + 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(amountGroup, conditions, savedRollout)); + .execute(status -> createRolloutGroups(amountOfGroups, conditions, savedRollout)); } /** From d8d026e9a1167749b6d9f4a0f22d6c2ba814a4e7 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Thu, 28 Apr 2016 15:17:01 +0530 Subject: [PATCH 225/344] Displaying DistributionSet Details in Tooltip Signed-off-by: venu1278 --- .../ui/common/table/AbstractTable.java | 6 +- .../hawkbit/ui/components/ProxyTarget.java | 488 ++++--- .../CreateOrUpdateFilterTable.java | 448 +++--- .../targettable/TargetBeanQuery.java | 330 ++--- .../management/targettable/TargetTable.java | 109 +- .../ui/rollout/rollout/ProxyRollout.java | 317 +++-- .../ui/rollout/rollout/RolloutBeanQuery.java | 10 +- .../ui/rollout/rollout/RolloutListGrid.java | 1228 ++++++++--------- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 6 +- 9 files changed, 1468 insertions(+), 1474 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 7e62eef1f..843d86ca3 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 @@ -324,9 +324,9 @@ public abstract class AbstractTable extends Table { } columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - i18n.get("header.assigned.ds"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, - i18n.get("header.installed.ds"), 0.1F)); + i18n.get("header.assigned.ds"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, + i18n.get("header.installed.ds"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); 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 084890f87..9ac39616d 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 @@ -10,11 +10,9 @@ package org.eclipse.hawkbit.ui.components; import java.net.URI; import java.security.SecureRandom; -import java.util.Set; import org.eclipse.hawkbit.repository.model.Action.Status; 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.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -28,293 +26,293 @@ import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; * */ public class ProxyTarget extends Target { - private static final long serialVersionUID = -8891449133620645310L; - private String controllerId; - private URI address = null; - private Long lastTargetQuery = null; - private Long installationDate; + private static final long serialVersionUID = -8891449133620645310L; + private String controllerId; + private URI address = null; + private Long lastTargetQuery = null; + private Long installationDate; - private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; + private TargetUpdateStatus updateStatus = TargetUpdateStatus.UNKNOWN; - private DistributionSet installedDistributionSet; + private DistributionSet installedDistributionSet; - private DistributionSet assignedDistributionSet; + private DistributionSet assignedDistributionSet; - private TargetIdName targetIdName; + private TargetIdName targetIdName; - private String assignedDistNameVersion; + private String assignedDistNameVersion; - private String installedDistNameVersion; + private String installedDistNameVersion; - private String pollStatusToolTip; + private String pollStatusToolTip; - private String createdByUser; + private String createdByUser; - private String createdDate; + private String createdDate; - private String lastModifiedDate; + private String lastModifiedDate; - private String modifiedByUser; + private String modifiedByUser; - private Status status; + private Status status; - /** - * @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()); - } + /** + * @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()); + } - /** - * @return the createdByUser - */ - public String getCreatedByUser() { - return createdByUser; - } + /** + * @return the createdByUser + */ + public String getCreatedByUser() { + return createdByUser; + } - /** - * @param createdByUser - * the createdByUser to set - */ - public void setCreatedByUser(final String createdByUser) { - this.createdByUser = createdByUser; - } + /** + * @param createdByUser + * the createdByUser to set + */ + public void setCreatedByUser(final String createdByUser) { + this.createdByUser = createdByUser; + } - /** - * @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 modifiedByUser - */ - public String getModifiedByUser() { - return modifiedByUser; - } + /** + * @return the modifiedByUser + */ + public String getModifiedByUser() { + return modifiedByUser; + } - /** - * @param modifiedByUser - * the modifiedByUser to set - */ - public void setModifiedByUser(final String modifiedByUser) { - this.modifiedByUser = modifiedByUser; - } + /** + * @param modifiedByUser + * the modifiedByUser to set + */ + public void setModifiedByUser(final String modifiedByUser) { + this.modifiedByUser = modifiedByUser; + } - /** - * @return the lastModifiedDate - */ - public String getLastModifiedDate() { - return lastModifiedDate; - } + /** + * @return the lastModifiedDate + */ + public String getLastModifiedDate() { + return lastModifiedDate; + } - /** - * @param lastModifiedDate - * the lastModifiedDate to set - */ - public void setLastModifiedDate(final String lastModifiedDate) { - this.lastModifiedDate = lastModifiedDate; - } + /** + * @param lastModifiedDate + * the lastModifiedDate to set + */ + public void setLastModifiedDate(final String lastModifiedDate) { + this.lastModifiedDate = lastModifiedDate; + } - /** - * @return the assignedDistNameVersion - */ - public String getAssignedDistNameVersion() { - return assignedDistNameVersion; - } + /** + * @return the assignedDistNameVersion + */ + public String getAssignedDistNameVersion() { + return assignedDistNameVersion; + } - /** - * @param assignedDistNameVersion - * the assignedDistNameVersion to set - */ - public void setAssignedDistNameVersion(final String assignedDistNameVersion) { - this.assignedDistNameVersion = assignedDistNameVersion; - } + /** + * @param assignedDistNameVersion + * the assignedDistNameVersion to set + */ + public void setAssignedDistNameVersion(final String assignedDistNameVersion) { + this.assignedDistNameVersion = assignedDistNameVersion; + } - /** - * @return the installedDistNameVersion - */ - public String getInstalledDistNameVersion() { - return installedDistNameVersion; - } + /** + * @return the installedDistNameVersion + */ + public String getInstalledDistNameVersion() { + return installedDistNameVersion; + } - /** - * @param installedDistNameVersion - * the installedDistNameVersion to set - */ - public void setInstalledDistNameVersion(final String installedDistNameVersion) { - this.installedDistNameVersion = installedDistNameVersion; - } + /** + * @param installedDistNameVersion + * the installedDistNameVersion to set + */ + public void setInstalledDistNameVersion(final String installedDistNameVersion) { + this.installedDistNameVersion = installedDistNameVersion; + } - /** - * GET - ID. - * - * @return String as ID. - */ - @Override - public String getControllerId() { - return controllerId; - } + /** + * GET - ID. + * + * @return String as ID. + */ + @Override + public String getControllerId() { + return controllerId; + } - /** - * SET - ID. - * - * @param controllerId - * as ID - */ - @Override - public void setControllerId(final String controllerId) { - this.controllerId = controllerId; - } + /** + * SET - ID. + * + * @param controllerId + * as ID + */ + @Override + public void setControllerId(final String controllerId) { + this.controllerId = controllerId; + } - /** - * @return the ipAddress - */ - public URI getAddress() { - return address; - } + /** + * @return the ipAddress + */ + public URI getAddress() { + return address; + } - /** - * @param ipAddress - * the ipAddress to set - */ - public void setAddress(final URI address) { - this.address = address; - } + /** + * @param ipAddress + * the ipAddress to set + */ + public void setAddress(final URI address) { + this.address = address; + } - /** - * @return the lastTargetQuery - */ - public Long getLastTargetQuery() { - return lastTargetQuery; - } + /** + * @return the lastTargetQuery + */ + public Long getLastTargetQuery() { + return lastTargetQuery; + } - /** - * @param lastTargetQuery - * the lastTargetQuery to set - */ - public void setLastTargetQuery(final Long lastTargetQuery) { - this.lastTargetQuery = lastTargetQuery; - } + /** + * @param lastTargetQuery + * the lastTargetQuery to set + */ + public void setLastTargetQuery(final Long lastTargetQuery) { + this.lastTargetQuery = lastTargetQuery; + } - /** - * @return the installationDate - */ - public Long getInstallationDate() { - return installationDate; - } + /** + * @return the installationDate + */ + public Long getInstallationDate() { + return installationDate; + } - /** - * @param installationDate - * the installationDate to set - */ - public void setInstallationDate(final Long installationDate) { - this.installationDate = installationDate; - } + /** + * @param installationDate + * the installationDate to set + */ + public void setInstallationDate(final Long installationDate) { + this.installationDate = installationDate; + } - /** - * @return the updateStatus - */ - public TargetUpdateStatus getUpdateStatus() { - return updateStatus; - } + /** + * @return the updateStatus + */ + public TargetUpdateStatus getUpdateStatus() { + return updateStatus; + } - /** - * @param updateStatus - * the updateStatus to set - */ - public void setUpdateStatus(final TargetUpdateStatus updateStatus) { - this.updateStatus = updateStatus; - } + /** + * @param updateStatus + * the updateStatus to set + */ + public void setUpdateStatus(final TargetUpdateStatus updateStatus) { + this.updateStatus = updateStatus; + } - /** - * @return the installedDistributionSet - */ - public DistributionSet getInstalledDistributionSet() { - return installedDistributionSet; - } + /** + * @return the installedDistributionSet + */ + public DistributionSet getInstalledDistributionSet() { + return installedDistributionSet; + } - /** - * @param installedDistributionSet - * the installedDistributionSet to set - */ - public void setInstalledDistributionSet(final DistributionSet installedDistributionSet) { - this.installedDistributionSet = installedDistributionSet; - } + /** + * @param installedDistributionSet + * the installedDistributionSet to set + */ + public void setInstalledDistributionSet(final DistributionSet installedDistributionSet) { + this.installedDistributionSet = installedDistributionSet; + } - /** - * @return the assignedDistributionSet - */ - public DistributionSet getAssignedDistributionSet() { - return assignedDistributionSet; - } + /** + * @return the assignedDistributionSet + */ + public DistributionSet getAssignedDistributionSet() { + return assignedDistributionSet; + } - /** - * @param assignedDistributionSet - * the assignedDistributionSet to set - */ - public void setAssignedDistributionSet(DistributionSet assignedDistributionSet) { - this.assignedDistributionSet = assignedDistributionSet; - } + /** + * @param assignedDistributionSet + * the assignedDistributionSet to set + */ + public void setAssignedDistributionSet(DistributionSet assignedDistributionSet) { + this.assignedDistributionSet = assignedDistributionSet; + } - /** - * @return the targetIdName - */ - @Override - public TargetIdName getTargetIdName() { - if (this.targetIdName == null) { - return super.getTargetIdName(); - } - return this.targetIdName; - } + /** + * @return the targetIdName + */ + @Override + public TargetIdName getTargetIdName() { + if (this.targetIdName == null) { + return super.getTargetIdName(); + } + return this.targetIdName; + } - /** - * @param targetIdName - * the targetIdName to set - */ - public void setTargetIdName(final TargetIdName targetIdName) { - this.targetIdName = targetIdName; - } + /** + * @param targetIdName + * the targetIdName to set + */ + public void setTargetIdName(final TargetIdName targetIdName) { + this.targetIdName = targetIdName; + } - /** - * @return the pollStatusToolTip - */ - public String getPollStatusToolTip() { - return pollStatusToolTip; - } + /** + * @return the pollStatusToolTip + */ + public String getPollStatusToolTip() { + return pollStatusToolTip; + } - /** - * @param pollStatusToolTip - * the pollStatusToolTip to set - */ - public void setPollStatusToolTip(final String pollStatusToolTip) { - this.pollStatusToolTip = pollStatusToolTip; - } + /** + * @param pollStatusToolTip + * the pollStatusToolTip to set + */ + public void setPollStatusToolTip(final String pollStatusToolTip) { + this.pollStatusToolTip = pollStatusToolTip; + } - /** - * @return the status - */ - public Status getStatus() { - return status; - } + /** + * @return the status + */ + public Status getStatus() { + return status; + } - /** - * @param status - * the status to set - */ - public void setStatus(final Status status) { - this.status = status; - } + /** + * @param status + * the status to set + */ + public void setStatus(final Status status) { + this.status = status; + } } 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 d067b388b..cf8a514d4 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 @@ -57,259 +57,259 @@ import com.vaadin.ui.themes.ValoTheme; @ViewScope public class CreateOrUpdateFilterTable extends Table { - private static final long serialVersionUID = 6887304217281629713L; + private static final long serialVersionUID = 6887304217281629713L; - @Autowired - private I18N i18n; + @Autowired + private I18N i18n; - @Autowired - private transient EventBus.SessionEventBus eventBus; + @Autowired + private transient EventBus.SessionEventBus eventBus; - @Autowired - private FilterManagementUIState filterManagementUIState; + @Autowired + private FilterManagementUIState filterManagementUIState; - private LazyQueryContainer container; + private LazyQueryContainer container; - private static final int PROPERTY_DEPT = 3; + private static final int PROPERTY_DEPT = 3; - private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; - private static final String INSTALL_DIST_SET = "installedDistributionSet"; + private static final String INSTALL_DIST_SET = "installedDistributionSet"; - /** - * Initialize the Action History Table. - */ - @PostConstruct - public void init() { - setStyleName("sp-table"); - setSizeFull(); - setImmediate(true); - setHeight(100.0f, Unit.PERCENTAGE); - addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); - addStyleName(ValoTheme.TABLE_SMALL); - setColumnCollapsingAllowed(true); - addCustomGeneratedColumns(); - restoreOnLoad(); - populateTableData(); - setId(SPUIComponetIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); - setSelectable(false); - eventBus.subscribe(this); - setItemDescriptionGenerator(new TooltipGenerator()); - } + /** + * Initialize the Action History Table. + */ + @PostConstruct + public void init() { + setStyleName("sp-table"); + setSizeFull(); + setImmediate(true); + setHeight(100.0f, Unit.PERCENTAGE); + addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); + addStyleName(ValoTheme.TABLE_SMALL); + setColumnCollapsingAllowed(true); + addCustomGeneratedColumns(); + restoreOnLoad(); + populateTableData(); + setId(SPUIComponetIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); + setSelectable(false); + eventBus.subscribe(this); + setItemDescriptionGenerator(new TooltipGenerator()); + } - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final CustomFilterUIEvent custFUIEvent) { - if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW - || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { - UI.getCurrent().access(() -> populateTableData()); - } else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY) { - UI.getCurrent().access(() -> onQuery()); - } - } + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final CustomFilterUIEvent custFUIEvent) { + if (custFUIEvent == CustomFilterUIEvent.TARGET_DETAILS_VIEW + || custFUIEvent == CustomFilterUIEvent.CREATE_NEW_FILTER_CLICK) { + UI.getCurrent().access(() -> populateTableData()); + } else if (custFUIEvent == CustomFilterUIEvent.FILTER_TARGET_BY_QUERY) { + UI.getCurrent().access(() -> onQuery()); + } + } - private void restoreOnLoad() { - if (filterManagementUIState.isCreateFilterViewDisplayed()) { - filterManagementUIState.setFilterQueryValue(null); - } else { - filterManagementUIState.getTfQuery() - .ifPresent(value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); - } - } + private void restoreOnLoad() { + if (filterManagementUIState.isCreateFilterViewDisplayed()) { + filterManagementUIState.setFilterQueryValue(null); + } else { + filterManagementUIState.getTfQuery() + .ifPresent(value -> filterManagementUIState.setFilterQueryValue(value.getQuery())); + } + } - /** - * Create a empty HierarchicalContainer. - */ - private LazyQueryContainer createContainer() { - // ADD all the filters to the query config - final Map queryConfig = prepareQueryConfigFilters(); + /** + * Create a empty HierarchicalContainer. + */ + private LazyQueryContainer createContainer() { + // ADD all the filters to the query config + final Map queryConfig = prepareQueryConfigFilters(); - // Create TargetBeanQuery factory with the query config. - final BeanQueryFactory targetQF = new BeanQueryFactory<>(CustomTargetBeanQuery.class); - targetQF.setQueryConfiguration(queryConfig); + // Create TargetBeanQuery factory with the query config. + final BeanQueryFactory targetQF = new BeanQueryFactory<>(CustomTargetBeanQuery.class); + targetQF.setQueryConfiguration(queryConfig); - // create lazy query container with lazy defination and query - final LazyQueryContainer targetTableContainer = new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_CONT_ID_NAME), - targetQF); - targetTableContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); + // create lazy query container with lazy defination and query + final LazyQueryContainer targetTableContainer = new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_CONT_ID_NAME), + targetQF); + targetTableContainer.getQueryView().getQueryDefinition().setMaxNestedPropertyDepth(PROPERTY_DEPT); - return targetTableContainer; + return targetTableContainer; - } + } - private Map prepareQueryConfigFilters() { - final Map queryConfig = new HashMap<>(); - if (!Strings.isNullOrEmpty(filterManagementUIState.getFilterQueryValue())) { - queryConfig.put(SPUIDefinitions.FILTER_BY_QUERY, filterManagementUIState.getFilterQueryValue()); - } - queryConfig.put(SPUIDefinitions.FILTER_BY_INVALID_QUERY, - filterManagementUIState.getIsFilterByInvalidFilterQuery()); - return queryConfig; - } + private Map prepareQueryConfigFilters() { + final Map queryConfig = new HashMap<>(); + if (!Strings.isNullOrEmpty(filterManagementUIState.getFilterQueryValue())) { + queryConfig.put(SPUIDefinitions.FILTER_BY_QUERY, filterManagementUIState.getFilterQueryValue()); + } + queryConfig.put(SPUIDefinitions.FILTER_BY_INVALID_QUERY, + filterManagementUIState.getIsFilterByInvalidFilterQuery()); + return queryConfig; + } - /** - * populate campaign data. - * - */ - public void populateTableData() { - container = createContainer(); - setContainerDataSource(container); - addContainerproperties(); - setColumnProperties(); - setPageLength(30); - setCollapsibleColumns(); - } + /** + * populate campaign data. + * + */ + public void populateTableData() { + container = createContainer(); + setContainerDataSource(container); + addContainerproperties(); + setColumnProperties(); + setPageLength(30); + setCollapsibleColumns(); + } - private void setCollapsibleColumns() { - setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, true); + private void setCollapsibleColumns() { + setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, true); + setColumnCollapsed(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, true); - setColumnCollapsed(ASSIGN_DIST_SET, true); - setColumnCollapsed(INSTALL_DIST_SET, true); - } + setColumnCollapsed(ASSIGN_DIST_SET, true); + setColumnCollapsed(INSTALL_DIST_SET, true); + } - /** - * Create a empty HierarchicalContainer. - */ - private void addContainerproperties() { - /* Create HierarchicalContainer container */ - container.addContainerProperty(SPUILabelDefinitions.NAME, String.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_BY, String.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, Date.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, null, false, true); - container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); - container.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, String.class, ""); - container.addContainerProperty(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, String.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_TARGET_STATUS, TargetUpdateStatus.class, null); - container.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); + /** + * Create a empty HierarchicalContainer. + */ + private void addContainerproperties() { + /* Create HierarchicalContainer container */ + container.addContainerProperty(SPUILabelDefinitions.NAME, String.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_BY, String.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, Date.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, null, false, true); + container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); + container.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, String.class, ""); + container.addContainerProperty(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, String.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_TARGET_STATUS, TargetUpdateStatus.class, null); + container.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); - container.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); - container.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); - } + container.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); + container.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); + } - private List getVisbleColumns() { - final List columnList = new ArrayList<>(); - columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - i18n.get("header.assigned.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, - i18n.get("header.installed.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); - return columnList; - } + private List getVisbleColumns() { + final List columnList = new ArrayList<>(); + columnList.add(new TableColumn(SPUILabelDefinitions.NAME, i18n.get("header.name"), 0.15f)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1f)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); + columnList.add( + new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, + i18n.get("header.assigned.ds"), 0.125F)); + columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, + i18n.get("header.installed.ds"), 0.125F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); + return columnList; + } - private Component getStatusIcon(final Object itemId) { - final Item row1 = getItem(itemId); - final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1 - .getItemProperty(SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); - final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); - label.setContentMode(ContentMode.HTML); - if (targetStatus == TargetUpdateStatus.PENDING) { - label.setDescription("Pending"); - label.setStyleName("statusIconYellow"); - label.setValue(FontAwesome.ADJUST.getHtml()); - } else if (targetStatus == TargetUpdateStatus.REGISTERED) { - label.setDescription("Registered"); - label.setStyleName("statusIconLightBlue"); - label.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); - } else if (targetStatus == TargetUpdateStatus.ERROR) { - label.setDescription(i18n.get("label.error")); - label.setStyleName("statusIconRed"); - label.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - } else if (targetStatus == TargetUpdateStatus.IN_SYNC) { - label.setStyleName("statusIconGreen"); - label.setDescription("In-Synch"); - label.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - } else if (targetStatus == TargetUpdateStatus.UNKNOWN) { - label.setStyleName("statusIconBlue"); - label.setDescription(i18n.get("label.unknown")); - label.setValue(FontAwesome.QUESTION_CIRCLE.getHtml()); - } - return label; - } + private Component getStatusIcon(final Object itemId) { + final Item row1 = getItem(itemId); + final TargetUpdateStatus targetStatus = (TargetUpdateStatus) row1 + .getItemProperty(SPUILabelDefinitions.VAR_TARGET_STATUS).getValue(); + final Label label = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); + label.setContentMode(ContentMode.HTML); + if (targetStatus == TargetUpdateStatus.PENDING) { + label.setDescription("Pending"); + label.setStyleName("statusIconYellow"); + label.setValue(FontAwesome.ADJUST.getHtml()); + } else if (targetStatus == TargetUpdateStatus.REGISTERED) { + label.setDescription("Registered"); + label.setStyleName("statusIconLightBlue"); + label.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); + } else if (targetStatus == TargetUpdateStatus.ERROR) { + label.setDescription(i18n.get("label.error")); + label.setStyleName("statusIconRed"); + label.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); + } else if (targetStatus == TargetUpdateStatus.IN_SYNC) { + label.setStyleName("statusIconGreen"); + label.setDescription("In-Synch"); + label.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); + } else if (targetStatus == TargetUpdateStatus.UNKNOWN) { + label.setStyleName("statusIconBlue"); + label.setDescription(i18n.get("label.unknown")); + label.setValue(FontAwesome.QUESTION_CIRCLE.getHtml()); + } + return label; + } - private void setColumnProperties() { - final List columnList = getVisbleColumns(); - final List swColumnIds = new ArrayList<>(); - for (final TableColumn column : columnList) { - setColumnHeader(column.getColumnPropertyId(), column.getColumnHeader()); - setColumnExpandRatio(column.getColumnPropertyId(), column.getExpandRatio()); - swColumnIds.add(column.getColumnPropertyId()); - } - setVisibleColumns(swColumnIds.toArray()); - } + private void setColumnProperties() { + final List columnList = getVisbleColumns(); + final List swColumnIds = new ArrayList<>(); + for (final TableColumn column : columnList) { + setColumnHeader(column.getColumnPropertyId(), column.getColumnHeader()); + setColumnExpandRatio(column.getColumnPropertyId(), column.getExpandRatio()); + swColumnIds.add(column.getColumnPropertyId()); + } + setVisibleColumns(swColumnIds.toArray()); + } - protected void addCustomGeneratedColumns() { - addGeneratedColumn(SPUILabelDefinitions.STATUS_ICON, (source, itemId, columnId) -> getStatusIcon(itemId)); - } + protected void addCustomGeneratedColumns() { + addGeneratedColumn(SPUILabelDefinitions.STATUS_ICON, (source, itemId, columnId) -> getStatusIcon(itemId)); + } - private void onQuery() { - populateTableData(); - eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); - } + private void onQuery() { + populateTableData(); + eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); + } - public class TooltipGenerator implements ItemDescriptionGenerator { - private static final long serialVersionUID = 688730421728162456L; + public class TooltipGenerator implements ItemDescriptionGenerator { + private static final long serialVersionUID = 688730421728162456L; - @Override - public String generateDescription(Component source, Object itemId, Object propertyId) { - final DistributionSet distributionSet; - final Item item = getItem(itemId); - if (propertyId != null) { - if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } - } - return null; - } + @Override + public String generateDescription(Component source, Object itemId, Object propertyId) { + final DistributionSet distributionSet; + final Item item = getItem(itemId); + if (propertyId != null) { + if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } + } + return null; + } - private String getDSDetails(final DistributionSet distributionSet) { - StringBuilder swModuleNames = new StringBuilder(); - StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = (Set)distributionSet.getModules(); - swModules.forEach(swModule -> { - swModuleNames.append(swModule.getName()); - swModuleNames.append(" , "); - swModuleVendors.append(swModule.getVendor()); - swModuleVendors.append(" , "); - }); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("
    "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append(" Required Migration step : ") - .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append("
  • "); - - stringBuilder.append("
"); - return stringBuilder.toString(); - } + private String getDSDetails(final DistributionSet distributionSet) { + StringBuilder swModuleNames = new StringBuilder(); + StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = (Set) distributionSet.getModules(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("
    "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" Required Migration step : ") + .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append("
  • "); - } + stringBuilder.append("
"); + return stringBuilder.toString(); + } + + } } 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 943efc262..d127b4198 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 @@ -42,188 +42,188 @@ import com.google.common.base.Strings; * */ public class TargetBeanQuery extends AbstractBeanQuery { - private static final long serialVersionUID = -5645680058303167558L; - private Sort sort = new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"); - private Collection status = null; - private String[] targetTags = null; - private Long distributionId = null; - private String searchText = null; - private Boolean noTagClicked = Boolean.FALSE; - private transient TargetManagement targetManagement; - private transient I18N i18N; - private Long pinnedDistId = null; - private TargetFilterQuery targetFilterQuery; - private ManagementUIState managementUIState; + private static final long serialVersionUID = -5645680058303167558L; + private Sort sort = new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"); + private Collection status = null; + private String[] targetTags = null; + private Long distributionId = null; + private String searchText = null; + private Boolean noTagClicked = Boolean.FALSE; + private transient TargetManagement targetManagement; + private transient I18N i18N; + private Long pinnedDistId = null; + private TargetFilterQuery targetFilterQuery; + private ManagementUIState managementUIState; - /** - * Parametric Constructor. - * - * @param definition - * as Def - * @param queryConfig - * as Config - * @param sortIds - * as sort - * @param sortStates - * as Sort status - */ - public TargetBeanQuery(final QueryDefinition definition, final Map queryConfig, - final Object[] sortIds, final boolean[] sortStates) { - super(definition, queryConfig, sortIds, sortStates); + /** + * Parametric Constructor. + * + * @param definition + * as Def + * @param queryConfig + * as Config + * @param sortIds + * as sort + * @param sortStates + * as Sort status + */ + public TargetBeanQuery(final QueryDefinition definition, final Map queryConfig, + final Object[] sortIds, final boolean[] sortStates) { + super(definition, queryConfig, sortIds, sortStates); - if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { - status = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS); - targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); - noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); - distributionId = (Long) queryConfig.get(SPUIDefinitions.FILTER_BY_DISTRIBUTION); - searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); - targetFilterQuery = (TargetFilterQuery) queryConfig.get(SPUIDefinitions.FILTER_BY_TARGET_FILTER_QUERY); - if (!Strings.isNullOrEmpty(searchText)) { - searchText = String.format("%%%s%%", searchText); - } - pinnedDistId = (Long) queryConfig.get(SPUIDefinitions.ORDER_BY_DISTRIBUTION); - } + if (HawkbitCommonUtil.mapCheckStrKey(queryConfig)) { + status = (Collection) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS); + targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG); + noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG); + distributionId = (Long) queryConfig.get(SPUIDefinitions.FILTER_BY_DISTRIBUTION); + searchText = (String) queryConfig.get(SPUIDefinitions.FILTER_BY_TEXT); + targetFilterQuery = (TargetFilterQuery) queryConfig.get(SPUIDefinitions.FILTER_BY_TARGET_FILTER_QUERY); + if (!Strings.isNullOrEmpty(searchText)) { + searchText = String.format("%%%s%%", searchText); + } + pinnedDistId = (Long) queryConfig.get(SPUIDefinitions.ORDER_BY_DISTRIBUTION); + } - if (HawkbitCommonUtil.checkBolArray(sortStates)) { - // Initalize Sor - sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); - // Add sort. - for (int targetId = 1; targetId < sortIds.length; targetId++) { - sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); - } - } - } + if (HawkbitCommonUtil.checkBolArray(sortStates)) { + // Initalize Sor + sort = new Sort(sortStates[0] ? Direction.ASC : Direction.DESC, (String) sortIds[0]); + // Add sort. + for (int targetId = 1; targetId < sortIds.length; targetId++) { + sort.and(new Sort(sortStates[targetId] ? Direction.ASC : Direction.DESC, (String) sortIds[targetId])); + } + } + } - @Override - protected ProxyTarget constructBean() { - return new ProxyTarget(); - } + @Override + protected ProxyTarget constructBean() { + return new ProxyTarget(); + } - @Override - protected List loadBeans(final int startIndex, final int count) { - Slice targetBeans; - final List proxyTargetBeans = new ArrayList<>(); - if (pinnedDistId != null) { - targetBeans = getTargetManagement().findTargetsAllOrderByLinkedDistributionSet( - new OffsetBasedPageRequest(startIndex, SPUIDefinitions.PAGE_SIZE, sort), pinnedDistId, - distributionId, status, searchText, noTagClicked, targetTags); - } else if (null != targetFilterQuery) { - targetBeans = getTargetManagement().findTargetsAll(targetFilterQuery, - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); - } else if (!anyFilterSelected()) { - targetBeans = getTargetManagement().findTargetsAll( - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); - } else { - targetBeans = getTargetManagement().findTargetByFilters( - new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), status, - searchText, distributionId, noTagClicked, targetTags); - } - for (final Target targ : targetBeans) { - final ProxyTarget prxyTarget = new ProxyTarget(); - prxyTarget.setTargetIdName(targ.getTargetIdName()); - prxyTarget.setName(targ.getName()); - prxyTarget.setDescription(targ.getDescription()); - prxyTarget.setControllerId(targ.getControllerId()); - prxyTarget.setInstallationDate(targ.getTargetInfo().getInstallationDate()); - prxyTarget.setAddress(targ.getTargetInfo().getAddress()); - prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); - prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); - prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); - prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); - prxyTarget.setCreatedAt(targ.getCreatedAt()); - prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); + @Override + protected List loadBeans(final int startIndex, final int count) { + Slice targetBeans; + final List proxyTargetBeans = new ArrayList<>(); + if (pinnedDistId != null) { + targetBeans = getTargetManagement().findTargetsAllOrderByLinkedDistributionSet( + new OffsetBasedPageRequest(startIndex, SPUIDefinitions.PAGE_SIZE, sort), pinnedDistId, + distributionId, status, searchText, noTagClicked, targetTags); + } else if (null != targetFilterQuery) { + targetBeans = getTargetManagement().findTargetsAll(targetFilterQuery, + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); + } else if (!anyFilterSelected()) { + targetBeans = getTargetManagement().findTargetsAll( + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort)); + } else { + targetBeans = getTargetManagement().findTargetByFilters( + new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), status, + searchText, distributionId, noTagClicked, targetTags); + } + for (final Target targ : targetBeans) { + final ProxyTarget prxyTarget = new ProxyTarget(); + prxyTarget.setTargetIdName(targ.getTargetIdName()); + prxyTarget.setName(targ.getName()); + prxyTarget.setDescription(targ.getDescription()); + prxyTarget.setControllerId(targ.getControllerId()); + prxyTarget.setInstallationDate(targ.getTargetInfo().getInstallationDate()); + prxyTarget.setAddress(targ.getTargetInfo().getAddress()); + prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); + prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); + prxyTarget.setLastModifiedDate(SPDateTimeUtil.getFormattedDate(targ.getLastModifiedAt())); + prxyTarget.setCreatedDate(SPDateTimeUtil.getFormattedDate(targ.getCreatedAt())); + prxyTarget.setCreatedAt(targ.getCreatedAt()); + prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); - if (pinnedDistId == null) { - prxyTarget.setInstalledDistributionSet(null); - prxyTarget.setAssignedDistributionSet(null); + if (pinnedDistId == null) { + prxyTarget.setInstalledDistributionSet(null); + prxyTarget.setAssignedDistributionSet(null); - } else { - final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); - final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); - prxyTarget.setInstalledDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - installedDistributionSet.getName(), installedDistributionSet.getVersion())); - prxyTarget.setInstalledDistributionSet(installedDistributionSet); - final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); - prxyTarget.setAssignedDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - assignedDistributionSet.getName(), assignedDistributionSet.getVersion())); - prxyTarget.setAssignedDistributionSet(assignedDistributionSet); - } + } else { + final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); + final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); + prxyTarget.setInstalledDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( + installedDistributionSet.getName(), installedDistributionSet.getVersion())); + prxyTarget.setInstalledDistributionSet(installedDistributionSet); + final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); + prxyTarget.setAssignedDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( + assignedDistributionSet.getName(), assignedDistributionSet.getVersion())); + prxyTarget.setAssignedDistributionSet(assignedDistributionSet); + } - prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); - prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); - prxyTarget.setTargetInfo(targ.getTargetInfo()); - prxyTarget.setPollStatusToolTip( - HawkbitCommonUtil.getPollStatusToolTip(prxyTarget.getTargetInfo().getPollStatus(), getI18N())); - proxyTargetBeans.add(prxyTarget); - } - return proxyTargetBeans; - } + prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); + prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); + prxyTarget.setTargetInfo(targ.getTargetInfo()); + prxyTarget.setPollStatusToolTip( + HawkbitCommonUtil.getPollStatusToolTip(prxyTarget.getTargetInfo().getPollStatus(), getI18N())); + proxyTargetBeans.add(prxyTarget); + } + return proxyTargetBeans; + } - private Boolean isTagSelected() { - if (targetTags == null && !noTagClicked) { - return false; - } - return true; - } + private Boolean isTagSelected() { + if (targetTags == null && !noTagClicked) { + return false; + } + return true; + } - @Override - protected void saveBeans(final List addedTargets, final List modifiedTargets, - final List removedTargets) { - // CRUD operations on Target will be done through repository methods - } + @Override + protected void saveBeans(final List addedTargets, final List modifiedTargets, + final List removedTargets) { + // CRUD operations on Target will be done through repository methods + } - private Boolean anyFilterSelected() { - if (status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected()) { - return false; - } - return true; - } + private Boolean anyFilterSelected() { + if (status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected()) { + return false; + } + return true; + } - @Override - public int size() { - final long totSize = getTargetManagement().countTargetsAll(); - long size; - if (null != targetFilterQuery) { - size = getTargetManagement().countTargetByTargetFilterQuery(targetFilterQuery); - } else if (!anyFilterSelected()) { - size = totSize; - } else { - size = getTargetManagement().countTargetByFilters(status, searchText, distributionId, noTagClicked, - targetTags); - } + @Override + public int size() { + final long totSize = getTargetManagement().countTargetsAll(); + long size; + if (null != targetFilterQuery) { + size = getTargetManagement().countTargetByTargetFilterQuery(targetFilterQuery); + } else if (!anyFilterSelected()) { + size = totSize; + } else { + size = getTargetManagement().countTargetByFilters(status, searchText, distributionId, noTagClicked, + targetTags); + } - final ManagementUIState tmpManagementUIState = getManagementUIState(); - tmpManagementUIState.setTargetsCountAll(totSize); - if (size > SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES) { - tmpManagementUIState.setTargetsTruncated(size - SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES); - size = SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES; - } else { - tmpManagementUIState.setTargetsTruncated(null); - } + final ManagementUIState tmpManagementUIState = getManagementUIState(); + tmpManagementUIState.setTargetsCountAll(totSize); + if (size > SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES) { + tmpManagementUIState.setTargetsTruncated(size - SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES); + size = SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES; + } else { + tmpManagementUIState.setTargetsTruncated(null); + } - return (int) size; - } + return (int) size; + } - private TargetManagement getTargetManagement() { - if (targetManagement == null) { - targetManagement = SpringContextHelper.getBean(TargetManagement.class); - } - return targetManagement; - } + private TargetManagement getTargetManagement() { + if (targetManagement == null) { + targetManagement = SpringContextHelper.getBean(TargetManagement.class); + } + return targetManagement; + } - private ManagementUIState getManagementUIState() { - if (managementUIState == null) { - managementUIState = SpringContextHelper.getBean(ManagementUIState.class); - } - return managementUIState; - } + private ManagementUIState getManagementUIState() { + if (managementUIState == null) { + managementUIState = SpringContextHelper.getBean(ManagementUIState.class); + } + return managementUIState; + } - private I18N getI18N() { - if (i18N == null) { - i18N = SpringContextHelper.getBean(I18N.class); - } - return i18N; - } + private I18N getI18N() { + if (i18N == null) { + i18N = SpringContextHelper.getBean(I18N.class); + } + return i18N; + } } 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 f119229b0..a1e759950 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 @@ -43,7 +43,6 @@ import org.eclipse.hawkbit.ui.filter.target.CustomTargetFilter; import org.eclipse.hawkbit.ui.filter.target.TargetSearchTextFilter; import org.eclipse.hawkbit.ui.filter.target.TargetStatusFilter; import org.eclipse.hawkbit.ui.filter.target.TargetTagFilter; -import org.eclipse.hawkbit.ui.filtermanagement.CreateOrUpdateFilterTable.TooltipGenerator; import org.eclipse.hawkbit.ui.management.event.DragEvent; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.ManagementViewAcceptCriteria; @@ -96,7 +95,6 @@ import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.UI; import com.vaadin.ui.themes.ValoTheme; -import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; /** * Concrete implementation of Target table. @@ -113,9 +111,9 @@ public class TargetTable extends AbstractTable implements private static final int PROPERTY_DEPT = 3; private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; - - private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; - private static final String INSTALL_DIST_SET = "installedDistributionSet"; + + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; + private static final String INSTALL_DIST_SET = "installedDistributionSet"; @Autowired private transient TargetManagement targetManagement; @@ -1082,61 +1080,60 @@ public class TargetTable extends AbstractTable implements private boolean isFilteredByTags() { return !managementUIState.getTargetTableFilters().getClickedTargetTags().isEmpty(); } - - + /** * tooltip for assignedDS and installedDS */ - + protected class TooltipGenerator implements ItemDescriptionGenerator { - private static final long serialVersionUID = 688730421728162456L; + private static final long serialVersionUID = 688730421728162456L; - @Override - public String generateDescription(Component source, Object itemId, Object propertyId) { - final DistributionSet distributionSet; - final Item item = getItem(itemId); - if (propertyId != null) { - if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } - } - return null; - } + @Override + public String generateDescription(Component source, Object itemId, Object propertyId) { + final DistributionSet distributionSet; + final Item item = getItem(itemId); + if (propertyId != null) { + if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } + } + return null; + } - private String getDSDetails(final DistributionSet distributionSet) { - StringBuilder swModuleNames = new StringBuilder(); - StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = (Set)distributionSet.getModules(); - swModules.forEach(swModule -> { - swModuleNames.append(swModule.getName()); - swModuleNames.append(" , "); - swModuleVendors.append(swModule.getVendor()); - swModuleVendors.append(" , "); - }); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("
    "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append(" Required Migration step : ") - .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append("
  • "); - stringBuilder.append("
"); - return stringBuilder.toString(); - } - } + private String getDSDetails(final DistributionSet distributionSet) { + StringBuilder swModuleNames = new StringBuilder(); + StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = (Set) distributionSet.getModules(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("
    "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" Required Migration step : ") + .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append("
  • "); + stringBuilder.append("
"); + return stringBuilder.toString(); + } + } } \ No newline at end of file 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 a010a3ba4..04c6659a5 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 @@ -22,197 +22,196 @@ import com.vaadin.server.FontAwesome; */ public class ProxyRollout extends Rollout { - private static final long serialVersionUID = 4539849939617681918L; + private static final long serialVersionUID = 4539849939617681918L; - private String distributionSetNameVersion; + private String distributionSetNameVersion; - private String createdDate; + private String createdDate; - private String modifiedDate; + private String modifiedDate; - private Long numberOfGroups; + private Long numberOfGroups; - private Boolean isActionRecieved = Boolean.FALSE; - - private Boolean isRequiredMigrationStep = Boolean.FALSE; + private Boolean isActionRecieved = Boolean.FALSE; - private String totalTargetsCount; + private Boolean isRequiredMigrationStep = Boolean.FALSE; - private RolloutRendererData rolloutRendererData; - - private String discription; + private String totalTargetsCount; - private String type; - - private Set swModules; - - - - /** - * @return the isRequiredMigrationStep - */ + private RolloutRendererData rolloutRendererData; - public Boolean getIsRequiredMigrationStep() { - return isRequiredMigrationStep; - } + private String discription; - /** - * @param isRequiredMigrationStep - * the isRequiredMigrationStep to set - */ + private String type; - public void setIsRequiredMigrationStep(Boolean isRequiredMigrationStep) { - this.isRequiredMigrationStep = isRequiredMigrationStep; - } + private Set swModules; - - /** - * @return the discription - */ + /** + * @return the isRequiredMigrationStep + */ - public String getDiscription() { - return discription; - } + public Boolean getIsRequiredMigrationStep() { + return isRequiredMigrationStep; + } - /** - * @param discription - * the discription to set - */ + /** + * @param isRequiredMigrationStep + * the isRequiredMigrationStep to set + */ - public void setDiscription(String discription) { - this.discription = discription; - } + public void setIsRequiredMigrationStep(Boolean isRequiredMigrationStep) { + this.isRequiredMigrationStep = isRequiredMigrationStep; + } - /** - * @return the type - */ - public String getType() { - return type; - } + /** + * @return the discription + */ - /** - * @param type - * the type to set - */ + public String getDiscription() { + return discription; + } - public void setType(String type) { - this.type = type; - } - /** - * - * @return the Set of Software modules - */ - public Set getSwModules() { - return swModules; - } - /** - * @param swModules - * Set to set - */ - public void setSwModules(Set swModules) { - this.swModules = swModules; - } + /** + * @param discription + * the discription to set + */ - public RolloutRendererData getRolloutRendererData() { - return rolloutRendererData; - } + public void setDiscription(String discription) { + this.discription = discription; + } - public void setRolloutRendererData(RolloutRendererData rendererData) { - this.rolloutRendererData = rendererData; - } + /** + * @return the type + */ + public String getType() { + return type; + } - /** - * @return the distributionSetNameVersion - */ - public String getDistributionSetNameVersion() { - return distributionSetNameVersion; - } + /** + * @param type + * the type to set + */ - /** - * @param distributionSetNameVersion - * the distributionSetNameVersion to set - */ - public void setDistributionSetNameVersion(final String distributionSetNameVersion) { - this.distributionSetNameVersion = distributionSetNameVersion; - } + public void setType(String type) { + this.type = type; + } - /** - * @return the numberOfGroups - */ - public Long getNumberOfGroups() { - return numberOfGroups; - } + /** + * + * @return the Set of Software modules + */ + public Set getSwModules() { + return swModules; + } - /** - * @param numberOfGroups - * the numberOfGroups to set - */ - public void setNumberOfGroups(final Long numberOfGroups) { - this.numberOfGroups = numberOfGroups; - } + /** + * @param swModules + * Set to set + */ + public void setSwModules(Set swModules) { + this.swModules = swModules; + } - /** - * @return the createdDate - */ - public String getCreatedDate() { - return createdDate; - } + public RolloutRendererData getRolloutRendererData() { + return rolloutRendererData; + } - /** - * @param createdDate - * the createdDate to set - */ - public void setCreatedDate(final String createdDate) { - this.createdDate = createdDate; - } + public void setRolloutRendererData(RolloutRendererData rendererData) { + this.rolloutRendererData = rendererData; + } - /** - * @return the modifiedDate - */ - public String getModifiedDate() { - return modifiedDate; - } + /** + * @return the distributionSetNameVersion + */ + public String getDistributionSetNameVersion() { + return distributionSetNameVersion; + } - /** - * @param modifiedDate - * the modifiedDate to set - */ - public void setModifiedDate(final String modifiedDate) { - this.modifiedDate = modifiedDate; - } + /** + * @param distributionSetNameVersion + * the distributionSetNameVersion to set + */ + public void setDistributionSetNameVersion(final String distributionSetNameVersion) { + this.distributionSetNameVersion = distributionSetNameVersion; + } - /** - * @return the isActionRecieved - */ - public Boolean getIsActionRecieved() { - return isActionRecieved; - } + /** + * @return the numberOfGroups + */ + public Long getNumberOfGroups() { + return numberOfGroups; + } - /** - * @param isActionRecieved - * the isActionRecieved to set - */ - public void setIsActionRecieved(final Boolean isActionRecieved) { - this.isActionRecieved = isActionRecieved; - } + /** + * @param numberOfGroups + * the numberOfGroups to set + */ + public void setNumberOfGroups(final Long numberOfGroups) { + this.numberOfGroups = numberOfGroups; + } - /** - * @return the totalTargetsCount - */ - public String getTotalTargetsCount() { - return totalTargetsCount; - } + /** + * @return the createdDate + */ + public String getCreatedDate() { + return createdDate; + } - /** - * @param totalTargetsCount - * the totalTargetsCount to set - */ - public void setTotalTargetsCount(final String totalTargetsCount) { - this.totalTargetsCount = totalTargetsCount; - } + /** + * @param createdDate + * the createdDate to set + */ + public void setCreatedDate(final String createdDate) { + this.createdDate = createdDate; + } - public String getAction() { - return FontAwesome.CIRCLE_O.getHtml(); - } + /** + * @return the modifiedDate + */ + public String getModifiedDate() { + return modifiedDate; + } + + /** + * @param modifiedDate + * the modifiedDate to set + */ + public void setModifiedDate(final String modifiedDate) { + this.modifiedDate = modifiedDate; + } + + /** + * @return the isActionRecieved + */ + public Boolean getIsActionRecieved() { + return isActionRecieved; + } + + /** + * @param isActionRecieved + * the isActionRecieved to set + */ + public void setIsActionRecieved(final Boolean isActionRecieved) { + this.isActionRecieved = isActionRecieved; + } + + /** + * @return the totalTargetsCount + */ + public String getTotalTargetsCount() { + return totalTargetsCount; + } + + /** + * @param totalTargetsCount + * the totalTargetsCount to set + */ + public void setTotalTargetsCount(final String totalTargetsCount) { + this.totalTargetsCount = totalTargetsCount; + } + + public String getAction() { + return FontAwesome.CIRCLE_O.getHtml(); + } } 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 41f69acb1..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 @@ -138,11 +138,11 @@ 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()); + + proxyRollout.setDescription(distributionSet.getDescription()); + proxyRollout.setType(distributionSet.getType().getName()); + proxyRollout.setIsRequiredMigrationStep(distributionSet.isRequiredMigrationStep()); + proxyRollout.setSwModules(distributionSet.getModules()); proxyRolloutList.add(proxyRollout); } 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 c68bbf700..1ad0bfc35 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 @@ -70,619 +70,619 @@ import com.vaadin.ui.renderers.HtmlRenderer; @ViewScope public class RolloutListGrid extends AbstractGrid { - private static final long serialVersionUID = 4060904914954370524L; - - 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 DS_TYPE = "type"; - - private static final String SW_MODULES = "swModules"; - - private static final String IS_REQUIRED_MIGRATION_STEP = "isRequiredMigrationStep"; - - private static final String ROLLOUT_RENDERER_DATA = "rolloutRendererData"; - - @Autowired - private transient RolloutManagement rolloutManagement; - - @Autowired - private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; - - @Autowired - private UINotification uiNotification; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Autowired - private transient SpPermissionChecker permissionChecker; - - private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); - - /** - * Handles the RolloutEvent to refresh Grid. - * - */ - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - switch (event) { - case FILTER_BY_TEXT: - case CREATE_ROLLOUT: - case UPDATE_ROLLOUT: - case SHOW_ROLLOUTS: - refreshGrid(); - break; - default: - return; - } - } - - /** - * Handles the RolloutChangeEvent to refresh the item in the grid. - * - * @param rolloutChangeEvent - * the event which contains the rollout which has been changed - */ - @SuppressWarnings("unchecked") - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { - if (!rolloutUIState.isShowRollOuts()) { - return; - } - final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); - final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); - if (item == null) { - return; - } - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); - final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); - final int groupsCreated = rollout.getRolloutGroupsCreated(); - if (groupsCreated != 0) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); - } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) - .setValue(Long.valueOf(rollout.getRolloutGroups().size())); - } - item.getItemProperty(ROLLOUT_RENDERER_DATA) - .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); - - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } - - @Override - protected void addContainerProperties() { - final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGridContainer.addContainerProperty(DS_TYPE, String.class, null, false, false); - rolloutGridContainer.addContainerProperty(SW_MODULES, Set.class, null, false, false); - rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGridContainer.addContainerProperty(IS_REQUIRED_MIGRATION_STEP, boolean.class, null, false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); - - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, - false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - 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); - - } - - @Override - protected void setColumnExpandRatio() { - - getColumn(ROLLOUT_RENDERER_DATA).setMinimumWidth(40); - getColumn(ROLLOUT_RENDERER_DATA).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); - - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - - 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); - - setFrozenColumnCount(getColumns().size()); - } - - @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(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")); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); - getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - 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")); - } - - @Override - protected String getGridId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; - } - - @Override - protected void setColumnProperties() { - final List columnList = new ArrayList<>(); - columnList.add(ROLLOUT_RENDERER_DATA); - columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); - columnList.add(DS_TYPE); - columnList.add(SW_MODULES); - columnList.add(IS_REQUIRED_MIGRATION_STEP); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - 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(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); - alignColumns(); - } - - @Override - protected void setHiddenColumns() { - final List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - columnsToBeHidden.add(IS_REQUIRED_MIGRATION_STEP); - columnsToBeHidden.add(DS_TYPE); - columnsToBeHidden.add(SW_MODULES); - for (final Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - - } - - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } - - @Override - protected void addColumnRenderes() { - getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), - new TotalTargetGroupsConverter()); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new TotalTargetCountStatusConverter()); - - createRolloutStatusToFontMap(); - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); - - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - - final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); - customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); - getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); - - } - - private void createRolloutStatusToFontMap() { - statusIconMap.put(RolloutStatus.FINISHED, - new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); - statusIconMap.put(RolloutStatus.PAUSED, - new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); - statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); - statusIconMap.put(RolloutStatus.READY, - new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); - statusIconMap.put(RolloutStatus.STOPPED, - new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); - statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); - statusIconMap.put(RolloutStatus.ERROR_CREATING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - statusIconMap.put(RolloutStatus.ERROR_STARTING, - new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); - } - - 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; - } - }); - } - - private void onClickOfRolloutName(final RendererClickEvent event) { - rolloutUIState.setRolloutId((long) event.getItemId()); - final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutUIState.setRolloutName(rolloutName); - final String ds = (String) getContainerDataSource().getItem(event.getItemId()) - .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); - rolloutUIState.setRolloutDistributionSet(ds); - 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(event -> menuItemClicked(event)); - 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()) { - 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; - } - } - - 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); - } - - private void refreshGrid() { - ((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(); - } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { - return SPUILabelDefinitions.ACTION.toLowerCase(); - } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { - return ((RolloutRendererData) cell.getProperty().getValue()).getName(); - } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { - return DistributionBarHelper - .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); - } else if (SPUILabelDefinitions.VAR_DIST_NAME_VERSION.equals(cell.getPropertyId())) { - return getDSDetails((Item) cell.getItem()); - } - return null; - } - - private String getDSDetails(final Item rolloutItem) { - StringBuilder swModuleNames = new StringBuilder(); - StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = (Set) rolloutItem.getItemProperty(SW_MODULES).getValue(); - swModules.forEach(swModule -> { - swModuleNames.append(swModule.getName()); - swModuleNames.append(" , "); - swModuleVendors.append(swModule.getVendor()); - swModuleVendors.append(" , "); - }); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("
    "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Description : ") - .append((String) rolloutItem.getItemProperty(SPUILabelDefinitions.VAR_DESC).getValue()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Type : ") - .append((String) rolloutItem.getItemProperty(DS_TYPE).getValue()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); - stringBuilder.append("Required Migration step : ") - .append((boolean) rolloutItem.getItemProperty(IS_REQUIRED_MIGRATION_STEP).getValue() ? "Yes" : "No"); - stringBuilder.append("
  • "); - - stringBuilder.append("
  • "); - stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append("
  • "); - - stringBuilder.append("
  • "); - stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append("
  • "); - - stringBuilder.append("
"); - return stringBuilder.toString(); - } - - enum ACTION { - PAUSE, RESUME, START, UPDATE - } - - /** - * Represents data of context menu item. - * - */ - public static class ContextMenuData { - - private Long rolloutId; - - private ACTION action; - - /** - * Set rollout if and action. - * - * @param rolloutId - * id of rollout - * @param action - * user action {@link ACTION} - */ - public ContextMenuData(final Long rolloutId, final ACTION action) { - this.action = action; - this.rolloutId = rolloutId; - } - - /** - * @return the rolloutId - */ - public Long getRolloutId() { - return rolloutId; - } - - /** - * @param rolloutId - * the rolloutId to set - */ - public void setRolloutId(final Long rolloutId) { - this.rolloutId = rolloutId; - } - - /** - * @return the action - */ - public ACTION getAction() { - return action; - } - - /** - * @param action - * the action to set - */ - public void setAction(final ACTION action) { - this.action = action; - } - } - - /** - * - * Converter to convert {@link RolloutStatus} to string. - * - */ - class RolloutStatusConverter implements Converter { - - private static final long serialVersionUID = -1217685750825632678L; - - @Override - public RolloutStatus convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final RolloutStatus value, final Class targetType, - final Locale locale) { - return convertRolloutStatusToString(value); - } - - @Override - public Class getModelType() { - return RolloutStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - - private String convertRolloutStatusToString(final RolloutStatus value) { - final StatusFontIcon statusFontIcon = statusIconMap.get(value); - final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); - return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); - } - } - - /** - * Converter to convert {@link TotalTargetCountStatus} to formatted string - * with status and count details. - * - */ - class TotalTargetCountStatusConverter implements Converter { - - private static final long serialVersionUID = -5794528427855153924L; - - @Override - public TotalTargetCountStatus convertToModel(final String value, - final Class targetType, final Locale locale) - 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 { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } - - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - } - - /** - * Converter to convert 0 to empty, if total target groups is zero. - * - */ - class TotalTargetGroupsConverter implements Converter { - - 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 { - return null; - } - - @Override - public String convertToPresentation(final Long value, final Class targetType, - final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - if (value == 0) { - return ""; - } - return value.toString(); - } - - @Override - public Class getModelType() { - return Long.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - - } + private static final long serialVersionUID = 4060904914954370524L; + + 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 DS_TYPE = "type"; + + private static final String SW_MODULES = "swModules"; + + private static final String IS_REQUIRED_MIGRATION_STEP = "isRequiredMigrationStep"; + + private static final String ROLLOUT_RENDERER_DATA = "rolloutRendererData"; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + private transient Map statusIconMap = new EnumMap<>(RolloutStatus.class); + + /** + * Handles the RolloutEvent to refresh Grid. + * + */ + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + switch (event) { + case FILTER_BY_TEXT: + case CREATE_ROLLOUT: + case UPDATE_ROLLOUT: + case SHOW_ROLLOUTS: + refreshGrid(); + break; + default: + return; + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the grid. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + if (!rolloutUIState.isShowRollOuts()) { + return; + } + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + if (item == null) { + return; + } + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + final int groupsCreated = rollout.getRolloutGroupsCreated(); + if (groupsCreated != 0) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue(Long.valueOf(groupsCreated)); + } else if (rollout.getRolloutGroups() != null && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } + item.getItemProperty(ROLLOUT_RENDERER_DATA) + .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); + + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } + + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGridContainer.addContainerProperty(DS_TYPE, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SW_MODULES, Set.class, null, false, false); + rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(IS_REQUIRED_MIGRATION_STEP, boolean.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Long.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + 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); + + } + + @Override + protected void setColumnExpandRatio() { + + getColumn(ROLLOUT_RENDERER_DATA).setMinimumWidth(40); + getColumn(ROLLOUT_RENDERER_DATA).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); + + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); + + 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(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + + setFrozenColumnCount(getColumns().size()); + } + + @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(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")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + 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")); + } + + @Override + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; + } + + @Override + protected void setColumnProperties() { + final List columnList = new ArrayList<>(); + columnList.add(ROLLOUT_RENDERER_DATA); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(DS_TYPE); + columnList.add(SW_MODULES); + columnList.add(IS_REQUIRED_MIGRATION_STEP); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + 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(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } + + @Override + protected void setHiddenColumns() { + final List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + columnsToBeHidden.add(IS_REQUIRED_MIGRATION_STEP); + columnsToBeHidden.add(DS_TYPE); + columnsToBeHidden.add(SW_MODULES); + for (final Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } + + @Override + protected void addColumnRenderes() { + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setRenderer(new HtmlRenderer(), + new TotalTargetGroupsConverter()); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); + + createRolloutStatusToFontMap(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); + + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + + final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); + customObjectRenderer.addClickListener(event -> onClickOfRolloutName(event)); + getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); + + } + + private void createRolloutStatusToFontMap() { + statusIconMap.put(RolloutStatus.FINISHED, + new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); + statusIconMap.put(RolloutStatus.PAUSED, + new StatusFontIcon(FontAwesome.PAUSE, SPUIStyleDefinitions.STATUS_ICON_BLUE)); + statusIconMap.put(RolloutStatus.RUNNING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW)); + statusIconMap.put(RolloutStatus.READY, + new StatusFontIcon(FontAwesome.DOT_CIRCLE_O, SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE)); + statusIconMap.put(RolloutStatus.STOPPED, + new StatusFontIcon(FontAwesome.STOP, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.CREATING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY)); + statusIconMap.put(RolloutStatus.STARTING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE)); + statusIconMap.put(RolloutStatus.ERROR_CREATING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + statusIconMap.put(RolloutStatus.ERROR_STARTING, + new StatusFontIcon(FontAwesome.EXCLAMATION_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_RED)); + } + + 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; + } + }); + } + + private void onClickOfRolloutName(final RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutUIState.setRolloutName(rolloutName); + final String ds = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); + rolloutUIState.setRolloutDistributionSet(ds); + 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(event -> menuItemClicked(event)); + 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()) { + 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; + } + } + + 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); + } + + private void refreshGrid() { + ((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(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if (ROLLOUT_RENDERER_DATA.equals(cell.getPropertyId())) { + return ((RolloutRendererData) cell.getProperty().getValue()).getName(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); + } else if (SPUILabelDefinitions.VAR_DIST_NAME_VERSION.equals(cell.getPropertyId())) { + return getDSDetails((Item) cell.getItem()); + } + return null; + } + + private String getDSDetails(final Item rolloutItem) { + StringBuilder swModuleNames = new StringBuilder(); + StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = (Set) rolloutItem.getItemProperty(SW_MODULES).getValue(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("
    "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Description : ") + .append((String) rolloutItem.getItemProperty(SPUILabelDefinitions.VAR_DESC).getValue()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append(" DistributionSet Type : ") + .append((String) rolloutItem.getItemProperty(DS_TYPE).getValue()); + stringBuilder.append("
  • "); + stringBuilder.append("
  • "); + stringBuilder.append("Required Migration step : ") + .append((boolean) rolloutItem.getItemProperty(IS_REQUIRED_MIGRATION_STEP).getValue() ? "Yes" : "No"); + stringBuilder.append("
  • "); + + stringBuilder.append("
  • "); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append("
  • "); + + stringBuilder.append("
  • "); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append("
  • "); + + stringBuilder.append("
"); + return stringBuilder.toString(); + } + + enum ACTION { + PAUSE, RESUME, START, UPDATE + } + + /** + * Represents data of context menu item. + * + */ + public static class ContextMenuData { + + private Long rolloutId; + + private ACTION action; + + /** + * Set rollout if and action. + * + * @param rolloutId + * id of rollout + * @param action + * user action {@link ACTION} + */ + public ContextMenuData(final Long rolloutId, final ACTION action) { + this.action = action; + this.rolloutId = rolloutId; + } + + /** + * @return the rolloutId + */ + public Long getRolloutId() { + return rolloutId; + } + + /** + * @param rolloutId + * the rolloutId to set + */ + public void setRolloutId(final Long rolloutId) { + this.rolloutId = rolloutId; + } + + /** + * @return the action + */ + public ACTION getAction() { + return action; + } + + /** + * @param action + * the action to set + */ + public void setAction(final ACTION action) { + this.action = action; + } + } + + /** + * + * Converter to convert {@link RolloutStatus} to string. + * + */ + class RolloutStatusConverter implements Converter { + + private static final long serialVersionUID = -1217685750825632678L; + + @Override + public RolloutStatus convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, final Class targetType, + final Locale locale) { + return convertRolloutStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + private String convertRolloutStatusToString(final RolloutStatus value) { + final StatusFontIcon statusFontIcon = statusIconMap.get(value); + final String codePoint = HawkbitCommonUtil.getCodePoint(statusFontIcon); + return HawkbitCommonUtil.getStatusLabelDetailsInString(codePoint, statusFontIcon.getStyle(), + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + } + } + + /** + * Converter to convert {@link TotalTargetCountStatus} to formatted string + * with status and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { + + private static final long serialVersionUID = -5794528427855153924L; + + @Override + public TotalTargetCountStatus convertToModel(final String value, + final Class targetType, final Locale locale) + 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 { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * Converter to convert 0 to empty, if total target groups is zero. + * + */ + class TotalTargetGroupsConverter implements Converter { + + 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 { + return null; + } + + @Override + public String convertToPresentation(final Long value, final Class targetType, + final Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + if (value == 0) { + return ""; + } + return value.toString(); + } + + @Override + public Class getModelType() { + return Long.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + } } 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 46a76fb17..df4a1309e 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 @@ -103,9 +103,9 @@ public final class HawkbitCommonUtil { private static final String TARGET_TAG_DROP_REMOVE_SCRIPT = "var m = document.getElementById('show-filter-drop-hint'); if(m) { document.head.removeChild(m); } "; private static final String DELETE_DROP_CREATE_SCRIPT = "var q = document.getElementById('show-delete-drop-hint'); if(q) { } else { showDeleteDrop = document.createElement('style'); showDeleteDrop.id=\"show-delete-drop-hint\"; document.head.appendChild(showDeleteDrop); }"; private static final String DELETE_TAG_DROP_REMOVE_SCRIPT = "var o = document.getElementById('show-delete-drop-hint'); if(o) { document.head.removeChild(o); } "; - + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; - private static final String INSTALL_DIST_SET = "installedDistributionSet"; + private static final String INSTALL_DIST_SET = "installedDistributionSet"; /** * Define empty string. @@ -1041,7 +1041,7 @@ public final class HawkbitCommonUtil { targetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_POLL_STATUS_TOOL_TIP, String.class, null, false, true); targetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); - + targetTableContainer.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); targetTableContainer.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); From a23da8202f6788ce53507414ae06d6bc433db5b5 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 12:44:13 +0200 Subject: [PATCH 226/344] 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 227/344] 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 228/344] 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 9be6aa6e18f01d500d61f8531a1329d8cac03749 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 28 Apr 2016 14:12:07 +0200 Subject: [PATCH 229/344] remove special coap-auth-token filter for coap-downloads Signed-off-by: Michael Hirsch --- .../amqp/AmqpControllerAuthentfication.java | 2 - .../dmf/json/model/TenantSecurityToken.java | 2 - .../CoapAnonymousPreAuthenticatedFilter.java | 37 ------------------- 3 files changed, 41 deletions(-) delete mode 100644 hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java index 9d120c17b..91d07de37 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java +++ b/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentfication.java @@ -17,7 +17,6 @@ import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.im.authentication.TenantAwareAuthenticationDetails; import org.eclipse.hawkbit.repository.ControllerManagement; import org.eclipse.hawkbit.repository.TenantConfigurationManagement; -import org.eclipse.hawkbit.security.CoapAnonymousPreAuthenticatedFilter; import org.eclipse.hawkbit.security.ControllerPreAuthenticateSecurityTokenFilter; import org.eclipse.hawkbit.security.ControllerPreAuthenticatedAnonymousDownload; import org.eclipse.hawkbit.security.ControllerPreAuthenticatedAnonymousFilter; @@ -97,7 +96,6 @@ public class AmqpControllerAuthentfication { filterChain.add(anonymousDownloadFilter); filterChain.add(new ControllerPreAuthenticatedAnonymousFilter(ddiSecruityProperties)); - filterChain.add(new CoapAnonymousPreAuthenticatedFilter()); } /** diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java index ccc3a5b42..e4f41bc46 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java @@ -26,8 +26,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class TenantSecurityToken { public static final String AUTHORIZATION_HEADER = "Authorization"; - public static final String COAP_AUTHORIZATION_HEADER = "Coap-Authorization"; - public static final String COAP_TOKEN_VALUE = "CoapToken"; @JsonProperty private final String tenant; diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java deleted file mode 100644 index 36a444c43..000000000 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/CoapAnonymousPreAuthenticatedFilter.java +++ /dev/null @@ -1,37 +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.security; - -import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; - -/** - * A Filter for device which download via coap. - * - * - * - */ -public class CoapAnonymousPreAuthenticatedFilter implements PreAuthenficationFilter { - - @Override - public HeaderAuthentication getPreAuthenticatedPrincipal(final TenantSecurityToken secruityToken) { - return new HeaderAuthentication(secruityToken.getControllerId(), TenantSecurityToken.COAP_TOKEN_VALUE); - } - - @Override - public HeaderAuthentication getPreAuthenticatedCredentials(final TenantSecurityToken secruityToken) { - return new HeaderAuthentication(secruityToken.getControllerId(), TenantSecurityToken.COAP_TOKEN_VALUE); - } - - @Override - public boolean isEnable(final TenantSecurityToken secruityToken) { - final String authHeader = secruityToken.getHeader(TenantSecurityToken.COAP_AUTHORIZATION_HEADER); - return TenantSecurityToken.COAP_TOKEN_VALUE.equals(authHeader); - } - -} From 474a496e8dbd7cfaf5f1625a6969a8c45be26ef1 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 14:18:26 +0200 Subject: [PATCH 230/344] 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 231/344] 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 8dcfc8412d7f2ae72fbf59ce87a9be777bc9f069 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 16:05:37 +0200 Subject: [PATCH 232/344] Fix: Return trimmed username Signed-off-by: SirWayne --- .../hawkbit/ui/common/UserDetailsFormatter.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 04ad0c51a..d4a733de3 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 @@ -88,12 +88,10 @@ public final class UserDetailsFormatter { * name to max 12 characters. @see * {@link UserDetailsFormatter#loadAndFormatUsername(String, int)} * - * @param baseEntity - * the entity * @return the formatted user name (max 12 characters) cannot be */ - public static String loadAndFormatCurrentUsername() { - return loadAndFormatUsername(getCurrentUser().getUsername(), 12); + public static String formatCurrentUsername() { + return loadAndFormatUsername(getCurrentUser().getUsername(), 5); } /** @@ -114,6 +112,10 @@ public final class UserDetailsFormatter { */ public static String loadAndFormatUsername(final String username, final int expectedNameLength) { final UserDetails userDetails = loadUserByUsername(username); + return formatUserName(expectedNameLength, userDetails); + } + + private static String formatUserName(final int expectedNameLength, final UserDetails userDetails) { if (!(userDetails instanceof UserPrincipal)) { return userDetails.getUsername(); } @@ -134,7 +136,7 @@ public final class UserDetailsFormatter { if (StringUtils.isEmpty(trimmedUsername)) { return trimAndFormatDetail(userPrincipal.getLoginname(), expectedNameLength); } - return firstAndLastname; + return trimmedUsername; } /** From f203e31d00258195d55ddd7950a884fa21e800fb Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Thu, 28 Apr 2016 16:20:13 +0200 Subject: [PATCH 233/344] use constants for html tags used often Signed-off-by: Michael Hirsch --- .../CreateOrUpdateFilterTable.java | 41 +++++++++++-------- .../management/targettable/TargetTable.java | 41 +++++++++++-------- .../ui/rollout/rollout/RolloutListGrid.java | 37 +++++++++-------- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 5 +++ 4 files changed, 72 insertions(+), 52 deletions(-) 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 cf8a514d4..debd35056 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 @@ -8,6 +8,11 @@ */ package org.eclipse.hawkbit.ui.filtermanagement; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; +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.Date; import java.util.HashMap; @@ -263,7 +268,7 @@ public class CreateOrUpdateFilterTable extends Table { private static final long serialVersionUID = 688730421728162456L; @Override - public String generateDescription(Component source, Object itemId, Object propertyId) { + public String generateDescription(final Component source, final Object itemId, final Object propertyId) { final DistributionSet distributionSet; final Item item = getItem(itemId); if (propertyId != null) { @@ -279,35 +284,35 @@ public class CreateOrUpdateFilterTable extends Table { } private String getDSDetails(final DistributionSet distributionSet) { - StringBuilder swModuleNames = new StringBuilder(); - StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = (Set) distributionSet.getModules(); + final StringBuilder swModuleNames = new StringBuilder(); + final StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = distributionSet.getModules(); swModules.forEach(swModule -> { swModuleNames.append(swModule.getName()); swModuleNames.append(" , "); swModuleVendors.append(swModule.getVendor()); swModuleVendors.append(" , "); }); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("
    "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(HTML_UL_OPEN_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append(" DistributionSet Description : ").append(distributionSet.getDescription()); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append(" Required Migration step : ") .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append("
"); + stringBuilder.append(HTML_UL_CLOSE_TAG); return stringBuilder.toString(); } 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 a1e759950..0055e06e4 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 @@ -8,6 +8,11 @@ */ package org.eclipse.hawkbit.ui.management.targettable; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; +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.Collection; import java.util.Collections; @@ -1089,7 +1094,7 @@ public class TargetTable extends AbstractTable implements private static final long serialVersionUID = 688730421728162456L; @Override - public String generateDescription(Component source, Object itemId, Object propertyId) { + public String generateDescription(final Component source, final Object itemId, final Object propertyId) { final DistributionSet distributionSet; final Item item = getItem(itemId); if (propertyId != null) { @@ -1105,34 +1110,34 @@ public class TargetTable extends AbstractTable implements } private String getDSDetails(final DistributionSet distributionSet) { - StringBuilder swModuleNames = new StringBuilder(); - StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = (Set) distributionSet.getModules(); + final StringBuilder swModuleNames = new StringBuilder(); + final StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = distributionSet.getModules(); swModules.forEach(swModule -> { swModuleNames.append(swModule.getName()); swModuleNames.append(" , "); swModuleVendors.append(swModule.getVendor()); swModuleVendors.append(" , "); }); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("
    "); - stringBuilder.append("
  • "); - stringBuilder.append(" DistributionSet Description : ").append((String) distributionSet.getDescription()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(HTML_UL_OPEN_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append(" DistributionSet Description : ").append(distributionSet.getDescription()); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append(" Required Migration step : ") .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append("
  • "); - stringBuilder.append("
"); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_UL_CLOSE_TAG); return stringBuilder.toString(); } } 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 1ad0bfc35..7f3877a9a 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 @@ -8,6 +8,11 @@ */ package org.eclipse.hawkbit.ui.rollout.rollout; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; +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; @@ -477,14 +482,14 @@ public class RolloutListGrid extends AbstractGrid { return DistributionBarHelper .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); } else if (SPUILabelDefinitions.VAR_DIST_NAME_VERSION.equals(cell.getPropertyId())) { - return getDSDetails((Item) cell.getItem()); + return getDSDetails(cell.getItem()); } return null; } private String getDSDetails(final Item rolloutItem) { - StringBuilder swModuleNames = new StringBuilder(); - StringBuilder swModuleVendors = new StringBuilder(); + final StringBuilder swModuleNames = new StringBuilder(); + final StringBuilder swModuleVendors = new StringBuilder(); final Set swModules = (Set) rolloutItem.getItemProperty(SW_MODULES).getValue(); swModules.forEach(swModule -> { swModuleNames.append(swModule.getName()); @@ -492,30 +497,30 @@ public class RolloutListGrid extends AbstractGrid { swModuleVendors.append(swModule.getVendor()); swModuleVendors.append(" , "); }); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("
    "); - stringBuilder.append("
  • "); + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(HTML_UL_OPEN_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append(" DistributionSet Description : ") .append((String) rolloutItem.getItemProperty(SPUILabelDefinitions.VAR_DESC).getValue()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append(" DistributionSet Type : ") .append((String) rolloutItem.getItemProperty(DS_TYPE).getValue()); - stringBuilder.append("
  • "); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("Required Migration step : ") .append((boolean) rolloutItem.getItemProperty(IS_REQUIRED_MIGRATION_STEP).getValue() ? "Yes" : "No"); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_OPEN_TAG); stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append("
  • "); + stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append("
"); + stringBuilder.append(HTML_UL_CLOSE_TAG); return stringBuilder.toString(); } 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 df4a1309e..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 @@ -73,6 +73,11 @@ public final class HawkbitCommonUtil { */ public static final String SPAN_CLOSE = ""; + public static final String HTML_LI_CLOSE_TAG = ""; + public static final String HTML_LI_OPEN_TAG = "
  • "; + public static final String HTML_UL_CLOSE_TAG = ""; + public static final String HTML_UL_OPEN_TAG = "
      "; + private static final Logger LOG = LoggerFactory.getLogger(HawkbitCommonUtil.class); private static final String JS_DRAG_COUNT_REM_CHILD = " if(x) { document.head.removeChild(x); } "; From a6386ecdff8f9a382d9cec816737d7e747c31e02 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 16:20:14 +0200 Subject: [PATCH 234/344] 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 235/344] 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 345e9a7cf3bf4cf25f7fbaf0ffe1409550cb0076 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 28 Apr 2016 16:24:13 +0200 Subject: [PATCH 236/344] Rename method Signed-off-by: SirWayne --- .../main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 690cb51a2..5a822ff86 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 @@ -193,7 +193,7 @@ public final class DashboardMenu extends CustomComponent { final MenuItem settingsItem = settings.addItem("", new ThemeResource("images/profile-pic-57px.jpg"), null); final String formattedTenant = UserDetailsFormatter.formatCurrentTenant(); - final String formattedUsername = UserDetailsFormatter.loadAndFormatCurrentUsername(); + final String formattedUsername = UserDetailsFormatter.formatCurrentUsername(); String tenantAndUsernameHtml = ""; if (!StringUtils.isEmpty(formattedTenant)) { tenantAndUsernameHtml += formattedTenant + "
      "; From 5b9e6ddb9df47d1eacbfa56cebd86af86b423267 Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Thu, 28 Apr 2016 16:26:44 +0200 Subject: [PATCH 237/344] 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 238/344] 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 239/344] 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 240/344] 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 241/344] 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 607c98b819be9c64c8ef4dff1c8ff455044429af Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 29 Apr 2016 07:21:43 +0200 Subject: [PATCH 242/344] remove current tenant null check cause not all queries have current tenant and must set it for tenant indenpendent queries like SystemManagement Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/MultiTenantJpaTransactionManager.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java index a45c846a9..597aee5e8 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java @@ -11,7 +11,6 @@ package org.eclipse.hawkbit; import javax.persistence.EntityManager; import javax.transaction.Transaction; -import org.eclipse.hawkbit.repository.exception.TenantNotExistException; import org.eclipse.hawkbit.tenancy.TenantAware; import org.eclipse.persistence.config.PersistenceUnitProperties; import org.springframework.beans.factory.annotation.Autowired; @@ -41,11 +40,8 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { final EntityManager em = emHolder.getEntityManager(); final String currentTenant = tenantAware.getCurrentTenant(); - if (currentTenant == null) { - throw new TenantNotExistException("Tenant Unknown. Canceling transaction."); + if (currentTenant != null) { + em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, currentTenant.toUpperCase()); } - - em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, currentTenant.toUpperCase()); - } } From c1b9fb48e89a49c02910709e8d9f9b460c2987d7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 29 Apr 2016 08:44:29 +0200 Subject: [PATCH 243/344] No need to get EM if no tenant has to be set. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/MultiTenantJpaTransactionManager.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java index 597aee5e8..b3821e5f3 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/MultiTenantJpaTransactionManager.java @@ -35,12 +35,11 @@ public class MultiTenantJpaTransactionManager extends JpaTransactionManager { protected void doBegin(final Object transaction, final TransactionDefinition definition) { super.doBegin(transaction, definition); - final EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager - .getResource(getEntityManagerFactory()); - final EntityManager em = emHolder.getEntityManager(); - final String currentTenant = tenantAware.getCurrentTenant(); if (currentTenant != null) { + final EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager + .getResource(getEntityManagerFactory()); + final EntityManager em = emHolder.getEntityManager(); em.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, currentTenant.toUpperCase()); } } From 3c548c9121f70a742d82a5ef38b796d613d09f7e Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 29 Apr 2016 10:18:45 +0200 Subject: [PATCH 244/344] use vaadin-version placeholder in case of hard-coded vaadin version Signed-off-by: Michael Hirsch --- examples/hawkbit-device-simulator/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index a23051124..c74eace3e 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -139,7 +139,7 @@ com.vaadin vaadin-bom - 7.6.3 + ${vaadin.version} pom import From 8e2ea76c8ca4709c68dd0908d6abbc7291128ee2 Mon Sep 17 00:00:00 2001 From: venu1278 Date: Fri, 29 Apr 2016 16:10:10 +0530 Subject: [PATCH 245/344] fix_assigned_installed_ds_tooltip_gliches Signed-off-by: venu1278 --- .../ui/common/table/AbstractTable.java | 4 - .../CreateOrUpdateFilterTable.java | 72 ++-------------- .../management/targettable/TargetTable.java | 73 ++--------------- .../AssignInstalledDSTooltipGenerator.java | 82 +++++++++++++++++++ 4 files changed, 97 insertions(+), 134 deletions(-) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java 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 843d86ca3..1808cf070 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 @@ -323,10 +323,6 @@ public abstract class AbstractTable extends Table { return columnList; } columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.2F)); - columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - i18n.get("header.assigned.ds"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, - i18n.get("header.installed.ds"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); 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 debd35056..6e4933d69 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 @@ -8,27 +8,22 @@ */ package org.eclipse.hawkbit.ui.filtermanagement; -import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; -import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; -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.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; 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.SPUIDefinitions; @@ -99,7 +94,7 @@ public class CreateOrUpdateFilterTable extends Table { setId(SPUIComponetIdProvider.CUSTOM_FILTER_TARGET_TABLE_ID); setSelectable(false); eventBus.subscribe(this); - setItemDescriptionGenerator(new TooltipGenerator()); + setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator()); } @PreDestroy @@ -188,13 +183,13 @@ public class CreateOrUpdateFilterTable extends Table { container.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, Date.class, null); container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, null, false, true); container.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, null, false, true); - container.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, String.class, ""); - container.addContainerProperty(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, String.class, null); container.addContainerProperty(SPUILabelDefinitions.VAR_TARGET_STATUS, TargetUpdateStatus.class, null); container.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); container.addContainerProperty(ASSIGN_DIST_SET, DistributionSet.class, null, false, true); container.addContainerProperty(INSTALL_DIST_SET, DistributionSet.class, null, false, true); + container.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, String.class, ""); + container.addContainerProperty(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, String.class, null); } private List getVisbleColumns() { @@ -205,12 +200,12 @@ public class CreateOrUpdateFilterTable extends Table { columnList.add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1F)); columnList.add( new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, i18n.get("header.assigned.ds"), 0.125F)); columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, i18n.get("header.installed.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); return columnList; } @@ -263,58 +258,5 @@ public class CreateOrUpdateFilterTable extends Table { populateTableData(); eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); } - - public class TooltipGenerator implements ItemDescriptionGenerator { - private static final long serialVersionUID = 688730421728162456L; - - @Override - public String generateDescription(final Component source, final Object itemId, final Object propertyId) { - final DistributionSet distributionSet; - final Item item = getItem(itemId); - if (propertyId != null) { - if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } - } - return null; - } - - private String getDSDetails(final DistributionSet distributionSet) { - final StringBuilder swModuleNames = new StringBuilder(); - final StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = distributionSet.getModules(); - swModules.forEach(swModule -> { - swModuleNames.append(swModule.getName()); - swModuleNames.append(" , "); - swModuleVendors.append(swModule.getVendor()); - swModuleVendors.append(" , "); - }); - final StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(HTML_UL_OPEN_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append(" DistributionSet Description : ").append(distributionSet.getDescription()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append(" Required Migration step : ") - .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - - stringBuilder.append(HTML_UL_CLOSE_TAG); - return stringBuilder.toString(); - } - - } + } 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 0055e06e4..6232ebcf8 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 @@ -8,11 +8,6 @@ */ package org.eclipse.hawkbit.ui.management.targettable; -import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; -import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; -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.Collection; import java.util.Collections; @@ -59,6 +54,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.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; @@ -117,9 +113,7 @@ public class TargetTable extends AbstractTable implements private static final int PROPERTY_DEPT = 3; private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; - private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; - private static final String INSTALL_DIST_SET = "installedDistributionSet"; - + @Autowired private transient TargetManagement targetManagement; @@ -147,7 +141,7 @@ public class TargetTable extends AbstractTable implements addActionHandler(this); actionSelectAll = new ShortcutAction(i18n.get("action.target.table.selectall")); actionUnSelectAll = new ShortcutAction(i18n.get("action.target.table.clear")); - setItemDescriptionGenerator(new TooltipGenerator()); + setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator()); } /** @@ -341,6 +335,11 @@ 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)); + }else{ + columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, + i18n.get("header.assigned.ds"), 0.1F)); + columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, + i18n.get("header.installed.ds"), 0.1F)); } return columnList; @@ -1085,60 +1084,4 @@ public class TargetTable extends AbstractTable implements private boolean isFilteredByTags() { return !managementUIState.getTargetTableFilters().getClickedTargetTags().isEmpty(); } - - /** - * tooltip for assignedDS and installedDS - */ - - protected class TooltipGenerator implements ItemDescriptionGenerator { - private static final long serialVersionUID = 688730421728162456L; - - @Override - public String generateDescription(final Component source, final Object itemId, final Object propertyId) { - final DistributionSet distributionSet; - final Item item = getItem(itemId); - if (propertyId != null) { - if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { - distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); - return getDSDetails(distributionSet); - } - } - return null; - } - - private String getDSDetails(final DistributionSet distributionSet) { - final StringBuilder swModuleNames = new StringBuilder(); - final StringBuilder swModuleVendors = new StringBuilder(); - final Set swModules = distributionSet.getModules(); - swModules.forEach(swModule -> { - swModuleNames.append(swModule.getName()); - swModuleNames.append(" , "); - swModuleVendors.append(swModule.getVendor()); - swModuleVendors.append(" , "); - }); - final StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(HTML_UL_OPEN_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append(" DistributionSet Description : ").append(distributionSet.getDescription()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append(" Required Migration step : ") - .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_LI_OPEN_TAG); - stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); - stringBuilder.append(HTML_LI_CLOSE_TAG); - stringBuilder.append(HTML_UL_CLOSE_TAG); - return stringBuilder.toString(); - } - } } \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java new file mode 100644 index 000000000..5a3b91a7a --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java @@ -0,0 +1,82 @@ +/** + * 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 org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; +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.Set; + +import com.vaadin.data.Item; +import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; +import com.vaadin.ui.Component; +import com.vaadin.ui.Table; + +public class AssignInstalledDSTooltipGenerator implements ItemDescriptionGenerator { + private static final long serialVersionUID = 688730421728162456L; + + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; + private static final String INSTALL_DIST_SET = "installedDistributionSet"; + + @Override + public String generateDescription(final Component source, final Object itemId, final Object propertyId) { + final DistributionSet distributionSet; + final Item item = ((Table)source).getItem(itemId); + if (propertyId != null) { + if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } else if (propertyId.equals(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER)) { + distributionSet = (DistributionSet) item.getItemProperty(INSTALL_DIST_SET).getValue(); + return getDSDetails(distributionSet); + } + } + return null; + } + + private String getDSDetails(final DistributionSet distributionSet) { + final StringBuilder swModuleNames = new StringBuilder(); + final StringBuilder swModuleVendors = new StringBuilder(); + final Set swModules = distributionSet.getModules(); + swModules.forEach(swModule -> { + swModuleNames.append(swModule.getName()); + swModuleNames.append(" , "); + swModuleVendors.append(swModule.getVendor()); + swModuleVendors.append(" , "); + }); + final StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(HTML_UL_OPEN_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append(" DistributionSet Description : ").append(distributionSet.getDescription()); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append(" DistributionSet Type : ").append((distributionSet.getType()).getName()); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append(" Required Migration step : ") + .append(distributionSet.isRequiredMigrationStep() ? "Yes" : "No"); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append("SoftWare Modules : ").append(swModuleNames.toString()); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_LI_OPEN_TAG); + stringBuilder.append("Vendor(s) : ").append(swModuleVendors.toString()); + stringBuilder.append(HTML_LI_CLOSE_TAG); + stringBuilder.append(HTML_UL_CLOSE_TAG); + return stringBuilder.toString(); + } + } + + From 59bec04c58c7649f2b1be5c10e842b92453200ae Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 29 Apr 2016 12:52:27 +0200 Subject: [PATCH 246/344] add null check for distribution set Signed-off-by: Michael Hirsch --- .../AssignInstalledDSTooltipGenerator.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java index 5a3b91a7a..c4e78b3e5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/AssignInstalledDSTooltipGenerator.java @@ -9,9 +9,6 @@ package org.eclipse.hawkbit.ui.utils; -import org.eclipse.hawkbit.repository.model.DistributionSet; -import org.eclipse.hawkbit.repository.model.SoftwareModule; - import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_CLOSE_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_LI_OPEN_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_CLOSE_TAG; @@ -19,21 +16,24 @@ import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_OPEN_TAG; import java.util.Set; +import org.eclipse.hawkbit.repository.model.DistributionSet; +import org.eclipse.hawkbit.repository.model.SoftwareModule; + import com.vaadin.data.Item; import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; import com.vaadin.ui.Component; import com.vaadin.ui.Table; -public class AssignInstalledDSTooltipGenerator implements ItemDescriptionGenerator { +public class AssignInstalledDSTooltipGenerator implements ItemDescriptionGenerator { private static final long serialVersionUID = 688730421728162456L; - + private static final String ASSIGN_DIST_SET = "assignedDistributionSet"; private static final String INSTALL_DIST_SET = "installedDistributionSet"; @Override public String generateDescription(final Component source, final Object itemId, final Object propertyId) { final DistributionSet distributionSet; - final Item item = ((Table)source).getItem(itemId); + final Item item = ((Table) source).getItem(itemId); if (propertyId != null) { if (propertyId.equals(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER)) { distributionSet = (DistributionSet) item.getItemProperty(ASSIGN_DIST_SET).getValue(); @@ -47,6 +47,9 @@ public class AssignInstalledDSTooltipGenerator implements ItemDescriptionGenera } private String getDSDetails(final DistributionSet distributionSet) { + if (distributionSet == null) { + return null; + } final StringBuilder swModuleNames = new StringBuilder(); final StringBuilder swModuleVendors = new StringBuilder(); final Set swModules = distributionSet.getModules(); @@ -77,6 +80,4 @@ public class AssignInstalledDSTooltipGenerator implements ItemDescriptionGenera stringBuilder.append(HTML_UL_CLOSE_TAG); return stringBuilder.toString(); } - } - - +} From a946f51da4149bcf050e2cdb4e268345758a618d Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 29 Apr 2016 12:57:25 +0200 Subject: [PATCH 247/344] fix installed and assigned distribution set setting on the proxy target Signed-off-by: Michael Hirsch --- .../targettable/TargetBeanQuery.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) 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 d127b4198..e48004d7a 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 @@ -134,22 +134,21 @@ public class TargetBeanQuery extends AbstractBeanQuery { prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); - if (pinnedDistId == null) { - prxyTarget.setInstalledDistributionSet(null); - prxyTarget.setAssignedDistributionSet(null); + final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); + final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); + final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); - } else { - final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); - final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); + prxyTarget.setInstalledDistributionSet(installedDistributionSet); + prxyTarget.setAssignedDistributionSet(assignedDistributionSet); + + if (installedDistributionSet != null) { prxyTarget.setInstalledDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( installedDistributionSet.getName(), installedDistributionSet.getVersion())); - prxyTarget.setInstalledDistributionSet(installedDistributionSet); - final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); + } + if (assignedDistributionSet != null) { prxyTarget.setAssignedDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( assignedDistributionSet.getName(), assignedDistributionSet.getVersion())); - prxyTarget.setAssignedDistributionSet(assignedDistributionSet); } - prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); prxyTarget.setTargetInfo(targ.getTargetInfo()); From 1438d3ef2b3baa8da460ad5c4a582c224408f24f Mon Sep 17 00:00:00 2001 From: venu1278 Date: Mon, 2 May 2016 15:32:40 +0530 Subject: [PATCH 248/344] displaying assigned installed ds tooltip in Deployment View Signed-off-by: venu1278 --- .../eclipse/hawkbit/ui/management/targettable/TargetTable.java | 1 + 1 file changed, 1 insertion(+) 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 6232ebcf8..55603b4d2 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 @@ -340,6 +340,7 @@ public class TargetTable extends AbstractTable implements i18n.get("header.assigned.ds"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, i18n.get("header.installed.ds"), 0.1F)); + setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator()); } return columnList; From 054dca1a64ff649adbea1c12cf3eaa57ed94cbd1 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 2 May 2016 17:08:01 +0200 Subject: [PATCH 249/344] Added driver hint --- examples/hawkbit-example-app/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/hawkbit-example-app/README.md b/examples/hawkbit-example-app/README.md index ecbec93c3..2b8e60643 100644 --- a/examples/hawkbit-example-app/README.md +++ b/examples/hawkbit-example-app/README.md @@ -13,7 +13,11 @@ We have have described several options for you to get access to the example. ``` java -jar examples/hawkbit-example-app/target/hawkbit-example-app-*-SNAPSHOT.jar ``` + +(Note: if you intend to user another database than H2 you have to add the JDBC driver to your class path). + Or: + ``` run org eclipse.hawkbit.app.Start ``` From 6763cb9aff208aa6b079685ec543ca4802416af7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 2 May 2016 17:08:43 +0200 Subject: [PATCH 250/344] Grammar --- examples/hawkbit-example-app/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hawkbit-example-app/README.md b/examples/hawkbit-example-app/README.md index 2b8e60643..cfd15c433 100644 --- a/examples/hawkbit-example-app/README.md +++ b/examples/hawkbit-example-app/README.md @@ -14,7 +14,7 @@ We have have described several options for you to get access to the example. java -jar examples/hawkbit-example-app/target/hawkbit-example-app-*-SNAPSHOT.jar ``` -(Note: if you intend to user another database than H2 you have to add the JDBC driver to your class path). +_(Note: you have to add the JDBC driver also to your class path if you intend to use another database than H2.)_ Or: From ecc21025328d520c73b7dc8bb8ca8be4f2af0f26 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 2 May 2016 17:14:53 +0200 Subject: [PATCH 251/344] Added credential hint --- examples/hawkbit-example-app/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/hawkbit-example-app/README.md b/examples/hawkbit-example-app/README.md index cfd15c433..068acdd15 100644 --- a/examples/hawkbit-example-app/README.md +++ b/examples/hawkbit-example-app/README.md @@ -4,9 +4,9 @@ The hawkBit example application is a standalone spring-boot application with an We have have described several options for you to get access to the example. ## Try out the example application in our hawkBit sandbox on Bluemix -- try out Management UI https://hawkbit.eu-gb.mybluemix.net/UI -- try out Management API https://hawkbit.eu-gb.mybluemix.net/rest/v1/targets (don't forget basic auth header) -- try out DDI API https://hawkbit.eu-gb.mybluemix.net/DEFAULT/controller/v1/MYTESTDEVICE +- try out Management UI https://hawkbit.eu-gb.mybluemix.net/UI (username: admin, passwd: admin) +- try out Management API https://hawkbit.eu-gb.mybluemix.net/rest/v1/targets (don't forget basic auth header; username: admin, passwd: admin) +- try out DDI API https://hawkbit.eu-gb.mybluemix.net/DEFAULT/controller/v1/MYTESTDEVICE (authentication disabled) ## On your own workstation ### Run From 2c5969b0809e8e3d837368c3a9d6f234bcd2330c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 2 May 2016 18:07:23 +0200 Subject: [PATCH 252/344] Fixed a few spellings --- README.md | 8 ++++---- hawkbit-core/README.md | 3 +++ .../PreAuthTokenSourceTrustAuthenticationProvider.java | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 hawkbit-core/README.md diff --git a/README.md b/README.md index 0a9b0b4c6..ff93c9285 100644 --- a/README.md +++ b/README.md @@ -57,10 +57,10 @@ $ 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-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. diff --git a/hawkbit-core/README.md b/hawkbit-core/README.md new file mode 100644 index 000000000..bf75314d1 --- /dev/null +++ b/hawkbit-core/README.md @@ -0,0 +1,3 @@ +# hawkBit Core + +Various internal interfaces and utility classes. \ No newline at end of file diff --git a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java index b81b76e5c..b4960737d 100644 --- a/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java +++ b/hawkbit-security-integration/src/main/java/org/eclipse/hawkbit/security/PreAuthTokenSourceTrustAuthenticationProvider.java @@ -24,11 +24,11 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; /** - * An spring authentication provider which supportes authentication tokens of + * An spring authentication provider which supports authentication tokens of * type {@link PreAuthenticatedAuthenticationToken} created by the * {@link ControllerPreAuthenticatedSecurityHeaderFilter}. * - * Addtionally to the authentication token providing the principal and the + * Additionally to the authentication token providing the principal and the * credentials which must be match, this authentication provider can also check * the remote IP address of the request. * From 426d95394b289ddc52d2c08e05f18bcfba9cdd7d Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 2 May 2016 18:13:26 +0200 Subject: [PATCH 253/344] Fixed broken merge. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/repository/RolloutManagement.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) 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 13e37abed..09decfc03 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 @@ -59,10 +59,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.annotation.Isolation; -<<<<<<< HEAD -======= import org.springframework.transaction.annotation.Propagation; ->>>>>>> eclipse/master import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.TransactionTemplate; @@ -287,8 +284,8 @@ public class RolloutManagement { } } - private Rollout createRolloutGroupsInNewTransaction(final int amountOfGroups, final RolloutGroupConditions conditions, - final Rollout savedRollout) { + 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); From f3236a57db88525ea13b2c88f40368d09876c8fe Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 08:28:19 +0200 Subject: [PATCH 254/344] Fixed sonar issue for Long equal check. Signed-off-by: Kai Zimmermann --- .../java/org/eclipse/hawkbit/repository/ArtifactManagement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a8a9b5ee5..024ec11cb 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 @@ -317,7 +317,7 @@ public class ArtifactManagement { for (final LocalArtifact lArtifact : localArtifactRepository .findByGridFsFileName(existing.getGridFsFileName())) { if (!lArtifact.getSoftwareModule().isDeleted() - && lArtifact.getSoftwareModule().getId() != existing.getSoftwareModule().getId()) { + && Long.compare(lArtifact.getSoftwareModule().getId(), existing.getSoftwareModule().getId()) != 0) { artifactIsOnlyUsedByOneSoftwareModule = false; break; } From dbc70ae374d7c78ceef93c5aa958f2d4ed8dccd7 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 09:25:07 +0200 Subject: [PATCH 255/344] Added targetToken to DMF update message. Signed-off-by: Kai Zimmermann --- examples/hawkbit-mgmt-api-client/pom.xml | 2 +- .../amqp/AmqpMessageDispatcherService.java | 1 + .../amqp/AmqpMessageHandlerService.java | 3 ++- .../AmqpMessageDispatcherServiceTest.java | 20 +++++++++++-------- .../amqp/AmqpMessageHandlerServiceTest.java | 9 +++++---- .../json/model/DownloadAndUpdateRequest.java | 15 +++++++++++--- .../TargetAssignDistributionSetEvent.java | 12 ++++++++--- .../repository/DeploymentManagement.java | 9 +++++---- 8 files changed, 47 insertions(+), 24 deletions(-) diff --git a/examples/hawkbit-mgmt-api-client/pom.xml b/examples/hawkbit-mgmt-api-client/pom.xml index 9aaf53dc6..77e35df83 100644 --- a/examples/hawkbit-mgmt-api-client/pom.xml +++ b/examples/hawkbit-mgmt-api-client/pom.xml @@ -18,7 +18,7 @@ jar hawkbit-mgmt-api-client - hawkBit Management API example client + hawkBit :: Management API example client 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 19e0cbadf..02c72228c 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 @@ -82,6 +82,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { .getSoftwareModules(); final DownloadAndUpdateRequest downloadAndUpdateRequest = new DownloadAndUpdateRequest(); downloadAndUpdateRequest.setActionId(targetAssignDistributionSetEvent.getActionId()); + downloadAndUpdateRequest.setTargetToken(targetAssignDistributionSetEvent.getTargetToken()); for (final org.eclipse.hawkbit.repository.model.SoftwareModule softwareModule : modules) { final SoftwareModule amqpSoftwareModule = convertToAmqpSoftwareModule(controllerId, softwareModule); 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 447a8ffca..da7c10800 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 @@ -305,7 +305,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final List softwareModuleList = controllerManagement .findSoftwareModulesByDistributionSet(distributionSet); eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), - target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress())); + target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress(), + target.getSecurityToken())); } 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 f2c3d254c..ec6ed05b0 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 @@ -58,6 +58,12 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("AmqpMessage Dispatcher Service Test") public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWithMongoDB { + private static final String TENANT = "default"; + + private static final URI AMQP_URI = IpUtil.createAmqpUri("vHost", "mytest"); + + private static final String TEST_TOKEN = "testToken"; + private AmqpMessageDispatcherService amqpMessageDispatcherService; private RabbitTemplate rabbitTemplate; @@ -89,8 +95,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit @Description("Verfies that download and install event with no software modul works") public void testSendDownloadRequesWithEmptySoftwareModules() { final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( - 1L, "default", CONTROLLER_ID, 1l, new ArrayList(), - IpUtil.createAmqpUri("vHost", "mytest")); + 1L, TENANT, CONTROLLER_ID, 1L, new ArrayList(), AMQP_URI, TEST_TOKEN); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); @@ -104,7 +109,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement, distributionSetManagement); final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( - 1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("vHost", "mytest")); + 1L, TENANT, CONTROLLER_ID, 1L, dsA.getModules(), AMQP_URI, TEST_TOKEN); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); @@ -143,7 +148,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit Mockito.when(rabbitTemplate.convertSendAndReceive(any())).thenReturn(receivedList); final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent( - 1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("vHost", "mytest")); + 1L, TENANT, CONTROLLER_ID, 1L, dsA.getModules(), AMQP_URI, TEST_TOKEN); amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent); final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress()); final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage); @@ -162,7 +167,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit @Description("Verfies that send cancel event works") public void testSendCancelRequest() { final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent = new CancelTargetAssignmentEvent( - 1L, "default", CONTROLLER_ID, 1l, IpUtil.createAmqpUri("vHost", "mytest")); + 1L, TENANT, CONTROLLER_ID, 1L, AMQP_URI); amqpMessageDispatcherService .targetCancelAssignmentToDistributionSet(cancelTargetAssignmentDistributionSetEvent); final Message sendMessage = createArgumentCapture(cancelTargetAssignmentDistributionSetEvent.getTargetAdress()); @@ -187,13 +192,12 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit downloadAndUpdateRequest.getActionId(), Long.valueOf(1)); assertEquals("The topic of the event shuold contain DOWNLOAD_AND_INSTALL", EventTopic.DOWNLOAD_AND_INSTALL, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC)); + assertEquals("Security token of target", downloadAndUpdateRequest.getTargetToken(), TEST_TOKEN); + return downloadAndUpdateRequest; } - /** - * @param sendMessage - */ private void assertEventMessage(final Message sendMessage) { assertNotNull("The message should not be null", sendMessage); 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 19a7be3bc..18ee0bde4 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 @@ -339,14 +339,14 @@ public class AmqpMessageHandlerServiceTest { @Test @Description("Tests TODO") - public void lookupNextUpdateActionAfterFinished() throws IllegalArgumentException, IllegalAccessException { + public void lookupNextUpdateActionAfterFinished() throws IllegalAccessException { // Mock final Action action = createActionWithTarget(22L, Status.FINISHED); when(controllerManagementMock.findActionWithDetails(Matchers.any())).thenReturn(action); when(controllerManagementMock.addUpdateActionStatus(Matchers.any(), Matchers.any())).thenReturn(action); // for the test the same action can be used - final List actionList = new ArrayList(); + final List actionList = new ArrayList<>(); actionList.add(action); when(controllerManagementMock.findActionByTargetAndActive(Matchers.any())).thenReturn(actionList); @@ -372,6 +372,8 @@ public class AmqpMessageHandlerServiceTest { assertThat(targetAssignDistributionSetEvent.getControllerId()).as("event has wrong controller id") .isEqualTo("target1"); + assertThat(targetAssignDistributionSetEvent.getTargetToken()).as("targetoken not filled correctly") + .isEqualTo(action.getTarget().getSecurityToken()); assertThat(targetAssignDistributionSetEvent.getActionId()).as("event has wrong action id").isEqualTo(22L); assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).as("event has wrong sofware modules") .isEqualTo(softwareModuleList); @@ -411,8 +413,7 @@ public class AmqpMessageHandlerServiceTest { return softwareModuleList; } - private Action createActionWithTarget(final Long targetId, final Status status) - throws IllegalArgumentException, IllegalAccessException { + private Action createActionWithTarget(final Long targetId, final Status status) throws IllegalAccessException { // is needed for the creation of targets initalizeSecurityTokenGenerator(); diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java index 4344c5416..f34bab6dd 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java @@ -19,15 +19,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * JSON representation of download and update request. * - * - * - * */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class DownloadAndUpdateRequest { @JsonProperty private Long actionId; + + @JsonProperty + private String targetToken; + @JsonProperty private final List softwareModules = new LinkedList<>(); @@ -39,6 +40,14 @@ public class DownloadAndUpdateRequest { this.actionId = correlator; } + public String getTargetToken() { + return targetToken; + } + + public void setTargetToken(final String targetToken) { + this.targetToken = targetToken; + } + public List getSoftwareModules() { return softwareModules; } diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java index b286ac6ea..68b3f1289 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/eventbus/event/TargetAssignDistributionSetEvent.java @@ -16,8 +16,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; /** * Event that gets sent when a distribution set gets assigned to a target. * - * - * */ public class TargetAssignDistributionSetEvent extends AbstractEvent { @@ -25,6 +23,7 @@ public class TargetAssignDistributionSetEvent extends AbstractEvent { private final String controllerId; private final Long actionId; private final URI targetAdress; + private final String targetToken; /** * Creates a new {@link TargetAssignDistributionSetEvent}. @@ -41,14 +40,18 @@ public class TargetAssignDistributionSetEvent extends AbstractEvent { * the software modules which have been assigned to the target * @param targetAdress * the targetAdress of the target + * @param targetToken + * the authentication token of the target */ public TargetAssignDistributionSetEvent(final long revision, final String tenant, final String controllerId, - final Long actionId, final Collection softwareModules, final URI targetAdress) { + final Long actionId, final Collection softwareModules, final URI targetAdress, + final String targetToken) { super(revision, tenant); this.controllerId = controllerId; this.actionId = actionId; this.softwareModules = softwareModules; this.targetAdress = targetAdress; + this.targetToken = targetToken; } /** @@ -77,4 +80,7 @@ public class TargetAssignDistributionSetEvent extends AbstractEvent { return targetAdress; } + public String getTargetToken() { + return targetToken; + } } 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 77f71bebf..e64eeab13 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 @@ -389,8 +389,8 @@ public class DeploymentManagement { softwareModules)); } - private Action createTargetAction(final Map targetsWithActionMap, final Target target, - final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) { + 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()); @@ -421,13 +421,14 @@ public class DeploymentManagement { afterCommit.afterCommit(() -> { eventBus.post(new TargetInfoUpdateEvent(target.getTargetInfo())); eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(), - target.getControllerId(), actionId, softwareModules, target.getTargetInfo().getAddress())); + target.getControllerId(), actionId, softwareModules, target.getTargetInfo().getAddress(), + target.getSecurityToken())); }); } /** * Removes {@link UpdateAction}s that are no longer necessary and sends - * cancelations to the controller. + * cancellations to the controller. * * @param myTarget * to override {@link UpdateAction}s From 85263e475db3b40f0f63b48e25958f1b9ebaba0d Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 09:48:55 +0200 Subject: [PATCH 256/344] use correct term for token. Similar to mgmt API. Signed-off-by: Kai Zimmermann --- .../hawkbit/amqp/AmqpMessageDispatcherService.java | 2 +- .../hawkbit/amqp/AmqpMessageDispatcherServiceTest.java | 2 +- .../dmf/json/model/DownloadAndUpdateRequest.java | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) 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 02c72228c..32bcb02a5 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 @@ -82,7 +82,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { .getSoftwareModules(); final DownloadAndUpdateRequest downloadAndUpdateRequest = new DownloadAndUpdateRequest(); downloadAndUpdateRequest.setActionId(targetAssignDistributionSetEvent.getActionId()); - downloadAndUpdateRequest.setTargetToken(targetAssignDistributionSetEvent.getTargetToken()); + downloadAndUpdateRequest.setTargetSecurityToken(targetAssignDistributionSetEvent.getTargetToken()); for (final org.eclipse.hawkbit.repository.model.SoftwareModule softwareModule : modules) { final SoftwareModule amqpSoftwareModule = convertToAmqpSoftwareModule(controllerId, softwareModule); 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 ec6ed05b0..4e0852ff3 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 @@ -192,7 +192,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit downloadAndUpdateRequest.getActionId(), Long.valueOf(1)); assertEquals("The topic of the event shuold contain DOWNLOAD_AND_INSTALL", EventTopic.DOWNLOAD_AND_INSTALL, sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC)); - assertEquals("Security token of target", downloadAndUpdateRequest.getTargetToken(), TEST_TOKEN); + assertEquals("Security token of target", downloadAndUpdateRequest.getTargetSecurityToken(), TEST_TOKEN); return downloadAndUpdateRequest; diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java index f34bab6dd..88cb80975 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java @@ -27,7 +27,7 @@ public class DownloadAndUpdateRequest { private Long actionId; @JsonProperty - private String targetToken; + private String targetSecurityToken; @JsonProperty private final List softwareModules = new LinkedList<>(); @@ -40,12 +40,12 @@ public class DownloadAndUpdateRequest { this.actionId = correlator; } - public String getTargetToken() { - return targetToken; + public String getTargetSecurityToken() { + return targetSecurityToken; } - public void setTargetToken(final String targetToken) { - this.targetToken = targetToken; + public void setTargetSecurityToken(final String targetSecurityToken) { + this.targetSecurityToken = targetSecurityToken; } public List getSoftwareModules() { From f33c8c05e2c33ba07b870014e6601bd60afc3dae Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 3 May 2016 12:52:53 +0200 Subject: [PATCH 257/344] 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 258/344] 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 259/344] 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 260/344] 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 261/344] 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 262/344] 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 263/344] 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 264/344] 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 a4832c5bcd979c54759abb68fdc78438a737921a Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 3 May 2016 14:48:09 +0200 Subject: [PATCH 265/344] Style improvement Signed-off-by: Melanie Retter --- .../themes/hawkbit/customstyles/target-filter-query.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-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 index b29483da1..33ae2dd85 100644 --- a/hawkbit-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 @@ -28,12 +28,12 @@ .error-icon{ color:$success-icon-color !important; - padding:2px; + padding-left:2px !important; } .success-icon{ color:$error-icon-color !important; - padding:2px; + padding-left:2px !important; } .on-focus-no-border:focus::after{ From 2177271a49e6cdcee6f692e9048bb26e430f9e79 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 15:44:03 +0200 Subject: [PATCH 266/344] Added save (auto) close. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/artifact/repository/ArtifactStore.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 6981834b4..94b093cb3 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 @@ -200,9 +200,9 @@ public class ArtifactStore implements ArtifactRepository { String sha1Hash; // compute digest final MessageDigest md = MessageDigest.getInstance("SHA-1"); - final DigestOutputStream dos = new DigestOutputStream(os, md); - ByteStreams.copy(stream, dos); - dos.close(); + try (final DigestOutputStream dos = new DigestOutputStream(os, md)) { + ByteStreams.copy(stream, dos); + } sha1Hash = BaseEncoding.base16().lowerCase().encode(md.digest()); if (providedSHA1Sum != null && !providedSHA1Sum.equalsIgnoreCase(sha1Hash)) { throw new HashNotMatchException( From 7c4351faa55b18e919b256dba4368e82a6adaad6 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 15:44:46 +0200 Subject: [PATCH 267/344] Fixed wrong handling of multi line message status. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 da7c10800..f26d7f3f7 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 @@ -337,9 +337,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService { final Action action = checkActionExist(message, actionUpdateStatus); final ActionStatus actionStatus = new ActionStatus(); - final List messageText = actionUpdateStatus.getMessage(); - final String messageString = String.join(", ", messageText); - actionStatus.addMessage(messageString); + actionUpdateStatus.getMessage().forEach(actionStatus::addMessage); + actionStatus.setAction(action); actionStatus.setOccurredAt(System.currentTimeMillis()); From f32f612e839ad6fa3feccf604e673e8b627f6c32 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 15:56:16 +0200 Subject: [PATCH 268/344] Improved readability of action status messages that are created by the update server itself. Signed-off-by: Kai Zimmermann --- .../repository/ControllerManagement.java | 9 ++++++--- .../controller/ArtifactStoreController.java | 6 ++++-- .../hawkbit/controller/RootController.java | 17 ++++++++++------- 3 files changed, 20 insertions(+), 12 deletions(-) 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 dc097a7e3..58ae2ad97 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 @@ -63,6 +63,8 @@ public class ControllerManagement { private static final Logger LOG = LoggerFactory.getLogger(ControllerManagement.class); private static final Logger LOG_DOS = LoggerFactory.getLogger("server-security.dos"); + public static final String SERVER_MESSAGE_PREFIX = "Update Server: "; + @Autowired private EntityManager entityManager; @@ -341,13 +343,14 @@ public class ControllerManagement { break; case CANCELED: case FINISHED: - // in case of successful cancelation we also report the success at + // in case of successful cancellation we also report the success at // the canceled action itself. - actionStatus.addMessage("Cancelation completion is finished sucessfully."); + actionStatus.addMessage( + ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation completion is finished sucessfully."); deploymentManagement.successCancellation(action); break; case RETRIEVED: - actionStatus.addMessage("Cancelation request retrieved"); + actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Cancellation request retrieved."); break; default: } 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..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 @@ -143,9 +143,11 @@ public class ArtifactStoreController { actionStatus.setStatus(Status.DOWNLOAD); if (range != null) { - actionStatus.addMessage("It is a partial download request: " + range); + actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + + " of: " + request.getRequestURI()); } else { - actionStatus.addMessage("Target downloads"); + actionStatus.addMessage( + ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } 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 f704acd5e..000e1e2e5 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 @@ -216,9 +216,11 @@ public class RootController { statusMessage.setStatus(Status.DOWNLOAD); if (range != null) { - statusMessage.addMessage("It is a partial download request: " + range); + statusMessage.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads range " + range + + " of: " + request.getRequestURI()); } else { - statusMessage.addMessage("Controller downloads"); + statusMessage.addMessage( + ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); } controllerManagement.addActionStatusMessage(statusMessage); return action; @@ -388,13 +390,13 @@ public class RootController { LOG.debug("Controller confirmed cancel (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.CANCELED); - actionStatus.addMessage("Controller confirmed cancelation"); + actionStatus.addMessage(ControllerManagement.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("Controller reported internal ERROR and REJECTED update."); + actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target REJECTED update."); break; case CLOSED: handleClosedUpdateStatus(feedback, targetid, actionid, actionStatus); @@ -421,7 +423,8 @@ public class RootController { LOG.debug("Controller reported intermediate status (actionid: {}, targetid: {}) as we got {} report.", actionid, targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); - actionStatus.addMessage("Controller reported: " + feedback.getStatus().getExecution()); + actionStatus.addMessage( + ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported: " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final ActionFeedback feedback, final String targetid, @@ -430,10 +433,10 @@ public class RootController { feedback.getStatus().getExecution()); if (feedback.getStatus().getResult().getFinished() == FinalResult.FAILURE) { actionStatus.setStatus(Status.ERROR); - actionStatus.addMessage("Controller reported CLOSED with ERROR!"); + actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with ERROR!"); } else { actionStatus.setStatus(Status.FINISHED); - actionStatus.addMessage("Controller reported CLOSED with OK!"); + actionStatus.addMessage(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported CLOSED with OK!"); } } From c4f368ee40a287cf9ecf80ad919c8d13a0258221 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 3 May 2016 16:11:02 +0200 Subject: [PATCH 269/344] float values - capital F Signed-off-by: Melanie Retter --- .../ui/common/detailslayout/AbstractTableDetailsLayout.java | 2 +- .../hawkbit/ui/common/table/AbstractTableHeader.java | 6 +++--- .../java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) 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 3c153cb77..f471abf33 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 @@ -157,7 +157,7 @@ public abstract class AbstractTableDetailsLayout extends nameEditLayout.addComponent(editButton); nameEditLayout.setComponentAlignment(editButton, Alignment.TOP_RIGHT); } - nameEditLayout.setExpandRatio(caption, 1.0f); + nameEditLayout.setExpandRatio(caption, 1.0F); nameEditLayout.addStyleName(SPUIStyleDefinitions.WIDGET_TITLE); addComponent(nameEditLayout); 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 0c5407316..b137594f8 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 @@ -170,8 +170,8 @@ public abstract class AbstractTableHeader extends VerticalLayout { } titleFilterIconsLayout.addComponent(maxMinIcon); titleFilterIconsLayout.setComponentAlignment(maxMinIcon, Alignment.TOP_RIGHT); - titleFilterIconsLayout.setExpandRatio(headerCaption, 0.4f); - titleFilterIconsLayout.setExpandRatio(searchField, 0.6f); + titleFilterIconsLayout.setExpandRatio(headerCaption, 0.4F); + titleFilterIconsLayout.setExpandRatio(searchField, 0.6F); addComponent(titleFilterIconsLayout); @@ -191,7 +191,7 @@ public abstract class AbstractTableHeader extends VerticalLayout { dropHintDropFilterLayout.addComponent(dropFilterLayout); dropHintDropFilterLayout.setComponentAlignment(dropFilterLayout, Alignment.TOP_CENTER); - dropHintDropFilterLayout.setExpandRatio(dropFilterLayout, 1.0f); + dropHintDropFilterLayout.setExpandRatio(dropFilterLayout, 1.0F); } addComponent(dropHintDropFilterLayout); setComponentAlignment(dropHintDropFilterLayout, Alignment.TOP_CENTER); 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 dd8c0e5f9..9d2c0d246 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 @@ -117,7 +117,7 @@ public final class DashboardMenu extends CustomComponent { menus.setComponentAlignment(links, Alignment.BOTTOM_CENTER); menus.setExpandRatio(links, 1.0f); menuContent.addComponent(menus); - menuContent.setExpandRatio(menus, 1.0f); + menuContent.setExpandRatio(menus, 1.0F); dashboardMenuLayout.addComponent(menuContent); return dashboardMenuLayout; @@ -264,7 +264,7 @@ public final class DashboardMenu extends CustomComponent { private VerticalLayout buildMenuItems() { final VerticalLayout menuItemsLayout = new VerticalLayout(); menuItemsLayout.addStyleName("valo-menuitems"); - menuItemsLayout.setHeight(100.0f, Unit.PERCENTAGE); + menuItemsLayout.setHeight(100.0F, Unit.PERCENTAGE); final List accessibleViews = getAccessibleViews(); if (accessibleViews.isEmpty()) { From 7e941cf64d9ba2c2204b751c01b62c7d431ad2f2 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 16:16:36 +0200 Subject: [PATCH 270/344] Teached simulator to download artifacts including SHA1 hash check and targetToken usage. Signed-off-by: Kai Zimmermann --- examples/hawkbit-device-simulator/pom.xml | 13 +- .../simulator/AbstractSimulatedDevice.java | 42 ++--- .../hawkbit/simulator/DDISimulatedDevice.java | 50 +++--- .../hawkbit/simulator/DMFSimulatedDevice.java | 5 +- .../simulator/DeviceSimulatorUpdater.java | 152 ++++++++++++++++-- .../simulator/NextPollTimeController.java | 18 +-- .../simulator/SimulatedDeviceFactory.java | 13 +- .../hawkbit/simulator/UpdateStatus.java | 58 +++++++ .../simulator/amqp/SpReceiverService.java | 15 +- .../simulator/amqp/SpSenderService.java | 53 +++--- .../simulator/event/ProgressUpdate.java | 2 - .../hawkbit/simulator/ui/SimulatorView.java | 98 +++++------ 12 files changed, 333 insertions(+), 186 deletions(-) create mode 100644 examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index c74eace3e..33d165584 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -1,4 +1,3 @@ - - 4.0.0 @@ -133,6 +133,15 @@ spring-boot-configuration-processor true + + org.scala-lang + scala-library + 2.10.4 + + + org.apache.httpcomponents + httpclient + 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 474acb6c4..890f43367 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 @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.simulator; +import org.eclipse.hawkbit.simulator.UpdateStatus.ResponseStatus; + /** * The bean of a simulated device which can be stored in the * {@link DeviceSimulatorRepository} or shown in the UI. @@ -22,16 +24,15 @@ public abstract class AbstractSimulatedDevice { private Status status; private double progress; private String swversion = "unknown"; - private ResponseStatus responseStatus = ResponseStatus.SUCCESSFUL; + private UpdateStatus updateStatus = new UpdateStatus(ResponseStatus.SUCCESSFUL, "Simulation complete!"); private Protocol protocol = Protocol.DMF_AMQP; + private String targetSecurityToken; private int nextPollCounterSec; /** * Enum definition of the protocol to be used for the simulated device. * - * @author Michael Hirsch - * */ public enum Protocol { /** @@ -69,24 +70,6 @@ public abstract class AbstractSimulatedDevice { ERROR; } - /** - * The status to response to the hawkbit update server if an simulated - * update process should be respond with successful or failure update. - * - * @author Michael Hirsch - * - */ - public enum ResponseStatus { - /** - * updated has been successful and response the successful update. - */ - SUCCESSFUL, - /** - * updated has been not successful and response the error update. - */ - ERROR; - } - /** * empty constructor. */ @@ -158,12 +141,12 @@ public abstract class AbstractSimulatedDevice { this.swversion = swversion; } - public ResponseStatus getResponseStatus() { - return responseStatus; + public UpdateStatus getUpdateStatus() { + return updateStatus; } - public void setResponseStatus(final ResponseStatus responseStatus) { - this.responseStatus = responseStatus; + public void setUpdateStatus(final UpdateStatus updateStatus) { + this.updateStatus = updateStatus; } public Protocol getProtocol() { @@ -177,4 +160,13 @@ public abstract class AbstractSimulatedDevice { public void setNextPollCounterSec(final int nextPollDelayInSec) { this.nextPollCounterSec = nextPollDelayInSec; } + + public String getTargetSecurityToken() { + return targetSecurityToken; + } + + public void setTargetSecurityToken(final String targetSecurityToken) { + this.targetSecurityToken = targetSecurityToken; + } + } 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 b58d3a413..26e613dd9 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 @@ -8,8 +8,6 @@ */ package org.eclipse.hawkbit.simulator; -import java.util.concurrent.ScheduledExecutorService; - import org.eclipse.hawkbit.simulator.http.ControllerResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,7 +16,7 @@ import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.PathNotFoundException; /** - * @author Michael Hirsch + * A simulated device using the DDI API of the hawkBit update server. * */ public class DDISimulatedDevice extends AbstractSimulatedDevice { @@ -26,12 +24,12 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { private static final Logger LOGGER = LoggerFactory.getLogger(DDISimulatedDevice.class); private final int pollDelaySec; - private final ScheduledExecutorService pollthreadpool; private final ControllerResource controllerResource; + private final DeviceSimulatorUpdater deviceUpdater; + private volatile boolean removed; private volatile Long currentActionId; - private final DeviceSimulatorUpdater deviceUpdater; /** * @param id @@ -42,18 +40,14 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { * the delay of the poll interval in sec * @param controllerResource * the http controller resource - * @param pollthreadpool - * the threadpool for polling endpoint * @param deviceUpdater * the service to update devices */ public DDISimulatedDevice(final String id, final String tenant, final int pollDelaySec, - final ControllerResource controllerResource, final ScheduledExecutorService pollthreadpool, - final DeviceSimulatorUpdater deviceUpdater) { + final ControllerResource controllerResource, final DeviceSimulatorUpdater deviceUpdater) { super(id, tenant, Protocol.DDI_HTTP); this.pollDelaySec = pollDelaySec; this.controllerResource = controllerResource; - this.pollthreadpool = pollthreadpool; this.deviceUpdater = deviceUpdater; setNextPollCounterSec(pollDelaySec); } @@ -76,27 +70,12 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { final String basePollJson = controllerResource.get(getTenant(), getId()); try { final String href = JsonPath.parse(basePollJson).read("_links.deploymentBase.href"); - final long actionId = Long.parseLong(href.substring(href.lastIndexOf("/") + 1, href.indexOf("?"))); + final long actionId = Long.parseLong(href.substring(href.lastIndexOf('/') + 1, href.indexOf('?'))); if (currentActionId == null) { final String deploymentJson = controllerResource.getDeployment(getTenant(), getId(), actionId); final String swVersion = JsonPath.parse(deploymentJson).read("deployment.chunks[0].version"); currentActionId = actionId; - deviceUpdater.startUpdate(getTenant(), getId(), actionId, swVersion, (device, actionId1) -> { - switch (device.getResponseStatus()) { - case SUCCESSFUL: - controllerResource.postSuccessFeedback(getTenant(), getId(), - actionId1); - break; - case ERROR: - controllerResource.postErrorFeedback(getTenant(), getId(), - actionId1); - break; - default: - throw new IllegalStateException( - "simulated device has an unknown response status + " + device.getResponseStatus()); - } - currentActionId = null; - }); + startDdiUpdate(actionId, swVersion); } } catch (final PathNotFoundException e) { // href might not be in the json response, so ignore @@ -106,4 +85,21 @@ public class DDISimulatedDevice extends AbstractSimulatedDevice { } } + + private void startDdiUpdate(final long actionId, final String swVersion) { + deviceUpdater.startUpdate(getTenant(), getId(), actionId, swVersion, null, null, (device, actionId1) -> { + switch (device.getUpdateStatus().getResponseStatus()) { + case SUCCESSFUL: + controllerResource.postSuccessFeedback(getTenant(), getId(), actionId1); + break; + case ERROR: + controllerResource.postErrorFeedback(getTenant(), getId(), actionId1); + break; + default: + throw new IllegalStateException("simulated device has an unknown response status + " + + device.getUpdateStatus().getResponseStatus()); + } + currentActionId = null; + }); + } } 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 b9fdc827c..6b79a85b8 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 @@ -9,10 +9,7 @@ package org.eclipse.hawkbit.simulator; /** - * An simulated device using the DMF API of the hawkbit update server. - * - * @author Michael Hirsch - * + * A simulated device using the DMF API of the hawkBit update server. */ public class DMFSimulatedDevice extends AbstractSimulatedDevice { 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 afc3a2569..12ff7dbd2 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 @@ -8,27 +8,52 @@ */ package org.eclipse.hawkbit.simulator; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.security.DigestOutputStream; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +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.SoftwareModule; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; +import org.eclipse.hawkbit.simulator.UpdateStatus.ResponseStatus; import org.eclipse.hawkbit.simulator.amqp.SpSenderService; import org.eclipse.hawkbit.simulator.event.InitUpdate; import org.eclipse.hawkbit.simulator.event.ProgressUpdate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.google.common.eventbus.EventBus; +import com.google.common.io.BaseEncoding; +import com.google.common.io.ByteStreams; /** - * @author Michael Hirsch + * Update simulation handler. * */ @Service public class DeviceSimulatorUpdater { + private static final Logger LOGGER = LoggerFactory.getLogger(DeviceSimulatorUpdater.class); private static final ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(4); @@ -54,14 +79,18 @@ public class DeviceSimulatorUpdater { * @param actionId * the actionId from the hawkbit update server to start the * update. - * @param swVersion + * @param modules * the software module version from the hawkbit update server + * @param swVersion + * the software version as static value in case modules is null + * @param targetSecurityToken + * the target security token for download authentication * @param callback * the callback which gets called when the simulated update * process has been finished */ public void startUpdate(final String tenant, final String id, final long actionId, final String swVersion, - final UpdaterCallback callback) { + final List modules, final String targetSecurityToken, final UpdaterCallback callback) { AbstractSimulatedDevice device = repository.get(tenant, id); // plug and play - non existing device will be auto created @@ -70,11 +99,18 @@ public class DeviceSimulatorUpdater { } device.setProgress(0.0); - device.setSwversion(swVersion); + + if (modules == null) { + device.setSwversion(swVersion); + } else { + device.setSwversion(modules.stream().map(sm -> sm.getModuleVersion()).collect(Collectors.joining(", "))); + } + device.setTargetSecurityToken(targetSecurityToken); eventbus.post(new InitUpdate(device)); - threadPool.schedule(new DeviceSimulatorUpdateThread(device, spSenderService, actionId, eventbus, callback), - 2_000, TimeUnit.MILLISECONDS); + threadPool.schedule( + new DeviceSimulatorUpdateThread(device, spSenderService, actionId, eventbus, callback, modules), 2_000, + TimeUnit.MILLISECONDS); } private static final class DeviceSimulatorUpdateThread implements Runnable { @@ -85,38 +121,130 @@ public class DeviceSimulatorUpdater { private final long actionId; private final EventBus eventbus; private final UpdaterCallback callback; + private final List modules; private DeviceSimulatorUpdateThread(final AbstractSimulatedDevice device, final SpSenderService spSenderService, - final long actionId, final EventBus eventbus, final UpdaterCallback callback) { + final long actionId, final EventBus eventbus, final UpdaterCallback callback, + final List modules) { this.device = device; this.spSenderService = spSenderService; this.actionId = actionId; this.eventbus = eventbus; this.callback = callback; + this.modules = modules; } @Override public void run() { + if (device.getProgress() <= 0 && modules != null) { + device.setUpdateStatus(simulateDownloads(device.getTargetSecurityToken())); + if (device.getUpdateStatus().getResponseStatus().equals(ResponseStatus.ERROR)) { + callback.updateFinished(device, actionId); + eventbus.post(new ProgressUpdate(device)); + return; + } + } + final double newProgress = device.getProgress() + 0.2; device.setProgress(newProgress); if (newProgress < 1.0) { threadPool.schedule( - new DeviceSimulatorUpdateThread(device, spSenderService, actionId, eventbus, callback), + new DeviceSimulatorUpdateThread(device, spSenderService, actionId, eventbus, callback, modules), rndSleep.nextInt(5_000), TimeUnit.MILLISECONDS); } else { callback.updateFinished(device, actionId); } eventbus.post(new ProgressUpdate(device)); } + + private UpdateStatus simulateDownloads(final String targetToken) { + final List status = new ArrayList<>(); + + LOGGER.info("Simulate downloads for {}", device.getId()); + + modules.forEach(module -> module.getArtifacts() + .forEach(artifact -> handleArtifacts(targetToken, status, artifact))); + + final UpdateStatus result = new UpdateStatus(ResponseStatus.SUCCESSFUL); + result.getStatusMessages().add("Simulation complete!"); + status.forEach(download -> { + result.getStatusMessages().addAll(download.getStatusMessages()); + if (download.getResponseStatus().equals(ResponseStatus.ERROR)) { + result.setResponseStatus(ResponseStatus.ERROR); + } + }); + + LOGGER.info("Download simulations complete for {}", device.getId()); + + return result; + } + + private static void handleArtifacts(final String targetToken, final List status, + final Artifact artifact) { + artifact.getUrls().entrySet().forEach(entry -> { + switch (entry.getKey()) { + case HTTPS: + status.add(downloadUrl(entry.getValue(), targetToken, artifact.getHashes().getSha1())); + break; + default: + // not supported yet + break; + } + }); + } + + private static UpdateStatus downloadUrl(final String url, final String targetToken, final String sha1Hash) { + LOGGER.debug("Downloading " + url); + + long overallread = 0; + try { + final CloseableHttpClient httpclient = createHttpClientThatAcceptsAllServerCerts(); + final HttpGet request = new HttpGet(url); + request.addHeader("TargetToken", targetToken); + + final String sha1HashResult; + try (final CloseableHttpResponse response = httpclient.execute(request)) { + final File tempFile = File.createTempFile("uploadFile", null); + final MessageDigest md = MessageDigest.getInstance("SHA-1"); + + try (final DigestOutputStream dos = new DigestOutputStream(new FileOutputStream(tempFile), md)) { + overallread = ByteStreams.copy(response.getEntity().getContent(), dos); + sha1HashResult = BaseEncoding.base16().lowerCase().encode(md.digest()); + } finally { + tempFile.delete(); + } + } + + if (!sha1Hash.equals(sha1HashResult)) { + final String message = "Download " + url + " failed with SHA1 hash missmatch (Expected: " + sha1Hash + + " but got: " + sha1HashResult + ")"; + LOGGER.debug(message); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + + } catch (IOException | KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) { + LOGGER.error("Failed to download {}", url, e); + return new UpdateStatus(ResponseStatus.ERROR, "Failed to download " + url + ": " + e.getMessage()); + } + + final String message = "Downloaded " + url + " (" + overallread + " bytes)"; + LOGGER.debug(message); + return new UpdateStatus(ResponseStatus.SUCCESSFUL, message); + } + + private static CloseableHttpClient createHttpClientThatAcceptsAllServerCerts() + throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException { + final SSLContextBuilder builder = new SSLContextBuilder(); + builder.loadTrustMaterial(null, (chain, authType) -> true); + final SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build()); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } } /** * Callback interface which is called when the simulated update process has * been finished and the caller of starting the simulated update process can - * send the result to the hawkbit update server back. - * - * @author Michael Hirsch - * + * send the result to the hawkBit update server back. * */ @FunctionalInterface public interface UpdaterCallback { 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 9c78ec65a..956d6d36a 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 @@ -26,9 +26,6 @@ import com.google.common.eventbus.EventBus; /** * Poll time trigger which executes the {@link DDISimulatedDevice#poll()} every * second. - * - * @author Michael Hirsch - * */ @Component public class NextPollTimeController { @@ -59,16 +56,15 @@ public class NextPollTimeController { devices.forEach(device -> { int nextCounter = device.getNextPollCounterSec() - 1; - if (nextCounter < 0) { - if (device instanceof DDISimulatedDevice) { - try { - pollService.submit(() -> ((DDISimulatedDevice) device).poll()); - } catch (final IllegalStateException e) { - LOGGER.trace("Device could not be polled", e); - } - nextCounter = ((DDISimulatedDevice) device).getPollDelaySec(); + if (nextCounter < 0 && device instanceof DDISimulatedDevice) { + try { + pollService.submit(() -> ((DDISimulatedDevice) device).poll()); + } catch (final IllegalStateException e) { + LOGGER.trace("Device could not be polled", e); } + nextCounter = ((DDISimulatedDevice) device).getPollDelaySec(); } + device.setNextPollCounterSec(nextCounter); }); eventBus.post(new NextPollCounterUpdate(devices)); 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 d3e080806..f29aad001 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 @@ -9,8 +9,6 @@ package org.eclipse.hawkbit.simulator; import java.net.URL; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; import org.eclipse.hawkbit.simulator.http.ControllerResource; @@ -24,15 +22,9 @@ import feign.Logger; /** * The simulated device factory to create either {@link DMFSimulatedDevice} or * {@link DDISimulatedDevice#}. - * - * @author Michael Hirsch - * */ @Service public class SimulatedDeviceFactory { - - private static final ScheduledExecutorService pollThreadPool = Executors.newScheduledThreadPool(4); - @Autowired private DeviceSimulatorUpdater deviceUpdater; @@ -47,7 +39,8 @@ public class SimulatedDeviceFactory { * the protocol of the device * @return the created simulated device */ - public AbstractSimulatedDevice createSimulatedDevice(final String id, final String tenant, final Protocol protocol) { + public AbstractSimulatedDevice createSimulatedDevice(final String id, final String tenant, + final Protocol protocol) { return createSimulatedDevice(id, tenant, protocol, 30, null, null); } @@ -80,7 +73,7 @@ public class SimulatedDeviceFactory { final ControllerResource controllerResource = Feign.builder().logger(new Logger.ErrorLogger()) .requestInterceptor(new GatewayTokenInterceptor(gatewayToken)).logLevel(Logger.Level.BASIC) .target(ControllerResource.class, baseEndpoint.toString()); - return new DDISimulatedDevice(id, tenant, pollDelaySec, controllerResource, pollThreadPool, deviceUpdater); + return new DDISimulatedDevice(id, tenant, pollDelaySec, controllerResource, deviceUpdater); default: throw new IllegalArgumentException("Protocol " + protocol + " unknown"); } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java new file mode 100644 index 000000000..49e9947d7 --- /dev/null +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java @@ -0,0 +1,58 @@ +/** + * 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.simulator; + +import java.util.ArrayList; +import java.util.List; + +/** + * Update status of the simulated update. + * + */ +public class UpdateStatus { + private ResponseStatus responseStatus = ResponseStatus.SUCCESSFUL; + private final List statusMessages = new ArrayList<>(); + + public UpdateStatus(final ResponseStatus responseStatus) { + this.responseStatus = responseStatus; + } + + public UpdateStatus(final ResponseStatus responseStatus, final String message) { + this(responseStatus); + statusMessages.add(message); + } + + public ResponseStatus getResponseStatus() { + return responseStatus; + } + + public void setResponseStatus(final ResponseStatus responseStatus) { + this.responseStatus = responseStatus; + } + + public List getStatusMessages() { + return statusMessages; + } + + /** + * The status to response to the hawkBit update server if an simulated + * update process should be respond with successful or failure update. + */ + public enum ResponseStatus { + /** + * updated has been successful and response the successful update. + */ + SUCCESSFUL, + /** + * updated has been not successful and response the error update. + */ + ERROR; + } + +} \ No newline at end of file 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 f22839422..12e540fc9 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 @@ -25,6 +25,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; +import com.google.common.collect.Lists; + /** * Handle all incoming Messages from hawkBit update server. * @@ -109,7 +111,7 @@ public class SpReceiverService extends ReceiverService { final Long actionId = convertMessage(message, Long.class); final SimulatedUpdate update = new SimulatedUpdate(tenant, thingId, actionId); - spSenderService.finishUpdateProcess(update, "Simulation canceled"); + spSenderService.finishUpdateProcess(update, Lists.newArrayList("Simulation canceled")); } private void handleUpdateProcess(final Message message, final String thingId) { @@ -120,19 +122,20 @@ public class SpReceiverService extends ReceiverService { final DownloadAndUpdateRequest downloadAndUpdateRequest = convertMessage(message, DownloadAndUpdateRequest.class); final Long actionId = downloadAndUpdateRequest.getActionId(); + final String targetSecurityToken = downloadAndUpdateRequest.getTargetSecurityToken(); - deviceUpdater.startUpdate(tenant, thingId, actionId, - downloadAndUpdateRequest.getSoftwareModules().get(0).getModuleVersion(), (device, actionId1) -> { - switch (device.getResponseStatus()) { + deviceUpdater.startUpdate(tenant, thingId, actionId, null, downloadAndUpdateRequest.getSoftwareModules(), + targetSecurityToken, (device, actionId1) -> { + switch (device.getUpdateStatus().getResponseStatus()) { case SUCCESSFUL: spSenderService.finishUpdateProcess( new SimulatedUpdate(device.getTenant(), device.getId(), actionId1), - "Simulation complete!"); + device.getUpdateStatus().getStatusMessages()); break; case ERROR: spSenderService.finishUpdateProcessWithError( new SimulatedUpdate(device.getTenant(), device.getId(), actionId1), - "Simulation complete with error!"); + device.getUpdateStatus().getStatusMessages()); break; default: break; diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpSenderService.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpSenderService.java index 2358bf013..1ced8c2fd 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpSenderService.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/amqp/SpSenderService.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.simulator.amqp; +import java.util.List; import java.util.Map; import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; @@ -23,13 +24,9 @@ import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; /** - * Sender service to send message to SP. - * - * - * + * Sender service to send messages to update server. */ @Service public class SpSenderService extends SenderService { @@ -59,8 +56,9 @@ public class SpSenderService extends SenderService { * @param description * a description according the update process */ - public void finishUpdateProcess(final SimulatedUpdate update, final String description) { - final Message updateResultMessage = createUpdateResultMessage(update, ActionStatus.FINISHED, description); + public void finishUpdateProcess(final SimulatedUpdate update, final List updateResultMessages) { + final Message updateResultMessage = createUpdateResultMessage(update, ActionStatus.FINISHED, + updateResultMessages); sendMessage(spExchange, updateResultMessage); } @@ -72,9 +70,9 @@ public class SpSenderService extends SenderService { * @param messageDescription * a description according the update process */ - public void finishUpdateProcessWithError(final SimulatedUpdate update, final String messageDescription) { - sendErrorgMessage(update, messageDescription); - LOGGER.debug("Update process finished with error \"{}\" reported by thing {}", messageDescription, + public void finishUpdateProcessWithError(final SimulatedUpdate update, final List updateResultMessages) { + sendErrorgMessage(update, updateResultMessages); + LOGGER.debug("Update process finished with error \"{}\" reported by thing {}", updateResultMessages, update.getThingId()); } @@ -88,8 +86,8 @@ public class SpSenderService extends SenderService { * @param actionId * the ID of the action for the error message */ - public void sendErrorMessage(final String tenant, final String messageDescription, final Long actionId) { - final Message message = createActionStatusMessage(tenant, ActionStatus.ERROR, messageDescription, actionId); + public void sendErrorMessage(final String tenant, final List updateResultMessages, final Long actionId) { + final Message message = createActionStatusMessage(tenant, ActionStatus.ERROR, updateResultMessages, actionId); sendMessage(spExchange, message); } @@ -101,8 +99,8 @@ public class SpSenderService extends SenderService { * @param warningMessage * a warning description */ - public void sendWarningMessage(final SimulatedUpdate update, final String warningMessage) { - final Message message = createActionStatusMessage(update, warningMessage, ActionStatus.WARNING); + public void sendWarningMessage(final SimulatedUpdate update, final List updateResultMessages) { + final Message message = createActionStatusMessage(update, updateResultMessages, ActionStatus.WARNING); sendMessage(spExchange, message); } @@ -119,8 +117,8 @@ public class SpSenderService extends SenderService { * the cached value */ public void sendActionStatusMessage(final String tenant, final ActionStatus actionStatus, - final String actionMessage, final Long actionId) { - final Message message = createActionStatusMessage(tenant, actionStatus, actionMessage, actionId); + final List updateResultMessages, final Long actionId) { + final Message message = createActionStatusMessage(tenant, actionStatus, updateResultMessages, actionId); sendMessage(message); } @@ -162,11 +160,11 @@ public class SpSenderService extends SenderService { * * @param context * the current context - * @param messageDescription - * a description according the update process + * @param updateResultMessages + * a list of descriptions according the update process */ - private void sendErrorgMessage(final SimulatedUpdate update, final String messageDescription) { - final Message message = createActionStatusMessage(update, messageDescription, ActionStatus.ERROR); + private void sendErrorgMessage(final SimulatedUpdate update, final List updateResultMessages) { + final Message message = createActionStatusMessage(update, updateResultMessages, ActionStatus.ERROR); sendMessage(spExchange, message); } @@ -183,7 +181,7 @@ public class SpSenderService extends SenderService { * the cacheValue value */ private Message createActionStatusMessage(final String tenant, final ActionStatus actionStatus, - final String actionMessage, final Long actionId) { + final List updateResultMessages, final Long actionId) { final MessageProperties messageProperties = new MessageProperties(); final Map headers = messageProperties.getHeaders(); final ActionUpdateStatus actionUpdateStatus = new ActionUpdateStatus(); @@ -192,15 +190,14 @@ public class SpSenderService extends SenderService { headers.put(MessageHeaderKey.TENANT, tenant); headers.put(MessageHeaderKey.TOPIC, EventTopic.UPDATE_ACTION_STATUS.name()); headers.put(MessageHeaderKey.CONTENT_TYPE, MessageProperties.CONTENT_TYPE_JSON); - if (!StringUtils.isEmpty(actionMessage)) { - actionUpdateStatus.getMessage().add(actionMessage); - } + actionUpdateStatus.getMessage().addAll(updateResultMessages); + actionUpdateStatus.setActionId(actionId); return convertMessage(actionUpdateStatus, messageProperties); } private Message createUpdateResultMessage(final SimulatedUpdate cacheValue, final ActionStatus actionStatus, - final String updateResultMessage) { + final List updateResultMessages) { final MessageProperties messageProperties = new MessageProperties(); final Map headers = messageProperties.getHeaders(); final ActionUpdateStatus actionUpdateStatus = new ActionUpdateStatus(); @@ -209,14 +206,14 @@ public class SpSenderService extends SenderService { headers.put(MessageHeaderKey.TENANT, cacheValue.getTenant()); headers.put(MessageHeaderKey.TOPIC, EventTopic.UPDATE_ACTION_STATUS.name()); headers.put(MessageHeaderKey.CONTENT_TYPE, MessageProperties.CONTENT_TYPE_JSON); - actionUpdateStatus.getMessage().add(updateResultMessage); + actionUpdateStatus.getMessage().addAll(updateResultMessages); actionUpdateStatus.setActionId(cacheValue.getActionId()); return convertMessage(actionUpdateStatus, messageProperties); } - private Message createActionStatusMessage(final SimulatedUpdate update, final String messageDescription, + private Message createActionStatusMessage(final SimulatedUpdate update, final List updateResultMessages, final ActionStatus status) { - return createActionStatusMessage(update.getTenant(), status, messageDescription, update.getActionId()); + return createActionStatusMessage(update.getTenant(), status, updateResultMessages, update.getActionId()); } } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/ProgressUpdate.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/ProgressUpdate.java index 3e34a0fa1..6c18e61ac 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/ProgressUpdate.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/event/ProgressUpdate.java @@ -13,8 +13,6 @@ import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice; /** * Event definition object which is published if the simulated device updated * its update progress. - * - * @author Michael Hirsch * */ public class ProgressUpdate { 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 28ad0eaa9..455702501 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,21 +8,19 @@ */ package org.eclipse.hawkbit.simulator.ui; -import java.net.URL; import java.util.List; import java.util.Locale; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Protocol; -import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.ResponseStatus; import org.eclipse.hawkbit.simulator.AbstractSimulatedDevice.Status; import org.eclipse.hawkbit.simulator.DeviceSimulatorRepository; import org.eclipse.hawkbit.simulator.SimulatedDeviceFactory; +import org.eclipse.hawkbit.simulator.UpdateStatus.ResponseStatus; import org.eclipse.hawkbit.simulator.amqp.SpSenderService; import org.eclipse.hawkbit.simulator.event.InitUpdate; import org.eclipse.hawkbit.simulator.event.NextPollCounterUpdate; import org.eclipse.hawkbit.simulator.event.ProgressUpdate; -import org.eclipse.hawkbit.simulator.ui.GenerateDialog.GenerateDialogCallback; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.Lists; @@ -52,8 +50,6 @@ import com.vaadin.ui.renderers.ProgressBarRenderer; * Vaadin view which allows to generate devices through the DMF API and show the * current simulated devices in a grid with their current status and update * progress. - * - * @author Michael Hirsch * */ @SpringView(name = "") @@ -153,18 +149,12 @@ public class SimulatorView extends VerticalLayout implements View { @Subscribe public void pollCounterUpdate(final NextPollCounterUpdate update) { final List devices = update.getDevices(); - this.getUI().access(new Runnable() { - - @Override - public void run() { - devices.forEach(device -> { - final BeanItem item = beanContainer.getItem(device.getId()); - if (item != null) { - item.getItemProperty("nextPollCounterSec").setValue(device.getNextPollCounterSec()); - } - }); + this.getUI().access(() -> devices.forEach(device -> { + final BeanItem item = beanContainer.getItem(device.getId()); + if (item != null) { + item.getItemProperty("nextPollCounterSec").setValue(device.getNextPollCounterSec()); } - }); + })); } /** @@ -176,18 +166,14 @@ public class SimulatorView extends VerticalLayout implements View { @Subscribe public void initUpdate(final InitUpdate update) { final AbstractSimulatedDevice device = update.getDevice(); - this.getUI().access(new Runnable() { - - @Override - public void run() { - final BeanItem item = beanContainer.getItem(device.getId()); - if (item != null) { - item.getItemProperty("progress").setValue(device.getProgress()); - item.getItemProperty("status").setValue(Status.PEDNING); - item.getItemProperty("swversion").setValue(device.getSwversion()); - } - + this.getUI().access(() -> { + final BeanItem item = beanContainer.getItem(device.getId()); + if (item != null) { + item.getItemProperty("progress").setValue(device.getProgress()); + item.getItemProperty("status").setValue(Status.PEDNING); + item.getItemProperty("swversion").setValue(device.getSwversion()); } + }); } @@ -200,29 +186,26 @@ public class SimulatorView extends VerticalLayout implements View { @Subscribe public void progessUpdate(final ProgressUpdate update) { final AbstractSimulatedDevice device = update.getDevice(); - this.getUI().access(new Runnable() { - @Override - public void run() { - final BeanItem item = beanContainer.getItem(device.getId()); - if (item != null) { - item.getItemProperty("progress").setValue(device.getProgress()); - if (device.getProgress() >= 1) { - switch (device.getResponseStatus()) { - case SUCCESSFUL: - item.getItemProperty("status").setValue(Status.FINISH); - break; - case ERROR: - item.getItemProperty("status").setValue(Status.ERROR); - break; - default: - item.getItemProperty("status").setValue(Status.UNKNWON); - } - } else { - item.getItemProperty("status").setValue(Status.PEDNING); + this.getUI().access(() -> { + final BeanItem item = beanContainer.getItem(device.getId()); + if (item != null) { + item.getItemProperty("progress").setValue(device.getProgress()); + if (device.getProgress() >= 1) { + switch (device.getUpdateStatus().getResponseStatus()) { + case SUCCESSFUL: + item.getItemProperty("status").setValue(Status.FINISH); + break; + case ERROR: + item.getItemProperty("status").setValue(Status.ERROR); + break; + default: + item.getItemProperty("status").setValue(Status.UNKNWON); } + } else { + item.getItemProperty("status").setValue(Status.PEDNING); } - } + }); } @@ -246,18 +229,15 @@ public class SimulatorView extends VerticalLayout implements View { } private void openGenerateDialog() { - UI.getCurrent().addWindow(new GenerateDialog(new GenerateDialogCallback() { - @Override - public void okButton(final String namePrefix, final String tenant, final int amount, final int pollDelay, - final URL basePollUrl, final String gatewayToken, final Protocol protocol) { - for (int index = 0; index < amount; index++) { - final String deviceId = namePrefix + index; - beanContainer.addBean(repository.add(deviceFactory.createSimulatedDevice(deviceId, - tenant.toLowerCase(), protocol, pollDelay, basePollUrl, gatewayToken))); - spSenderService.createOrUpdateThing(tenant, deviceId); - } - } - })); + UI.getCurrent().addWindow( + new GenerateDialog((namePrefix, tenant, amount, pollDelay, basePollUrl, gatewayToken, protocol) -> { + for (int index = 0; index < amount; index++) { + final String deviceId = namePrefix + index; + beanContainer.addBean(repository.add(deviceFactory.createSimulatedDevice(deviceId, + tenant.toLowerCase(), protocol, pollDelay, basePollUrl, gatewayToken))); + spSenderService.createOrUpdateThing(tenant, deviceId); + } + })); } private Converter createProtocolConverter() { From 16350c5e15395960f884081e70db4e94c8400920 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 3 May 2016 18:34:16 +0200 Subject: [PATCH 271/344] Made URL generator configurable. Signed-off-by: Kai Zimmermann --- .../simulator/DeviceSimulatorUpdater.java | 1 + .../application-cloudsandbox.properties | 4 ++ .../src/main/resources/application.properties | 15 ++++-- .../hawkbit/api/ArtifactUrlHandler.java | 8 +++- .../api/ArtifactUrlHandlerProperties.java | 48 +++++++++++++++++++ .../api/PropertyBasedArtifactUrlHandler.java | 11 +++++ .../amqp/AmqpMessageDispatcherService.java | 28 +++++++---- .../hawkbit/dmf/json/model/ArtifactHash.java | 4 -- .../eclipse/hawkbit/TestConfiguration.java | 2 +- .../controller/DataConversionHelper.java | 38 ++++++++------- 10 files changed, 122 insertions(+), 37 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 12ff7dbd2..3d33b61f8 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 @@ -183,6 +183,7 @@ public class DeviceSimulatorUpdater { final Artifact artifact) { artifact.getUrls().entrySet().forEach(entry -> { switch (entry.getKey()) { + case HTTP: case HTTPS: status.add(downloadUrl(entry.getValue(), targetToken, artifact.getHashes().getSha1())); break; diff --git a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties index ecf71da41..b740c2959 100644 --- a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties +++ b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties @@ -8,3 +8,7 @@ # vaadin.servlet.productionMode=true + +hawkbit.artifact.url.coap.enabled=false +hawkbit.artifact.url.http.enabled=false +hawkbit.artifact.url.https.enabled=true diff --git a/examples/hawkbit-example-app/src/main/resources/application.properties b/examples/hawkbit-example-app/src/main/resources/application.properties index 64661d2ec..6e05b6b5a 100644 --- a/examples/hawkbit-example-app/src/main/resources/application.properties +++ b/examples/hawkbit-example-app/src/main/resources/application.properties @@ -7,15 +7,22 @@ # http://www.eclipse.org/legal/epl-v10.html # +# DDI authentication configuration hawkbit.server.ddi.security.authentication.anonymous.enabled=true -hawkbit.server.ddi.security.authentication.targettoken.enabled=false -hawkbit.server.ddi.security.authentication.gatewaytoken.enabled=false +hawkbit.server.ddi.security.authentication.targettoken.enabled=true +hawkbit.server.ddi.security.authentication.gatewaytoken.enabled=true -spring.profiles.active=amqp +# Download URL generation config +hawkbit.artifact.url.coap.enabled=false +hawkbit.artifact.url.http.enabled=true +hawkbit.artifact.url.http.port=8080 +hawkbit.artifact.url.https.enabled=false +## Vaadin configuration vaadin.servlet.productionMode=false -## Configuration for RabbitMQ integration +## Configuration for DMF/RabbitMQ integration +spring.profiles.active=amqp spring.rabbitmq.username=guest spring.rabbitmq.password=guest spring.rabbitmq.virtualHost=/ diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java index 522444961..03492122c 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/api/ArtifactUrlHandler.java @@ -13,7 +13,6 @@ package org.eclipse.hawkbit.api; * URLs to specific artifacts. * */ -@FunctionalInterface public interface ArtifactUrlHandler { /** @@ -34,4 +33,11 @@ public interface ArtifactUrlHandler { */ String getUrl(String controllerId, final Long softwareModuleId, final String filename, final String sha1Hash, final UrlProtocol protocol); + + /** + * @param protocol + * to check support for + * @return true of the handler supports given protocol. + */ + boolean protocolSupported(UrlProtocol protocol); } 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..50f3f4cad 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 @@ -78,6 +78,12 @@ public class ArtifactUrlHandlerProperties { * @return the pattern to build the URL. */ String getPattern(); + + /** + * @return true if the {@link ProtocolProperties} is + * enabled. + */ + boolean isEnabled(); } /** @@ -93,6 +99,20 @@ public class ArtifactUrlHandlerProperties { */ private String pattern = "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"; + /** + * Enables HTTP URI generation in DDI and DMF. + */ + private boolean enabled = true; + + @Override + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + @Override public String getHostname() { return hostname; @@ -143,6 +163,20 @@ public class ArtifactUrlHandlerProperties { */ private String pattern = "{protocol}://{hostname}:{port}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}"; + /** + * Enables HTTPS URI generation in DDI and DMF. + */ + private boolean enabled = true; + + @Override + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + @Override public String getHostname() { return hostname; @@ -193,6 +227,20 @@ public class ArtifactUrlHandlerProperties { */ private String pattern = "{protocol}://{ip}:{port}/fw/{tenant}/{targetId}/sha1/{artifactSHA1}"; + /** + * Enables CoAP URI generation in DMF. + */ + private boolean enabled = true; + + @Override + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + @Override public String getHostname() { return hostname; 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 174086613..0072f2fbd 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 @@ -84,4 +84,15 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler { return replaceMap; } + @Override + public boolean protocolSupported(final UrlProtocol protocol) { + final String protocolString = protocol.name().toLowerCase(); + final ProtocolProperties properties = urlHandlerProperties.getProperties(protocolString); + if (properties == null || properties.getPattern() == null) { + return false; + } + + return properties.isEnabled(); + } + } 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 32bcb02a5..dae5772e6 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 @@ -155,18 +155,26 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { private Artifact convertArtifact(final String targetId, final LocalArtifact localArtifact) { final Artifact artifact = new Artifact(); - artifact.getUrls().put(Artifact.UrlProtocol.COAP, - artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), - localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.COAP)); - artifact.getUrls().put(Artifact.UrlProtocol.HTTP, - artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), - localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.HTTP)); - artifact.getUrls().put(Artifact.UrlProtocol.HTTPS, - artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), - localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.HTTPS)); + if (artifactUrlHandler.protocolSupported(UrlProtocol.COAP)) { + artifact.getUrls().put(Artifact.UrlProtocol.COAP, + artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), + localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.COAP)); + } + + if (artifactUrlHandler.protocolSupported(UrlProtocol.HTTP)) { + artifact.getUrls().put(Artifact.UrlProtocol.HTTP, + artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), + localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.HTTP)); + } + + if (artifactUrlHandler.protocolSupported(UrlProtocol.HTTPS)) { + artifact.getUrls().put(Artifact.UrlProtocol.HTTPS, + artifactUrlHandler.getUrl(targetId, localArtifact.getSoftwareModule().getId(), + localArtifact.getFilename(), localArtifact.getSha1Hash(), UrlProtocol.HTTPS)); + } artifact.setFilename(localArtifact.getFilename()); - artifact.setHashes(new ArtifactHash(localArtifact.getSha1Hash(), null)); + artifact.setHashes(new ArtifactHash(localArtifact.getSha1Hash(), localArtifact.getMd5Hash())); artifact.setSize(localArtifact.getSize()); return artifact; } diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java index 5ddb48e4f..6f86fe4a4 100644 --- a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java +++ b/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java @@ -13,10 +13,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** * JSON representation of artifact hash. - * - * - * - * */ public class ArtifactHash { diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestConfiguration.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestConfiguration.java index 70372fac2..d96856557 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestConfiguration.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/TestConfiguration.java @@ -79,7 +79,7 @@ public class TestConfiguration implements AsyncConfigurer { } /** - * Bean for the downlod id cache. + * Bean for the download id cache. * * @return the cache */ 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..15c2592df 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 @@ -31,7 +31,6 @@ 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; import com.google.common.base.Charsets; @@ -40,10 +39,6 @@ import com.google.common.base.Charsets; * Utility class for the Controller API. */ public final class DataConversionHelper { - - @Autowired - ArtifactUrlHandler artifactUrlHandler; - // utility class, private constructor. private DataConversionHelper() { @@ -55,7 +50,6 @@ public final class DataConversionHelper { .map(module -> new Chunk(mapChunkLegacyKeys(module.getType().getKey()), module.getVersion(), module.getName(), createArtifacts(targetid, module, artifactUrlHandler))) .collect(Collectors.toList()); - } private static String mapChunkLegacyKeys(final String key) { @@ -76,29 +70,39 @@ public final class DataConversionHelper { * of the target * @param module * the software module + * * @return a list of artifacts or a empty list. Cannot be . */ public static List createArtifacts(final String targetid, final org.eclipse.hawkbit.repository.model.SoftwareModule module, final ArtifactUrlHandler artifactUrlHandler) { final List files = new ArrayList<>(); - module.getLocalArtifacts().forEach(artifact -> { - final Artifact file = new Artifact(); - file.setHashes(new ArtifactHash(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 Artifact createArtifact(final String targetid, final ArtifactUrlHandler artifactUrlHandler, + final LocalArtifact artifact) { + final Artifact file = new Artifact(); + file.setHashes(new ArtifactHash(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 + ControllerConstants.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 + ControllerConstants.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")); - - files.add(file); - }); - return files; + } + return file; } static ControllerBase fromTarget(final Target target, final List actions, From ffece302de197fa587a0932e1e35169c5433da26 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 08:28:11 +0200 Subject: [PATCH 272/344] https config for cloud. Signed-off-by: Kai Zimmermann --- .../src/main/resources/application-cloudsandbox.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties index b740c2959..a0cad4e9b 100644 --- a/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties +++ b/examples/hawkbit-example-app/src/main/resources/application-cloudsandbox.properties @@ -12,3 +12,5 @@ vaadin.servlet.productionMode=true hawkbit.artifact.url.coap.enabled=false hawkbit.artifact.url.http.enabled=false hawkbit.artifact.url.https.enabled=true +hawkbit.artifact.url.https.pattern={protocol}://{hostname}/{tenant}/controller/v1/{targetId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName} +hawkbit.artifact.url.https.hostname=hawkbit.eu-gb.mybluemix.net \ No newline at end of file From 882c689a51c13e032676a1912fe97fa9e707f919 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 12:13:26 +0200 Subject: [PATCH 273/344] Migrated sonar false positives from qube into code. Signed-off-by: Kai Zimmermann --- .../java/org/eclipse/hawkbit/app/Start.java | 5 ++++- .../hawkbit/simulator/DeviceSimulator.java | 4 ++-- .../simulator/amqp/SpReceiverService.java | 2 ++ .../java/org/eclipse/hawkbit/app/Start.java | 4 ++++ .../builder/DistributionSetBuilder.java | 3 ++- .../builder/DistributionSetTypeBuilder.java | 3 ++- .../resource/builder/RolloutBuilder.java | 2 ++ .../builder/SoftwareModuleBuilder.java | 2 ++ .../builder/SoftwareModuleTypeBuilder.java | 2 ++ .../client/resource/builder/TagBuilder.java | 2 ++ .../resource/builder/TargetBuilder.java | 2 ++ .../repository/MongoConfiguration.java | 2 ++ ...istributedResourceBundleMessageSource.java | 5 ++--- ...ConfigurationPollingDurationValidator.java | 2 ++ .../ExceptionMappingAspectHandler.java | 2 ++ .../eventbus/EntityChangeEventListener.java | 9 ++++++-- ...ansactionCommitDefaultServiceExecutor.java | 3 +++ .../repository/DeploymentManagement.java | 3 +++ .../hawkbit/repository/SystemManagement.java | 2 ++ .../hawkbit/repository/rsql/RSQLUtility.java | 14 +++++++----- ...TenantUserPasswordAuthenticationToken.java | 6 ++--- .../org/eclipse/hawkbit/ui/UiProperties.java | 4 ++++ .../ui/artifacts/upload/UploadHandler.java | 22 ++----------------- .../FilterQueryValidation.java | 6 ++--- ...eateUpdateDistributionTagLayoutWindow.java | 10 +++++---- .../dstag/DistributionTagButtons.java | 6 +++++ .../CreateUpdateTargetTagLayout.java | 6 +++++ .../targettag/TargetTagFilterButtons.java | 6 +++++ 28 files changed, 93 insertions(+), 46 deletions(-) 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 1c4c5d32d..abf2740fa 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 @@ -22,14 +22,17 @@ import org.springframework.context.annotation.Import; @SpringBootApplication @Import({ RepositoryApplicationConfiguration.class }) @EnableHawkbitManagedSecurityConfiguration +// Exception squid:S1118 - Spring boot standard behavior +@SuppressWarnings({ "squid:S1118" }) public class Start { - /** * Main method to start the spring-boot application. * * @param args * the VM arguments. */ + // Exception squid:S2095 - Spring boot standard behavior + @SuppressWarnings({ "squid:S2095" }) public static void main(final String[] args) { SpringApplication.run(Start.class, args); } diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulator.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulator.java index 944ba1d07..370d6af62 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulator.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/DeviceSimulator.java @@ -21,8 +21,6 @@ import com.vaadin.spring.annotation.EnableVaadin; /** * The main-method to start the Spring-Boot application. * - * - * */ @SpringBootApplication @EnableVaadin @@ -46,6 +44,8 @@ public class DeviceSimulator { * @param args * the args */ + // Exception squid:S2095 - Spring boot standard behavior + @SuppressWarnings({ "squid:S2095" }) public static void main(final String[] args) { SpringApplication.run(DeviceSimulator.class, args); } 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 f22839422..b85a51b4b 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 @@ -88,6 +88,8 @@ public class SpReceiverService extends ReceiverService { if (eventHeader == null) { logAndThrowMessageError(message, "Event Topic is not set"); } + // Exception squid:S2259 - Checked before + @SuppressWarnings({ "squid:S2259" }) final EventTopic eventTopic = EventTopic.valueOf(eventHeader.toString()); switch (eventTopic) { case DOWNLOAD_AND_INSTALL: 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..b08ae50d8 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 @@ -26,6 +26,8 @@ import org.springframework.context.annotation.Import; @EnableHawkbitManagedSecurityConfiguration @EnableRestResources @EnableDirectDeviceApi +// Exception squid:S1118 - Spring boot standard behavior +@SuppressWarnings({ "squid:S1118" }) public class Start { /** @@ -34,6 +36,8 @@ public class Start { * @param args * the VM arguments. */ + // Exception squid:S2095 - Spring boot standard behavior + @SuppressWarnings({ "squid:S2095" }) public static void main(final String[] args) { SpringApplication.run(Start.class, args); } 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..01acdac72 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 @@ -18,8 +18,9 @@ import com.google.common.collect.Lists; /** * Builder pattern for building {@link DistributionSetRequestBodyPost}. */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class DistributionSetBuilder { - private String name; private String version; private String 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..ff03bb442 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 @@ -21,8 +21,9 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link DistributionSetTypeRequestBodyPost}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class DistributionSetTypeBuilder { - private String key; private String name; private final List mandatorymodules = Lists.newArrayList(); 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..e9203fc39 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 @@ -17,6 +17,8 @@ import org.eclipse.hawkbit.rest.resource.model.rollout.RolloutRestRequestBody; * Builder pattern for building {@link RolloutRestRequestBody}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class RolloutBuilder { private String name; 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..169a159d0 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 @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link SoftwareModuleRequestBodyPost}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class SoftwareModuleBuilder { private String name; 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..e27cedc72 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 @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link SoftwareModuleRequestBodyPost}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class SoftwareModuleTypeBuilder { private String key; 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..32f7c1107 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 @@ -19,6 +19,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link TagRequestBodyPut}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class TagBuilder { private String name; 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..aba1188dc 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 @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; * Builder pattern for building {@link TargetRequestBody}. * */ +// Exception squid:S1701 - builder pattern +@SuppressWarnings({ "squid:S1701" }) public class TargetBuilder { private String controllerId; diff --git a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/MongoConfiguration.java b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/MongoConfiguration.java index 02fb22725..e01c6a455 100644 --- a/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/MongoConfiguration.java +++ b/hawkbit-artifact-repository-mongo/src/main/java/org/eclipse/hawkbit/artifact/repository/MongoConfiguration.java @@ -71,6 +71,8 @@ public class MongoConfiguration extends AbstractMongoConfiguration { @Override @Bean @ConditionalOnMissingBean + // Closed by pre-destroy + @SuppressWarnings({ "squid:S2095" }) public Mongo mongo() throws UnknownHostException { final MongoClientURI uri = new MongoClientURI(properties.getUri(), createBuilderOutOfOptions(options)); diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java index 0b0847652..859bf28d6 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java @@ -22,11 +22,10 @@ import org.springframework.core.io.support.ResourcePatternResolver; * This resource bundles using specified basenames, to resource loading. This * MessageSource implementation supports more than 1 properties file with the * same name. All properties files will be merged. - * - * - * */ public class DistributedResourceBundleMessageSource extends ReloadableResourceBundleMessageSource { + // Follows our upper case convention + @SuppressWarnings({ "squid:S2387" }) private static final Logger LOGGER = LoggerFactory.getLogger(DistributedResourceBundleMessageSource.class); private static final String PROPERTIES_SUFFIX = ".properties"; private ResourceLoader resourceLoader; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationPollingDurationValidator.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationPollingDurationValidator.java index 11c9666e8..376ba8877 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationPollingDurationValidator.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationPollingDurationValidator.java @@ -39,6 +39,8 @@ public class TenantConfigurationPollingDurationValidator implements TenantConfig } @Override + // Exception squid:S1166 - Hide origin exception + @SuppressWarnings({ "squid:S1166" }) public void validate(final Object tenantConfigurationObject) { TenantConfigurationValidator.super.validate(tenantConfigurationObject); final String tenantConfigurationString = (String) tenantConfigurationObject; diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java index 3824ae80f..c3da509aa 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/aspects/ExceptionMappingAspectHandler.java @@ -90,6 +90,8 @@ public class ExceptionMappingAspectHandler implements Ordered { + " || execution( * org.eclipse.hawkbit.controller.*.*(..)) " + " || execution( * org.eclipse.hawkbit.rest.resource.*.*(..)) " + " || execution( * org.eclipse.hawkbit.service.*.*(..)) )", throwing = "ex") + // Exception squid:S00112 - Is aspectJ proxy + @SuppressWarnings({ "squid:S00112" }) public void catchAndWrapJpaExceptionsService(final Exception ex) throws Throwable { LOG.trace("exception occured", ex); Exception translatedAccessException = translateEclipseLinkExceptionIfPossible(ex); 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 0a19d2edb..7bfbd957e 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,9 +20,9 @@ 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.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetInfo; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -67,6 +67,8 @@ public class EntityChangeEventListener { * {@link ProceedingJoinPoint#proceed()} */ @Around("execution(* org.eclipse.hawkbit.repository.TargetInfoRepository.save(..))") + // Exception squid:S00112 - Is aspectJ proxy + @SuppressWarnings({ "squid:S00112" }) public Object targetCreated(final ProceedingJoinPoint joinpoint) throws Throwable { final boolean isNew = isTargetInfoNew(joinpoint.getArgs()[0]); final Object result = joinpoint.proceed(); @@ -92,6 +94,8 @@ public class EntityChangeEventListener { * {@link ProceedingJoinPoint#proceed()} */ @Around("execution(* org.eclipse.hawkbit.repository.TargetRepository.deleteByIdIn(..))") + // Exception squid:S00112 - Is aspectJ proxy + @SuppressWarnings({ "squid:S00112" }) public Object targetDeletedById(final ProceedingJoinPoint joinpoint) throws Throwable { final String currentTenant = tenantAware.getCurrentTenant(); final Object result = joinpoint.proceed(); @@ -111,8 +115,9 @@ public class EntityChangeEventListener { * in case exception happens in the * {@link ProceedingJoinPoint#proceed()} */ - @SuppressWarnings("unchecked") @Around("execution(* org.eclipse.hawkbit.repository.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(); final Object result = joinpoint.proceed(); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java index 38ad38345..0d65b291e 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/executor/AfterTransactionCommitDefaultServiceExecutor.java @@ -29,6 +29,8 @@ public class AfterTransactionCommitDefaultServiceExecutor extends TransactionSyn private static final ThreadLocal> THREAD_LOCAL_RUNNABLES = new ThreadLocal<>(); @Override + // Exception squid:S1217 - Is aspectJ proxy + @SuppressWarnings({ "squid:S1217" }) public void afterCommit() { final List afterCommitRunnables = THREAD_LOCAL_RUNNABLES.get(); LOGGER.debug("Transaction successfully committed, executing {} runnables", afterCommitRunnables.size()); @@ -60,6 +62,7 @@ public class AfterTransactionCommitDefaultServiceExecutor extends TransactionSyn } @Override + @SuppressWarnings({ "squid:S1217" }) public void afterCompletion(final int status) { final String transactionStatus = status == STATUS_COMMITTED ? "COMMITTED" : "ROLLEDBACK"; LOGGER.debug("Transaction completed after commit with status {}", transactionStatus); 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 77f71bebf..350a8f89a 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 @@ -198,6 +198,9 @@ public class DeploymentManagement { @Transactional @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) 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 be370cf2d..4a3206859 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 @@ -341,6 +341,8 @@ public class SystemManagement { */ private 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) { diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java index c2ed5f900..4edc46623 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/rsql/RSQLUtility.java @@ -66,10 +66,6 @@ import cz.jirutka.rsql.parser.ast.RSQLVisitor; *
    • name==targetId1,description==plugAndPlay,updateStatus==UNKNOWN
    • *
    • name==targetId1 or description==plugAndPlay or updateStatus==UNKNOWN
    • *
    - * - * - * - * */ public final class RSQLUtility { @@ -279,6 +275,9 @@ public final class RSQLUtility { } @Override + // Exception squid:S2095 - see + // https://jira.sonarsource.com/browse/SONARJAVA-1478 + @SuppressWarnings({ "squid:S2095" }) public List visit(final ComparisonNode node, final String param) { A fieldName = null; try { @@ -304,6 +303,9 @@ public final class RSQLUtility { return mapToPredicate(node, fieldPath, node.getArguments(), transformedValue, fieldName); } + // Exception squid:S2095 - see + // https://jira.sonarsource.com/browse/SONARJAVA-1478 + @SuppressWarnings({ "squid:S2095" }) private List getExpectedFieldList() { final List expectedFieldList = Arrays.stream(enumType.getEnumConstants()) .filter(enumField -> enumField.getSubEntityAttributes().isEmpty()).map(enumField -> { @@ -390,7 +392,9 @@ public final class RSQLUtility { } } - @SuppressWarnings({ "rawtypes", "unchecked" }) + // Exception squid:S2095 - see + // https://jira.sonarsource.com/browse/SONARJAVA-1478 + @SuppressWarnings({ "rawtypes", "unchecked", "squid:S2095" }) private Object transformEnumValue(final ComparisonNode node, final String value, final Class javaType) { final Class tmpEnumType = (Class) javaType; diff --git a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/TenantUserPasswordAuthenticationToken.java b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/TenantUserPasswordAuthenticationToken.java index 3bacfac6f..77beaa698 100644 --- a/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/TenantUserPasswordAuthenticationToken.java +++ b/hawkbit-security-core/src/main/java/org/eclipse/hawkbit/im/authentication/TenantUserPasswordAuthenticationToken.java @@ -19,12 +19,10 @@ import org.springframework.security.core.GrantedAuthority; * */ public class TenantUserPasswordAuthenticationToken extends UsernamePasswordAuthenticationToken { - - /** - * - */ private static final long serialVersionUID = 1L; + // Exception squid:S1948 - no need to be Serializable + @SuppressWarnings({ "squid:S1948" }) final Object tenant; /** diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java index da4e2d50e..cc880fca8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java @@ -37,6 +37,8 @@ public class UiProperties { /** * Demo user password. */ + // Exception squid:S2068 - Empty password + @SuppressWarnings({ "squid:S2068" }) private String password = ""; public String getPassword() { @@ -64,6 +66,7 @@ public class UiProperties { } } + /** * Links to potentially other systems (e.g. support, user management, * documentation etc.). @@ -227,6 +230,7 @@ public class UiProperties { } } + /** * Configuration of login view. * 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..77207bd50 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 @@ -37,20 +37,12 @@ import com.vaadin.ui.Upload.SucceededListener; * {@link StreamVariable} upload variants. * * The handler manages the output to the user and at the same time ensures that - * the upload does not exceed the configued max file size. - * - * - * - * - * + * the upload does not exceed the configured max file size. * */ public class UploadHandler implements StreamVariable, Receiver, SucceededListener, FailedListener, FinishedListener, ProgressListener, StartedListener { - /** - * - */ private static final long serialVersionUID = 1L; private static final Logger LOG = LoggerFactory.getLogger(UploadHandler.class); @@ -108,7 +100,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()) { @@ -343,11 +335,6 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene } } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; @@ -356,11 +343,6 @@ public class UploadHandler implements StreamVariable, Receiver, SucceededListene return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(final Object obj) { if (this == obj) { 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 d3ec6245d..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 @@ -31,10 +31,7 @@ import cz.jirutka.rsql.parser.RSQLParserException; * * Validates the target filter query. * - * - * */ - public final class FilterQueryValidation { private static final Logger LOGGER = LoggerFactory.getLogger(FilterQueryValidation.class); @@ -103,6 +100,9 @@ public final class FilterQueryValidation { * @param expectedTokens * @return */ + // Exception squid:S2095 - see + // https://jira.sonarsource.com/browse/SONARJAVA-1478 + @SuppressWarnings({ "squid:S2095" }) public static List processExpectedTokens(final List expectedTokens) { final List expectToken = new ArrayList<>(); if (expectedTokens.size() == 2 && expectedTokens.contains(9) && expectedTokens.contains(4)) { 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..4d63753fe 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 @@ -43,10 +43,6 @@ import com.vaadin.ui.themes.ValoTheme; @SpringComponent @VaadinSessionScope public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayout { - - /** - * - */ private static final long serialVersionUID = 444276149954167545L; @Autowired @@ -288,16 +284,22 @@ public class CreateUpdateDistributionTagLayoutWindow extends CreateUpdateTagLayo } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onDistributionSetTagCreatedBulkEvent(final DistributionSetTagCreatedBulkEvent event) { populateTagNameCombo(); } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onDistributionSetTagDeletedEvent(final DistributionSetTagDeletedEvent event) { populateTagNameCombo(); } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onDistributionSetTagUpdateEvent(final DistributionSetTagUpdateEvent event) { populateTagNameCombo(); } 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 57091b660..934d9c4c7 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 @@ -61,16 +61,22 @@ public class DistributionTagButtons extends AbstractFilterButtons { } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onDistributionSetTagCreatedBulkEvent(final DistributionSetTagCreatedBulkEvent event) { refreshTagTable(); } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onDistributionSetTagDeletedEvent(final DistributionSetTagDeletedEvent event) { refreshTagTable(); } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onDistributionSetTagUpdateEvent(final DistributionSetTagUpdateEvent event) { refreshTagTable(); } 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..e6e428ce3 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 @@ -85,16 +85,22 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { } @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(); } 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 4e5246703..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 @@ -267,16 +267,22 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onEvent(final TargetTagUpdateEvent event) { refreshContainer(); } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onEventTargetTagCreated(final TargetTagCreatedBulkEvent event) { refreshContainer(); } @EventBusListenerMethod(scope = EventScope.SESSION) + // Exception squid:S1172 - event not needed + @SuppressWarnings({ "squid:S1172" }) void onEventTargetDeletedEvent(final TargetTagDeletedEvent event) { refreshContainer(); } From d30eef7e6d4f9d4fb227851f7f04f274449b2b1b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 12:18:29 +0200 Subject: [PATCH 274/344] Sonar false positive added for hidden exception. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/ui/common/UserDetailsFormatter.java | 2 ++ 1 file changed, 2 insertions(+) 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 d4a733de3..8fb5a8b42 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 @@ -170,6 +170,8 @@ public final class UserDetailsFormatter { return trimmedDetail; } + // Exception squid:S1166 - exception has to be hidden + @SuppressWarnings({ "squid:S1166" }) private static UserDetails loadUserByUsername(final String username) { final UserDetailsService userDetailsService = SpringContextHelper.getBean(UserDetailsService.class); try { From 6df949bf2b050f0fc115e3c9cde1c87b99afedcf Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 12:22:19 +0200 Subject: [PATCH 275/344] Set sw version also if modules empty. Signed-off-by: Kai Zimmermann --- .../org/eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3d33b61f8..43474b9a9 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 @@ -100,7 +100,7 @@ public class DeviceSimulatorUpdater { device.setProgress(0.0); - if (modules == null) { + if (modules == null || modules.isEmpty()) { device.setSwversion(swVersion); } else { device.setSwversion(modules.stream().map(sm -> sm.getModuleVersion()).collect(Collectors.joining(", "))); From 0014dc6302b00aae52f3abbe23d806ee648af10a Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 12:22:49 +0200 Subject: [PATCH 276/344] Removed accidental addition of scala dependency. Signed-off-by: Kai Zimmermann --- examples/hawkbit-device-simulator/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/hawkbit-device-simulator/pom.xml b/examples/hawkbit-device-simulator/pom.xml index 33d165584..728fe0595 100644 --- a/examples/hawkbit-device-simulator/pom.xml +++ b/examples/hawkbit-device-simulator/pom.xml @@ -133,11 +133,6 @@ spring-boot-configuration-processor true - - org.scala-lang - scala-library - 2.10.4 - org.apache.httpcomponents httpclient From ebe24394d039cb07468f43d724b5f7b3b32e48b8 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 12:24:23 +0200 Subject: [PATCH 277/344] Fixed comment --- .../eclipse/hawkbit/DistributedResourceBundleMessageSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java index 859bf28d6..0f5301c40 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/DistributedResourceBundleMessageSource.java @@ -24,7 +24,7 @@ import org.springframework.core.io.support.ResourcePatternResolver; * same name. All properties files will be merged. */ public class DistributedResourceBundleMessageSource extends ReloadableResourceBundleMessageSource { - // Follows our upper case convention + // Exception squid:S2387 - Follows our upper case convention @SuppressWarnings({ "squid:S2387" }) private static final Logger LOGGER = LoggerFactory.getLogger(DistributedResourceBundleMessageSource.class); private static final String PROPERTIES_SUFFIX = ".properties"; From a18bd9ac219c563fcc31ca6af4f783baa1481a90 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 4 May 2016 12:50:15 +0200 Subject: [PATCH 278/344] 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 36e9746ae20c6ac1d5b35c1da08cc26ba690b718 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 4 May 2016 13:33:29 +0200 Subject: [PATCH 279/344] Improvement of breadcrumb target filter management. Signed-off-by: Melanie Retter --- .../ui/filtermanagement/CreateOrUpdateFilterHeader.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 684321a2a..ab01d0b8d 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 @@ -97,6 +97,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private Button breadcrumbButton; + private Label breadcrumbName; + private Label headerCaption; private TextField queryTextField; @@ -173,6 +175,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button oldFilterName = filterManagementUIState.getTfQuery().get().getName(); oldFilterQuery = filterManagementUIState.getTfQuery().get().getQuery(); } + breadcrumbName.setValue(nameLabel.getValue()); showValidationSuccesIcon(); titleFilterIconsLayout.addStyleName(SPUIStyleDefinitions.TARGET_FILTER_CAPTION_LAYOUT); headerCaption.setVisible(false); @@ -181,6 +184,7 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private void resetComponents() { headerCaption.setVisible(true); + breadcrumbName.setValue(headerCaption.getValue()); nameLabel.setValue(""); queryTextField.setValue(""); setInitialStatusIconStyle(validationIcon); @@ -298,8 +302,9 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button breadcrumbLayout = new HorizontalLayout(); breadcrumbLayout.addComponent(breadcrumbButton); breadcrumbLayout.addComponent(new Label(">")); - headerCaption.addStyleName("breadcrumbPaddingLeft"); - breadcrumbLayout.addComponent(headerCaption); + breadcrumbName = SPUIComponentProvider.getLabel(null, SPUILabelDefinitions.SP_WIDGET_CAPTION); + breadcrumbLayout.addComponent(breadcrumbName); + breadcrumbName.addStyleName("breadcrumbPaddingLeft"); final HorizontalLayout titleFilterLayout = new HorizontalLayout(); titleFilterLayout.setSizeFull(); From c73e4a94a07a06060d13c2fce232b0adebbc880c Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Wed, 4 May 2016 15:49:35 +0200 Subject: [PATCH 280/344] Update DashboardMenu.java float values - capital F Signed-off-by: SirWayne --- .../main/java/org/eclipse/hawkbit/ui/menu/DashboardMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 9d2c0d246..3cc0b6be5 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 @@ -115,7 +115,7 @@ public final class DashboardMenu extends CustomComponent { final VerticalLayout links = buildLinksAndVersion(); menus.addComponent(links); menus.setComponentAlignment(links, Alignment.BOTTOM_CENTER); - menus.setExpandRatio(links, 1.0f); + menus.setExpandRatio(links, 1.0F); menuContent.addComponent(menus); menuContent.setExpandRatio(menus, 1.0F); From 55c59824fc4d4a150ed6f875548c2c19f79b1bbe Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 4 May 2016 15:58:53 +0200 Subject: [PATCH 281/344] Correct a typo Signed-off-by: Melanie Retter --- .../ui/artifacts/smtype/CreateUpdateSoftwareTypeLayout.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 ecc0ad79d..341d619ea 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 @@ -553,7 +553,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C .findSoftwareModuleTypeByName(typeName.getValue()); if (createOptiongroup.getValue().equals(createTypeStr)) { if (!checkIsKeyDuplicate(typeKey.getValue()) && !checkIsDuplicate(existingType)) { - crateNewSWModuleType(); + createNewSWModuleType(); } } else { @@ -610,7 +610,7 @@ public class CreateUpdateSoftwareTypeLayout extends CustomComponent implements C /** * Create new tag. */ - private void crateNewSWModuleType() { + private void createNewSWModuleType() { int assignNumber = 0; final String colorPicked = getColorPickedString(); final String typeNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(typeName.getValue()); From 653eb2de43023ef9d41bae2b088c5381aef63883 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Wed, 4 May 2016 17:31:46 +0200 Subject: [PATCH 282/344] review pull request Signed-off-by: Melanie Retter --- .../ui/filtermanagement/CreateOrUpdateFilterHeader.java | 6 ++++-- .../hawkbit/ui/filtermanagement/FilterManagementView.java | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) 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 ab01d0b8d..17c1410d3 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,6 +68,8 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private static final long serialVersionUID = 7474232427119031474L; + private static final String breadcrumbCustomFilters = "breadcrumb.target.filter.custom.filters"; + @Autowired private I18N i18n; @@ -237,8 +239,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("breadcrumb.target.filter.custom.filters")); - createFilterViewLink.setCaption(i18n.get("breadcrumb.target.filter.custom.filters")); + createFilterViewLink.setDescription(i18n.get(breadcrumbCustomFilters)); + createFilterViewLink.setCaption(i18n.get(breadcrumbCustomFilters)); createFilterViewLink.addClickListener(value -> showCustomFiltersView()); return createFilterViewLink; 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 414dee239..ef759aa5f 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 @@ -122,11 +122,11 @@ public class FilterManagementView extends VerticalLayout implements View { tableHeaderLayout.setComponentAlignment(createNewFilterHeader, Alignment.TOP_CENTER); tableHeaderLayout.addComponent(createNewFilterTable); tableHeaderLayout.setComponentAlignment(createNewFilterTable, Alignment.TOP_CENTER); - tableHeaderLayout.setExpandRatio(createNewFilterTable, 1.0f); + tableHeaderLayout.setExpandRatio(createNewFilterTable, 1.0F); addComponent(tableHeaderLayout); setComponentAlignment(tableHeaderLayout, Alignment.TOP_CENTER); - setExpandRatio(tableHeaderLayout, 1.0f); + setExpandRatio(tableHeaderLayout, 1.0F); final HorizontalLayout targetsCountmessageLabelLayout = addTargetFilterMessageLabel(); addComponent(targetsCountmessageLabelLayout); @@ -145,7 +145,7 @@ public class FilterManagementView extends VerticalLayout implements View { tableListViewLayout.setComponentAlignment(targetFilterHeader, Alignment.TOP_CENTER); tableListViewLayout.addComponent(targetFilterTable); tableListViewLayout.setComponentAlignment(targetFilterTable, Alignment.TOP_CENTER); - tableListViewLayout.setExpandRatio(targetFilterTable, 1.0f); + tableListViewLayout.setExpandRatio(targetFilterTable, 1.0F); addComponent(tableListViewLayout); } From dc0c845793a50d9754f26fdcb2480f7af908f05e Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 18:59:42 +0200 Subject: [PATCH 283/344] Removed N+1 query that came in with the tooltip pull request. Signed-off-by: Kai Zimmermann --- .../targettable/TargetBeanQuery.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) 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 e48004d7a..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 @@ -134,21 +134,17 @@ public class TargetBeanQuery extends AbstractBeanQuery { prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); - final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); - final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); - final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); - - prxyTarget.setInstalledDistributionSet(installedDistributionSet); - prxyTarget.setAssignedDistributionSet(assignedDistributionSet); - - if (installedDistributionSet != null) { - prxyTarget.setInstalledDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - installedDistributionSet.getName(), installedDistributionSet.getVersion())); - } - if (assignedDistributionSet != null) { - prxyTarget.setAssignedDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - assignedDistributionSet.getName(), assignedDistributionSet.getVersion())); + if (pinnedDistId == null) { + prxyTarget.setInstalledDistributionSet(null); + prxyTarget.setAssignedDistributionSet(null); + } else { + final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); + final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); + prxyTarget.setInstalledDistributionSet(installedDistributionSet); + final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); + prxyTarget.setAssignedDistributionSet(assignedDistributionSet); } + prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); prxyTarget.setTargetInfo(targ.getTargetInfo()); From e2d903382144facd80760d3876ceef7fc7f760ee Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 4 May 2016 19:37:58 +0200 Subject: [PATCH 284/344] remove singleton instance wihthin TenantConfigurationManagement Signed-off-by: Michael Hirsch --- .../RepositoryApplicationConfiguration.java | 5 ++- .../TenantConfigurationManagement.java | 14 +----- .../hawkbit/repository/model/TargetInfo.java | 13 +++--- .../TenantConfigurationManagementHolder.java | 44 +++++++++++++++++++ 4 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java 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 8ef427dcf..10100eda1 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -19,6 +19,7 @@ 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.TenantAwareHolder; +import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.security.SecurityTokenGenerator; import org.eclipse.hawkbit.tenancy.TenantAware; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -54,8 +55,8 @@ public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { * directly, e.g. JPA entities. */ @Bean - public TenantConfigurationManagement tenantConfigurationManagement() { - return TenantConfigurationManagement.getInstance(); + public TenantConfigurationManagementHolder tenantConfigurationManagementHolder() { + return TenantConfigurationManagementHolder.getInstance(); } /** 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 e311cf288..760942f06 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,6 +24,7 @@ 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.Transactional; import org.springframework.validation.annotation.Validated; @@ -32,10 +33,9 @@ import org.springframework.validation.annotation.Validated; */ @Transactional(readOnly = true) @Validated +@Service public class TenantConfigurationManagement implements EnvironmentAware { - private static final TenantConfigurationManagement INSTANCE = new TenantConfigurationManagement(); - @Autowired private TenantConfigurationRepository tenantConfigurationRepository; @@ -46,16 +46,6 @@ public class TenantConfigurationManagement implements EnvironmentAware { private Environment environment; - /** - * Get Singleton instance, needed for classes which are not managed in - * Spring context - * - * @return singleton instance of TenantConfigurationManagement - */ - public static TenantConfigurationManagement getInstance() { - return INSTANCE; - } - /** * Retrieves a configuration value from the e.g. tenant overwritten * configuration values or in case the tenant does not a have a specific 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 47f52579a..e0ffa8f5f 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 @@ -38,7 +38,7 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; -import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +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; @@ -246,11 +246,12 @@ public class TargetInfo implements Persistable, Serializable { return null; } - final Duration pollTime = DurationHelper.formattedStringToDuration(TenantConfigurationManagement.getInstance() - .getConfigurationValue(TenantConfigurationKey.POLLING_TIME_INTERVAL, String.class).getValue()); - final Duration overdueTime = DurationHelper.formattedStringToDuration(TenantConfigurationManagement - .getInstance().getConfigurationValue(TenantConfigurationKey.POLLING_OVERDUE_TIME_INTERVAL, String.class) - .getValue()); + 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()); diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java new file mode 100644 index 000000000..700511db6 --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/TenantConfigurationManagementHolder.java @@ -0,0 +1,44 @@ +/** + * 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.helper; + +import org.eclipse.hawkbit.repository.TenantConfigurationManagement; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * A singleton bean which holds {@link TenantConfigurationManagement} service + * and makes it accessible to beans which are not managed by spring, e.g. JPA + * entities. + */ +public final class TenantConfigurationManagementHolder { + + private static final TenantConfigurationManagementHolder INSTANCE = new TenantConfigurationManagementHolder(); + + @Autowired + private TenantConfigurationManagement tenantConfiguration; + + private TenantConfigurationManagementHolder() { + } + + /** + * @return the singleton {@link TenantConfigurationManagementHolder} + * instance + */ + public static TenantConfigurationManagementHolder getInstance() { + return INSTANCE; + } + + /** + * @return the {@link TenantConfigurationManagement} service + */ + public TenantConfigurationManagement getTenantConfigurationManagement() { + return tenantConfiguration; + } + +} From bb0146fab65231e26191b138d2382f1b300b3a1b Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Wed, 4 May 2016 20:00:02 +0200 Subject: [PATCH 285/344] Disabled DS columns in target tables. An removed N+1 also from filter target table. Signed-off-by: Kai Zimmermann --- .../CreateOrUpdateFilterTable.java | 8 ++------ .../ui/filtermanagement/CustomTargetBeanQuery.java | 14 -------------- .../ui/management/targettable/TargetTable.java | 8 -------- 3 files changed, 2 insertions(+), 28 deletions(-) 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 6e4933d69..11121c1a5 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 @@ -8,7 +8,6 @@ */ package org.eclipse.hawkbit.ui.filtermanagement; - import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -202,10 +201,7 @@ public class CreateOrUpdateFilterTable extends Table { new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1F)); columnList.add(new TableColumn(SPUILabelDefinitions.STATUS_ICON, i18n.get("header.status"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - i18n.get("header.assigned.ds"), 0.125F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, - i18n.get("header.installed.ds"), 0.125F)); + return columnList; } @@ -258,5 +254,5 @@ public class CreateOrUpdateFilterTable extends Table { populateTableData(); eventBus.publish(this, CustomFilterUIEvent.UPDATE_TARGET_FILTER_SEARCH_ICON); } - + } 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 2cc572245..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 @@ -13,7 +13,6 @@ import java.util.List; import java.util.Map; import org.eclipse.hawkbit.repository.TargetManagement; -import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.common.UserDetailsFormatter; import org.eclipse.hawkbit.ui.components.ProxyTarget; @@ -121,20 +120,7 @@ public class CustomTargetBeanQuery extends AbstractBeanQuery { prxyTarget.setCreatedAt(targ.getCreatedAt()); prxyTarget.setCreatedByUser(UserDetailsFormatter.loadAndFormatCreatedBy(targ)); prxyTarget.setModifiedByUser(UserDetailsFormatter.loadAndFormatLastModifiedBy(targ)); - final Target target = getTargetManagement().findTargetByControllerIDWithDetails(targ.getControllerId()); - final DistributionSet installedDistributionSet = target.getTargetInfo().getInstalledDistributionSet(); - prxyTarget.setInstalledDistributionSet(installedDistributionSet); - final DistributionSet assignedDistributionSet = target.getAssignedDistributionSet(); - prxyTarget.setAssignedDistributionSet(assignedDistributionSet); - if (null != assignedDistributionSet) { - prxyTarget.setAssignedDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - assignedDistributionSet.getName(), assignedDistributionSet.getVersion())); - } - if (null != installedDistributionSet) { - prxyTarget.setInstalledDistNameVersion(HawkbitCommonUtil.getFormattedNameVersion( - installedDistributionSet.getName(), installedDistributionSet.getVersion())); - } prxyTarget.setUpdateStatus(targ.getTargetInfo().getUpdateStatus()); prxyTarget.setLastTargetQuery(targ.getTargetInfo().getLastTargetQuery()); prxyTarget.setTargetInfo(targ.getTargetInfo()); 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 6232ebcf8..450895ef7 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,9 +24,7 @@ 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.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetIdName; -import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetIdName; @@ -113,7 +111,6 @@ public class TargetTable extends AbstractTable implements private static final int PROPERTY_DEPT = 3; private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; - @Autowired private transient TargetManagement targetManagement; @@ -335,11 +332,6 @@ 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)); - }else{ - columnList.add(new TableColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - i18n.get("header.assigned.ds"), 0.1F)); - columnList.add(new TableColumn(SPUILabelDefinitions.INSTALLED_DISTRIBUTION_NAME_VER, - i18n.get("header.installed.ds"), 0.1F)); } return columnList; From d442a45b7a30fda7a55e814d2ddc86f62cf9db3c Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 6 May 2016 08:02:11 +0200 Subject: [PATCH 286/344] run getting polling configuration in system-code Signed-off-by: Michael Hirsch --- .../RepositoryApplicationConfiguration.java | 12 ++++++ .../hawkbit/repository/model/TargetInfo.java | 29 +++++++------ .../helper/SystemSecurityContextHolder.java | 41 +++++++++++++++++++ 3 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java 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 10100eda1..d5e8db96f 100644 --- a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/RepositoryApplicationConfiguration.java @@ -18,9 +18,11 @@ import org.eclipse.hawkbit.repository.model.helper.AfterTransactionCommitExecuto 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.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.orm.jpa.JpaBaseConfiguration; @@ -49,6 +51,16 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess @EnableAutoConfiguration public class RepositoryApplicationConfiguration extends JpaBaseConfiguration { + /** + * @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(); + } + /** * @return the {@link TenantConfigurationManagement} singleton bean which * make it accessible in beans which cannot access the service 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 e0ffa8f5f..00a501540 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 @@ -38,6 +38,7 @@ import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; +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; @@ -245,19 +246,21 @@ public class TargetInfo implements Persistable, Serializable { if (lastTargetQuery == null) { return null; } - - 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); + 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); + }); } /** diff --git a/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.java new file mode 100644 index 000000000..7d005e9bc --- /dev/null +++ b/hawkbit-repository/src/main/java/org/eclipse/hawkbit/repository/model/helper/SystemSecurityContextHolder.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.repository.model.helper; + +import org.eclipse.hawkbit.security.SystemSecurityContext; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * A singleton bean which holds {@link SystemSecurityContext} service and makes + * it accessible to beans which are not managed by spring, e.g. JPA entities. + */ +public final class SystemSecurityContextHolder { + + private static final SystemSecurityContextHolder INSTANCE = new SystemSecurityContextHolder(); + + @Autowired + private SystemSecurityContext systemSecurityContext; + + private SystemSecurityContextHolder() { + } + + /** + * @return the singleton {@link SystemSecurityContextHolder} instance + */ + public static SystemSecurityContextHolder getInstance() { + return INSTANCE; + } + + /** + * @return the {@link SystemSecurityContext} service + */ + public SystemSecurityContext getSystemSecurityContext() { + return systemSecurityContext; + } +} From 077e3c8d384a9c6ce56fd60b4d9efdaa34c7a69a Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 6 May 2016 08:16:12 +0200 Subject: [PATCH 287/344] add unit test for verification Signed-off-by: Michael Hirsch --- .../repository/TargetManagementTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 36fd2754b..a223c25b4 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 @@ -14,6 +14,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -29,6 +30,7 @@ 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.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; @@ -724,4 +726,20 @@ public class TargetManagementTest extends AbstractIntegrationTest { assertThat(25).as("Targets with no tag").isEqualTo(targetsListWithNoTag.size()); } + + @Test + @Description("Tests the a target can be read with only the read target permission") + public void targetCanBeReadWithOnlyReadTargetPermission() throws Exception { + final String knownTargetControllerId = "readTarget"; + controllerManagament.findOrRegisterTargetIfItDoesNotexist(knownTargetControllerId, new URI("http://127.0.0.1")); + + securityRule.runAs(WithSpringAuthorityRule.withUser("bumlux", "READ_TARGET"), () -> { + final Target findTargetByControllerID = targetManagement.findTargetByControllerID(knownTargetControllerId); + assertThat(findTargetByControllerID).isNotNull(); + assertThat(findTargetByControllerID.getTargetInfo()).isNotNull(); + assertThat(findTargetByControllerID.getTargetInfo().getPollStatus()).isNotNull(); + return null; + }); + + } } From 5220fa07ce5a06be41c1b1a211b3e5352016a2d5 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 6 May 2016 08:40:08 +0200 Subject: [PATCH 288/344] allow system code to read tenant configuration Signed-off-by: Michael Hirsch --- .../hawkbit/repository/TenantConfigurationManagement.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 760942f06..05d18908c 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 @@ -150,7 +150,8 @@ public class TenantConfigurationManagement implements EnvironmentAware { * if the property cannot be converted to the given * {@code propertyType} */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + @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()); } @@ -175,7 +176,8 @@ public class TenantConfigurationManagement implements EnvironmentAware { * if the property cannot be converted to the given * {@code propertyType} */ - @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION) + @PreAuthorize(value = SpringEvalExpressions.HAS_AUTH_TENANT_CONFIGURATION + SpringEvalExpressions.HAS_AUTH_OR + + SpringEvalExpressions.IS_SYSTEM_CODE) public T getGlobalConfigurationValue(final TenantConfigurationKey configurationKey, final Class propertyType) { From 205216f7dda581a6d3ef1788e74592bc8c07c28b Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Fri, 6 May 2016 16:08:16 +0200 Subject: [PATCH 289/344] 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 5144f78c2b26c7df1032da54eae865827b4e9a3c Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 9 May 2016 10:50:14 +0200 Subject: [PATCH 290/344] Improved code readability. Signed-off-by: Kai Zimmermann --- .../simulator/DeviceSimulatorUpdater.java | 16 ++- .../hawkbit/simulator/UpdateStatus.java | 28 ++++- .../hawkbit/simulator/ui/SimulatorView.java | 105 +++++++++++------- .../hawkbit/controller/RootController.java | 6 +- 4 files changed, 104 insertions(+), 51 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 43474b9a9..6f640ca53 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 @@ -138,7 +138,7 @@ public class DeviceSimulatorUpdater { public void run() { if (device.getProgress() <= 0 && modules != null) { device.setUpdateStatus(simulateDownloads(device.getTargetSecurityToken())); - if (device.getUpdateStatus().getResponseStatus().equals(ResponseStatus.ERROR)) { + if (isErrorResponse(device.getUpdateStatus())) { callback.updateFinished(device, actionId); eventbus.post(new ProgressUpdate(device)); return; @@ -169,7 +169,7 @@ public class DeviceSimulatorUpdater { result.getStatusMessages().add("Simulation complete!"); status.forEach(download -> { result.getStatusMessages().addAll(download.getStatusMessages()); - if (download.getResponseStatus().equals(ResponseStatus.ERROR)) { + if (isErrorResponse(download)) { result.setResponseStatus(ResponseStatus.ERROR); } }); @@ -179,6 +179,14 @@ public class DeviceSimulatorUpdater { return result; } + private boolean isErrorResponse(final UpdateStatus status) { + if (status == null) { + return false; + } + + return ResponseStatus.ERROR.equals(status.getResponseStatus()); + } + private static void handleArtifacts(final String targetToken, final List status, final Artifact artifact) { artifact.getUrls().entrySet().forEach(entry -> { @@ -195,7 +203,7 @@ public class DeviceSimulatorUpdater { } private static UpdateStatus downloadUrl(final String url, final String targetToken, final String sha1Hash) { - LOGGER.debug("Downloading " + url); + LOGGER.debug("Downloading {}", url); long overallread = 0; try { @@ -245,7 +253,7 @@ public class DeviceSimulatorUpdater { /** * Callback interface which is called when the simulated update process has * been finished and the caller of starting the simulated update process can - * send the result to the hawkBit update server back. * + * send the result back to the hawkBit update server. */ @FunctionalInterface public interface UpdaterCallback { diff --git a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java index 49e9947d7..f4e1f75a7 100644 --- a/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java +++ b/examples/hawkbit-device-simulator/src/main/java/org/eclipse/hawkbit/simulator/UpdateStatus.java @@ -16,15 +16,30 @@ import java.util.List; * */ public class UpdateStatus { - private ResponseStatus responseStatus = ResponseStatus.SUCCESSFUL; - private final List statusMessages = new ArrayList<>(); + private ResponseStatus responseStatus; + private List statusMessages; + /** + * Constructor. + * + * @param responseStatus + * of the update + */ public UpdateStatus(final ResponseStatus responseStatus) { this.responseStatus = responseStatus; } + /** + * Constructor including status message. + * + * @param responseStatus + * of the update + * @param message + * of the update status + */ public UpdateStatus(final ResponseStatus responseStatus, final String message) { this(responseStatus); + statusMessages = new ArrayList<>(); statusMessages.add(message); } @@ -37,6 +52,10 @@ public class UpdateStatus { } public List getStatusMessages() { + if (statusMessages == null) { + statusMessages = new ArrayList<>(); + } + return statusMessages; } @@ -46,11 +65,12 @@ public class UpdateStatus { */ public enum ResponseStatus { /** - * updated has been successful and response the successful update. + * Update has been successful and response the successful update. */ SUCCESSFUL, + /** - * updated has been not successful and response the error update. + * Update has been not successful and response the error update. */ ERROR; } 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 455702501..bd6ecbe8b 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 @@ -55,6 +55,22 @@ import com.vaadin.ui.renderers.ProgressBarRenderer; @SpringView(name = "") public class SimulatorView extends VerticalLayout implements View { + private static final String NEXT_POLL_COUNTER_SEC_COL = "nextPollCounterSec"; + + private static final String RESPONSE_STATUS_COL = "responseStatus"; + + private static final String PROTOCOL_COL = "protocol"; + + private static final String TENANT_COL = "tenant"; + + private static final String PROGRESS_COL = "progress"; + + private static final String SWVERSION_COL = "swversion"; + + private static final String STATUS_COL = "status"; + + private static final String ID_COL = "id"; + private static final long serialVersionUID = 1L; @Autowired @@ -75,6 +91,7 @@ public class SimulatorView extends VerticalLayout implements View { private BeanContainer beanContainer; + @SuppressWarnings("unchecked") @Override public void enter(final ViewChangeEvent event) { eventbus.register(this); @@ -87,7 +104,7 @@ public class SimulatorView extends VerticalLayout implements View { createToolbar(); beanContainer = new BeanContainer<>(AbstractSimulatedDevice.class); - beanContainer.setBeanIdProperty("id"); + beanContainer.setBeanIdProperty(ID_COL); grid.setSizeFull(); grid.setCellStyleGenerator(new CellStyleGenerator() { @@ -96,28 +113,28 @@ public class SimulatorView extends VerticalLayout implements View { @Override public String getStyle(final CellReference cellReference) { - return cellReference.getPropertyId().equals("status") ? "centeralign" : null; + return cellReference.getPropertyId().equals(STATUS_COL) ? "centeralign" : null; } }); grid.setSelectionMode(SelectionMode.NONE); grid.setContainerDataSource(beanContainer); - grid.appendHeaderRow().getCell("responseStatus").setComponent(responseComboBox); - grid.setColumnOrder("id", "status", "swversion", "progress", "tenant", "protocol", "responseStatus", - "nextPollCounterSec"); + grid.appendHeaderRow().getCell(RESPONSE_STATUS_COL).setComponent(responseComboBox); + grid.setColumnOrder(ID_COL, STATUS_COL, SWVERSION_COL, PROGRESS_COL, TENANT_COL, PROTOCOL_COL, + RESPONSE_STATUS_COL, NEXT_POLL_COUNTER_SEC_COL); // header widths - grid.getColumn("status").setMaximumWidth(80); - grid.getColumn("protocol").setMaximumWidth(180); - grid.getColumn("responseStatus").setMaximumWidth(240); - grid.getColumn("nextPollCounterSec").setMaximumWidth(210); + grid.getColumn(STATUS_COL).setMaximumWidth(80); + grid.getColumn(PROTOCOL_COL).setMaximumWidth(180); + grid.getColumn(RESPONSE_STATUS_COL).setMaximumWidth(240); + grid.getColumn(NEXT_POLL_COUNTER_SEC_COL).setMaximumWidth(210); - grid.getColumn("nextPollCounterSec").setHeaderCaption("Next Poll in (sec)"); - grid.getColumn("swversion").setHeaderCaption("SW Version"); - grid.getColumn("responseStatus").setHeaderCaption("Response Update Status"); - grid.getColumn("progress").setRenderer(new ProgressBarRenderer()); - grid.getColumn("protocol").setConverter(createProtocolConverter()); - grid.getColumn("status").setRenderer(new HtmlRenderer(), createStatusConverter()); - grid.removeColumn("tenant"); + grid.getColumn(NEXT_POLL_COUNTER_SEC_COL).setHeaderCaption("Next Poll in (sec)"); + grid.getColumn(SWVERSION_COL).setHeaderCaption("SW Version"); + grid.getColumn(RESPONSE_STATUS_COL).setHeaderCaption("Response Update Status"); + grid.getColumn(PROGRESS_COL).setRenderer(new ProgressBarRenderer()); + grid.getColumn(PROTOCOL_COL).setConverter(createProtocolConverter()); + grid.getColumn(STATUS_COL).setRenderer(new HtmlRenderer(), createStatusConverter()); + grid.removeColumn(TENANT_COL); // grid combobox responseComboBox.setItemIcon(ResponseStatus.SUCCESSFUL, FontAwesome.CHECK_CIRCLE); @@ -125,8 +142,8 @@ public class SimulatorView extends VerticalLayout implements View { responseComboBox.setNullSelectionAllowed(false); responseComboBox.setValue(ResponseStatus.SUCCESSFUL); responseComboBox.addValueChangeListener(valueChangeEvent -> { - beanContainer.getItemIds().forEach(itemId -> beanContainer.getItem(itemId).getItemProperty("responseStatus") - .setValue(valueChangeEvent.getProperty().getValue())); + beanContainer.getItemIds().forEach(itemId -> beanContainer.getItem(itemId) + .getItemProperty(RESPONSE_STATUS_COL).setValue(valueChangeEvent.getProperty().getValue())); }); // add all components @@ -137,7 +154,7 @@ public class SimulatorView extends VerticalLayout implements View { setExpandRatio(grid, 1.0F); // load beans - repository.getAll().forEach(device -> beanContainer.addBean(device)); + repository.getAll().forEach(beanContainer::addBean); } @Override @@ -146,13 +163,14 @@ public class SimulatorView extends VerticalLayout implements View { eventbus.unregister(this); } + @SuppressWarnings("unchecked") @Subscribe public void pollCounterUpdate(final NextPollCounterUpdate update) { final List devices = update.getDevices(); this.getUI().access(() -> devices.forEach(device -> { final BeanItem item = beanContainer.getItem(device.getId()); if (item != null) { - item.getItemProperty("nextPollCounterSec").setValue(device.getNextPollCounterSec()); + item.getItemProperty(NEXT_POLL_COUNTER_SEC_COL).setValue(device.getNextPollCounterSec()); } })); } @@ -163,17 +181,19 @@ public class SimulatorView extends VerticalLayout implements View { * @param update * the update event posted on the event bus */ + @SuppressWarnings("unchecked") @Subscribe public void initUpdate(final InitUpdate update) { final AbstractSimulatedDevice device = update.getDevice(); this.getUI().access(() -> { final BeanItem item = beanContainer.getItem(device.getId()); - if (item != null) { - item.getItemProperty("progress").setValue(device.getProgress()); - item.getItemProperty("status").setValue(Status.PEDNING); - item.getItemProperty("swversion").setValue(device.getSwversion()); + if (item == null) { + return; } + item.getItemProperty(PROGRESS_COL).setValue(device.getProgress()); + item.getItemProperty(STATUS_COL).setValue(Status.PEDNING); + item.getItemProperty(SWVERSION_COL).setValue(device.getSwversion()); }); } @@ -183,32 +203,37 @@ public class SimulatorView extends VerticalLayout implements View { * @param update * the update event posted on the event bus */ + @SuppressWarnings("unchecked") @Subscribe public void progessUpdate(final ProgressUpdate update) { final AbstractSimulatedDevice device = update.getDevice(); this.getUI().access(() -> { final BeanItem item = beanContainer.getItem(device.getId()); if (item != null) { - item.getItemProperty("progress").setValue(device.getProgress()); - if (device.getProgress() >= 1) { - switch (device.getUpdateStatus().getResponseStatus()) { - case SUCCESSFUL: - item.getItemProperty("status").setValue(Status.FINISH); - break; - case ERROR: - item.getItemProperty("status").setValue(Status.ERROR); - break; - default: - item.getItemProperty("status").setValue(Status.UNKNWON); - } - } else { - item.getItemProperty("status").setValue(Status.PEDNING); - } + item.getItemProperty(PROGRESS_COL).setValue(device.getProgress()); + setStatusColumn(device, item); } - }); } + @SuppressWarnings("unchecked") + private void setStatusColumn(final AbstractSimulatedDevice device, final BeanItem item) { + if (device.getProgress() >= 1) { + switch (device.getUpdateStatus().getResponseStatus()) { + case SUCCESSFUL: + item.getItemProperty(STATUS_COL).setValue(Status.FINISH); + break; + case ERROR: + item.getItemProperty(STATUS_COL).setValue(Status.ERROR); + break; + default: + item.getItemProperty(STATUS_COL).setValue(Status.UNKNWON); + } + } else { + item.getItemProperty(STATUS_COL).setValue(Status.PEDNING); + } + } + private void createToolbar() { final Button createDevicesButton = new Button("generate..."); createDevicesButton.setIcon(FontAwesome.GEARS); 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 000e1e2e5..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 @@ -220,7 +220,7 @@ public class RootController { + " of: " + request.getRequestURI()); } else { statusMessage.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads: " + request.getRequestURI()); + ControllerManagement.SERVER_MESSAGE_PREFIX + "Target downloads " + request.getRequestURI()); } controllerManagement.addActionStatusMessage(statusMessage); return action; @@ -390,7 +390,7 @@ public class RootController { 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(ControllerManagement.SERVER_MESSAGE_PREFIX + "Target confirmed cancelation."); break; case REJECTED: LOG.info("Controller reported internal error (actionid: {}, targetid: {}) as we got {} report.", actionid, @@ -424,7 +424,7 @@ public class RootController { targetid, feedback.getStatus().getExecution()); actionStatus.setStatus(Status.RUNNING); actionStatus.addMessage( - ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported: " + feedback.getStatus().getExecution()); + ControllerManagement.SERVER_MESSAGE_PREFIX + "Target reported " + feedback.getStatus().getExecution()); } private static void handleClosedUpdateStatus(final ActionFeedback feedback, final String targetid, From c2413ebd61a2ddb9525bb7b1ca43b6b0c25c1ccf Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Mon, 9 May 2016 11:23:42 +0200 Subject: [PATCH 291/344] Added tests for md5 has gen in download messages. Signed-off-by: Kai Zimmermann --- .../amqp/AmqpMessageDispatcherServiceTest.java | 17 +++++++++++++++-- .../amqp/AmqpMessageHandlerServiceTest.java | 8 +++++--- .../hawkbit/amqp/BaseAmqpServiceTest.java | 2 ++ 3 files changed, 22 insertions(+), 5 deletions(-) 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 4e0852ff3..c5cea9e05 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 @@ -8,8 +8,8 @@ */ package org.eclipse.hawkbit.amqp; +import static org.fest.assertions.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; @@ -23,6 +23,7 @@ import static org.mockito.Mockito.when; import java.net.URI; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.eclipse.hawkbit.AbstractIntegrationTestWithMongoDB; import org.eclipse.hawkbit.TestDataUtil; @@ -159,7 +160,19 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit if (!softwareModule.getModuleId().equals(module.getId())) { continue; } - assertFalse("The software module artifacts should not be empty", softwareModule.getArtifacts().isEmpty()); + assertThat(softwareModule.getArtifacts().size()).isEqualTo(module.getArtifacts().size()).isGreaterThan(0); + + module.getArtifacts().forEach(dbArtifact -> { + final Optional found = softwareModule.getArtifacts() + .stream().filter(dmfartifact -> dmfartifact.getFilename() + .equals(((LocalArtifact) dbArtifact).getFilename())) + .findFirst(); + + assertTrue("The artifact should exist in message", found.isPresent()); + assertThat(found.get().getSize()).isEqualTo(dbArtifact.getSize()); + assertThat(found.get().getHashes().getMd5()).isEqualTo(dbArtifact.getMd5Hash()); + assertThat(found.get().getHashes().getSha1()).isEqualTo(dbArtifact.getSha1Hash()); + }); } } 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 18ee0bde4..3051e4e22 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 @@ -333,6 +333,8 @@ public class AmqpMessageHandlerServiceTest { assertThat(downloadResponse.getResponseCode()).as("Message body response code is wrong") .isEqualTo(HttpStatus.OK.value()); assertThat(downloadResponse.getArtifact().getSize()).as("Wrong artifact size in message body").isEqualTo(1L); + assertThat(downloadResponse.getArtifact().getHashes().getSha1()).as("Wrong sha1 hash").isEqualTo("sha1"); + assertThat(downloadResponse.getArtifact().getHashes().getMd5()).as("Wrong md5 hash").isEqualTo("md5"); assertThat(downloadResponse.getDownloadUrl()).as("download url is wrong") .startsWith("http://localhost/api/v1/downloadserver/downloadId/"); } @@ -381,7 +383,7 @@ public class AmqpMessageHandlerServiceTest { } private ActionUpdateStatus createActionUpdateStatus(final ActionStatus status) { - return createActionUpdateStatus(status, 2l); + return createActionUpdateStatus(status, 2L); } private ActionUpdateStatus createActionUpdateStatus(final ActionStatus status, final Long id) { @@ -406,7 +408,7 @@ public class AmqpMessageHandlerServiceTest { } private List createSoftwareModuleList() { - final List softwareModuleList = new ArrayList(); + final List softwareModuleList = new ArrayList<>(); final SoftwareModule softwareModule = new SoftwareModule(); softwareModule.setId(777L); softwareModuleList.add(softwareModule); @@ -428,7 +430,7 @@ public class AmqpMessageHandlerServiceTest { return action; } - private void initalizeSecurityTokenGenerator() throws IllegalArgumentException, IllegalAccessException { + private void initalizeSecurityTokenGenerator() throws IllegalAccessException { final SecurityTokenGeneratorHolder instance = SecurityTokenGeneratorHolder.getInstance(); final Field[] fields = instance.getClass().getDeclaredFields(); for (final Field field : fields) { diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java index 0bd8c164b..20d03bdd6 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java +++ b/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java @@ -52,6 +52,8 @@ public class BaseAmqpServiceTest { final ActionUpdateStatus actionUpdateStatus = new ActionUpdateStatus(); actionUpdateStatus.setActionId(1L); actionUpdateStatus.setSoftwareModuleId(2L); + actionUpdateStatus.getMessage().add("Message 1"); + actionUpdateStatus.getMessage().add("Message 2"); final Message message = rabbitTemplate.getMessageConverter().toMessage(actionUpdateStatus, new MessageProperties()); From cbcbe571ea164022341477ac2eab4853c50684e5 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 9 May 2016 17:02:12 +0200 Subject: [PATCH 292/344] Delete the eventbus call and add the used event to the hawkbitEventProvider Signed-off-by: Melanie Retter --- .../java/org/eclipse/hawkbit/ui/HawkbitEventProvider.java | 2 ++ .../ui/management/targettag/CreateUpdateTargetTagLayout.java | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) 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 12bcaacbc..4c1017fd4 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 @@ -21,6 +21,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.eventbus.event.TargetTagCreatedBulkEvent; +import org.eclipse.hawkbit.eventbus.event.TargetTagUpdateEvent; /** * The default hawkbit event provider. @@ -37,6 +38,7 @@ public class HawkbitEventProvider implements UIEventProvider { SINGLE_EVENTS.add(DistributionSetTagUpdateEvent.class); SINGLE_EVENTS.add(RolloutGroupChangeEvent.class); SINGLE_EVENTS.add(RolloutChangeEvent.class); + SINGLE_EVENTS.add(TargetTagUpdateEvent.class); BULK_EVENTS.add(TargetCreatedEvent.class); BULK_EVENTS.add(TargetInfoUpdateEvent.class); 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 aee07afc4..9a2805f19 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 @@ -144,7 +144,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { final TargetTag existingTag = tagManagement.findTargetTag(tagName.getValue()); if (optiongroup.getValue().equals(createTagNw)) { if (!checkIsDuplicate(existingTag)) { - crateNewTag(); + createNewTag(); } } else { @@ -182,7 +182,7 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { /** * Create new tag. */ - private void crateNewTag() { + private void createNewTag() { final String colorPicked = getColorPickedString(); final String tagNameValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagName.getValue()); final String tagDescValue = HawkbitCommonUtil.trimAndNullIfEmpty(tagDesc.getValue()); @@ -218,7 +218,6 @@ public class CreateUpdateTargetTagLayout extends CreateUpdateTagLayout { tagManagement.updateTargetTag(targetObj); uiNotification.displaySuccess(i18n.get("message.update.success", new Object[] { targetObj.getName() })); closeWindow(); - eventBus.publish(this, new TargetTagUpdateEvent(targetObj)); } else { uiNotification.displayValidationError(i18n.get("message.tag.update.mandatory")); } From 7d81054d4c7ddb6bad743d5589ae8d8052a6885c Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 10 May 2016 10:21:40 +0200 Subject: [PATCH 293/344] 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 f89b7e4bebc32bcfbc65cc7d1f75c8ecd90f464f Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Tue, 10 May 2016 10:24:53 +0200 Subject: [PATCH 294/344] Update AbstractTableDetailsLayout.java use capital F for float value --- .../ui/common/detailslayout/AbstractTableDetailsLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f471abf33..74c6b86ab 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 @@ -150,7 +150,7 @@ public abstract class AbstractTableDetailsLayout extends private void buildLayout() { final HorizontalLayout nameEditLayout = new HorizontalLayout(); - nameEditLayout.setWidth(100.0f, Unit.PERCENTAGE); + nameEditLayout.setWidth(100.0F, Unit.PERCENTAGE); nameEditLayout.addComponent(caption); nameEditLayout.setComponentAlignment(caption, Alignment.TOP_LEFT); if (hasEditPermission()) { From 5443f6e419bee6b634fa0d214ee0836ebcb0a52d Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 10 May 2016 12:01:55 +0200 Subject: [PATCH 295/344] Fixed auth problem in device simulator. Fixed equals ignore case in sha1 check. Signed-off-by: Kai Zimmermann --- .../simulator/DeviceSimulatorUpdater.java | 81 ++++++++++++++++--- .../artifact/repository/ArtifactStore.java | 3 +- 2 files changed, 73 insertions(+), 11 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 6f640ca53..4545cf759 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 @@ -41,6 +41,7 @@ import org.eclipse.hawkbit.simulator.event.ProgressUpdate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import com.google.common.eventbus.EventBus; @@ -193,7 +194,8 @@ public class DeviceSimulatorUpdater { switch (entry.getKey()) { case HTTP: case HTTPS: - status.add(downloadUrl(entry.getValue(), targetToken, artifact.getHashes().getSha1())); + status.add(downloadUrl(entry.getValue(), targetToken, artifact.getHashes().getSha1(), + artifact.getSize())); break; default: // not supported yet @@ -202,37 +204,54 @@ public class DeviceSimulatorUpdater { }); } - private static UpdateStatus downloadUrl(final String url, final String targetToken, final String sha1Hash) { - LOGGER.debug("Downloading {}", url); + private static UpdateStatus downloadUrl(final String url, final String targetToken, final String sha1Hash, + final long size) { + LOGGER.debug("Downloading {} with token {}, expected sha1 hash {} and size {}", url, + hideTokenDetails(targetToken), sha1Hash, size); long overallread = 0; try { final CloseableHttpClient httpclient = createHttpClientThatAcceptsAllServerCerts(); final HttpGet request = new HttpGet(url); - request.addHeader("TargetToken", targetToken); + request.addHeader("Authorization", "TargetToken " + targetToken); final String sha1HashResult; try (final CloseableHttpResponse response = httpclient.execute(request)) { + + if (response.getStatusLine().getStatusCode() != HttpStatus.OK.value()) { + final String message = wrongStatusCode(url, response); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + + if (response.getEntity().getContentLength() != size) { + final String message = wrongContentLength(url, size, response); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + final File tempFile = File.createTempFile("uploadFile", null); final MessageDigest md = MessageDigest.getInstance("SHA-1"); try (final DigestOutputStream dos = new DigestOutputStream(new FileOutputStream(tempFile), md)) { overallread = ByteStreams.copy(response.getEntity().getContent(), dos); - sha1HashResult = BaseEncoding.base16().lowerCase().encode(md.digest()); } finally { tempFile.delete(); } + + if (overallread != size) { + final String message = incompleteRead(url, size, overallread); + return new UpdateStatus(ResponseStatus.ERROR, message); + } + + sha1HashResult = BaseEncoding.base16().lowerCase().encode(md.digest()); } - if (!sha1Hash.equals(sha1HashResult)) { - final String message = "Download " + url + " failed with SHA1 hash missmatch (Expected: " + sha1Hash - + " but got: " + sha1HashResult + ")"; - LOGGER.debug(message); + if (!sha1Hash.equalsIgnoreCase(sha1HashResult)) { + final String message = wrongHash(url, sha1Hash, overallread, sha1HashResult); return new UpdateStatus(ResponseStatus.ERROR, message); } } catch (IOException | KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) { - LOGGER.error("Failed to download {}", url, e); + LOGGER.error("Failed to download {} with {}", url, e.getMessage()); return new UpdateStatus(ResponseStatus.ERROR, "Failed to download " + url + ": " + e.getMessage()); } @@ -241,6 +260,48 @@ public class DeviceSimulatorUpdater { return new UpdateStatus(ResponseStatus.SUCCESSFUL, message); } + private static String hideTokenDetails(final String targetToken) { + if (targetToken.isEmpty()) { + return ""; + } + + if (targetToken.length() <= 3) { + return "***"; + } + + return targetToken.substring(0, 3) + "***" + + targetToken.substring(targetToken.length() - 3, targetToken.length()); + } + + private static String wrongHash(final String url, final String sha1Hash, final long overallread, + final String sha1HashResult) { + final String message = "Download " + url + " failed with SHA1 hash missmatch (Expected: " + sha1Hash + + " but got: " + sha1HashResult + ") (" + overallread + " bytes)"; + LOGGER.error(message); + return message; + } + + private static String incompleteRead(final String url, final long size, final long overallread) { + final String message = "Download " + url + " is incomplete (Expected: " + size + " but got: " + overallread + + ")"; + LOGGER.error(message); + return message; + } + + private static String wrongContentLength(final String url, final long size, + final CloseableHttpResponse response) { + final String message = "Download " + url + " has wrong content length (Expected: " + size + " but got: " + + response.getEntity().getContentLength() + ")"; + LOGGER.error(message); + return message; + } + + private static String wrongStatusCode(final String url, final CloseableHttpResponse response) { + final String message = "Download " + url + " failed (" + response.getStatusLine().getStatusCode() + ")"; + LOGGER.error(message); + return message; + } + private static CloseableHttpClient createHttpClientThatAcceptsAllServerCerts() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException { final SSLContextBuilder builder = new SSLContextBuilder(); 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 94b093cb3..d863f60cf 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 @@ -185,7 +185,8 @@ public class ArtifactStore implements ArtifactRepository { throw new ArtifactStoreException(e.getMessage(), e); } - if (hash != null && hash.getMd5() != null && !storedArtifact.getHashes().getMd5().equals(hash.getMd5())) { + if (hash != null && hash.getMd5() != null + && !storedArtifact.getHashes().getMd5().equalsIgnoreCase(hash.getMd5())) { throw new HashNotMatchException("The given md5 hash " + hash.getMd5() + " not matching the calculated md5 hash " + storedArtifact.getHashes().getMd5(), HashNotMatchException.MD5); From bc37ea9b23313b941c97c6a4cfe0277440046ae3 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 10 May 2016 12:08:29 +0200 Subject: [PATCH 296/344] Improved hiding for small tokens. Signed-off-by: Kai Zimmermann --- .../eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 4545cf759..7e03c0f07 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 @@ -265,12 +265,12 @@ public class DeviceSimulatorUpdater { return ""; } - if (targetToken.length() <= 3) { + if (targetToken.length() <= 6) { return "***"; } - return targetToken.substring(0, 3) + "***" - + targetToken.substring(targetToken.length() - 3, targetToken.length()); + return targetToken.substring(0, 2) + "***" + + targetToken.substring(targetToken.length() - 2, targetToken.length()); } private static String wrongHash(final String url, final String sha1Hash, final long overallread, From 1236f65d9da85cbd8cacd99492c61622f26ce764 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 10 May 2016 13:12:19 +0200 Subject: [PATCH 297/344] Improved sha1 gen performance by using buffered streams. Signed-off-by: Kai Zimmermann --- .../hawkbit/simulator/DeviceSimulatorUpdater.java | 12 ++++++++++-- .../artifact/repository/ArtifactStore.java | 15 +++++++++++---- 2 files changed, 21 insertions(+), 6 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 7e03c0f07..197fcd7da 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 @@ -8,6 +8,8 @@ */ 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; @@ -232,9 +234,15 @@ public class DeviceSimulatorUpdater { final MessageDigest md = MessageDigest.getInstance("SHA-1"); try (final DigestOutputStream dos = new DigestOutputStream(new FileOutputStream(tempFile), md)) { - overallread = ByteStreams.copy(response.getEntity().getContent(), dos); + try (final BufferedOutputStream bdos = new BufferedOutputStream(dos)) { + try (BufferedInputStream bis = new BufferedInputStream(response.getEntity().getContent())) { + overallread = ByteStreams.copy(bis, bdos); + } + } } finally { - tempFile.delete(); + if (tempFile != null && !tempFile.delete()) { + LOGGER.error("Could not delete temporary file: {}", tempFile); + } } if (overallread != size) { 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 d863f60cf..5f12498ff 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 @@ -8,11 +8,14 @@ */ package org.eclipse.hawkbit.artifact.repository; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.security.DigestOutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -122,7 +125,11 @@ public class ArtifactStore implements ArtifactRepository { LOGGER.debug("storing file {} of content {}", filename, contentType); tempFile = File.createTempFile("uploadFile", null); try (final FileOutputStream os = new FileOutputStream(tempFile)) { - return store(content, contentType, os, tempFile, hash); + try (BufferedOutputStream bos = new BufferedOutputStream(os)) { + try (BufferedInputStream bis = new BufferedInputStream(content)) { + return store(content, contentType, bos, tempFile, hash); + } + } } } catch (final IOException | MongoException e1) { throw new ArtifactStoreException(e1.getMessage(), e1); @@ -162,7 +169,7 @@ public class ArtifactStore implements ArtifactRepository { } - private DbArtifact store(final InputStream content, final String contentType, final FileOutputStream os, + private DbArtifact store(final InputStream content, final String contentType, final OutputStream os, final File tempFile, final DbArtifactHash hash) { final GridFsArtifact storedArtifact; try { @@ -196,8 +203,8 @@ public class ArtifactStore implements ArtifactRepository { } - private static String computeSHA1Hash(final InputStream stream, final FileOutputStream os, - final String providedSHA1Sum) throws NoSuchAlgorithmException, IOException { + private static String computeSHA1Hash(final InputStream stream, final OutputStream os, final String providedSHA1Sum) + throws NoSuchAlgorithmException, IOException { String sha1Hash; // compute digest final MessageDigest md = MessageDigest.getInstance("SHA-1"); From a9283b402ab020d4103da229a96dd8bfa6d488dd Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 10 May 2016 13:21:53 +0200 Subject: [PATCH 298/344] Improved code readability. Signed-off-by: Kai Zimmermann --- .../hawkbit/simulator/DeviceSimulatorUpdater.java | 10 ++++++++-- 1 file changed, 8 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 197fcd7da..3704b9854 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 @@ -43,6 +43,7 @@ import org.eclipse.hawkbit.simulator.event.ProgressUpdate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -117,6 +118,11 @@ public class DeviceSimulatorUpdater { } private static final class DeviceSimulatorUpdateThread implements Runnable { + /** + * + */ + private static final int MINIMUM_TOKENLENGTH_FOR_HINT = 6; + private static final Random rndSleep = new SecureRandom(); private final AbstractSimulatedDevice device; @@ -215,7 +221,7 @@ public class DeviceSimulatorUpdater { try { final CloseableHttpClient httpclient = createHttpClientThatAcceptsAllServerCerts(); final HttpGet request = new HttpGet(url); - request.addHeader("Authorization", "TargetToken " + targetToken); + request.addHeader(HttpHeaders.AUTHORIZATION, "TargetToken " + targetToken); final String sha1HashResult; try (final CloseableHttpResponse response = httpclient.execute(request)) { @@ -273,7 +279,7 @@ public class DeviceSimulatorUpdater { return ""; } - if (targetToken.length() <= 6) { + if (targetToken.length() <= MINIMUM_TOKENLENGTH_FOR_HINT) { return "***"; } From 2c49fc8f77a21dee74e36c4d1b75da21606c4164 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 12 May 2016 11:55:25 +0200 Subject: [PATCH 299/344] Fix action message. --- .../eclipse/hawkbit/simulator/DeviceSimulatorUpdater.java | 3 --- .../src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java | 6 +++--- .../src/main/java/org/eclipse/hawkbit/app/MyUI.java | 3 +++ .../org/eclipse/hawkbit/controller/RootController.java | 8 ++++---- 4 files changed, 10 insertions(+), 10 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 3704b9854..e7b81b017 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 @@ -118,9 +118,6 @@ public class DeviceSimulatorUpdater { } private static final class DeviceSimulatorUpdateThread implements Runnable { - /** - * - */ private static final int MINIMUM_TOKENLENGTH_FOR_HINT = 6; private static final Random rndSleep = new SecureRandom(); diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java index 763e8447e..d8c5c8493 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyLoginUI.java @@ -20,11 +20,11 @@ import com.vaadin.spring.annotation.SpringUI; * login path. The easiest way to get an hawkBit login UI running is to extend * the {@link HawkbitLoginUI} and to annotated it with {@link SpringUI} as in * this example to the defined {@link HawkbitTheme#LOGIN_UI_PATH}. - * - * - * */ @SpringUI(path = HawkbitTheme.LOGIN_UI_PATH) +// Exception squid:MaximumInheritanceDepth - Most of the inheritance comes from +// Vaadin. +@SuppressWarnings({ "squid:MaximumInheritanceDepth" }) public class MyLoginUI extends HawkbitLoginUI { private static final long serialVersionUID = 1L; diff --git a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java index 68d3b2fd9..e5bc7535d 100644 --- a/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java +++ b/examples/hawkbit-example-app/src/main/java/org/eclipse/hawkbit/app/MyUI.java @@ -29,6 +29,9 @@ import com.vaadin.spring.annotation.SpringUI; */ @SpringUI @Push(value = PushMode.AUTOMATIC, transport = Transport.WEBSOCKET) +// Exception squid:MaximumInheritanceDepth - Most of the inheritance comes from +// Vaadin. +@SuppressWarnings({ "squid:MaximumInheritanceDepth" }) public class MyUI extends HawkbitUI { private static final long serialVersionUID = 1L; 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..3969e1b83 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 @@ -318,8 +318,8 @@ public class RootController { 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.registerRetrieved(action, ControllerManagement.SERVER_MESSAGE_PREFIX + + "Target retrieved update action and should start now the download."); return new ResponseEntity<>(base, HttpStatus.OK); } @@ -497,8 +497,8 @@ public class RootController { LOG.debug("Found an active CancelAction for target {}. returning cancel: {}", targetid, cancel); - controllerManagement.registerRetrieved(action, - "Controller retrieved cancel action and should start now the cancelation."); + controllerManagement.registerRetrieved(action, ControllerManagement.SERVER_MESSAGE_PREFIX + + "Target retrieved cancel action and should start now the cancelation."); return new ResponseEntity<>(cancel, HttpStatus.OK); } From 8b7f24e202e151b5c1367f6c6ffeaedfc8698575 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 12 May 2016 11:58:16 +0200 Subject: [PATCH 300/344] Add mysql profile --- .../resources/application-mysql.properties | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 examples/hawkbit-example-app/src/main/resources/application-mysql.properties diff --git a/examples/hawkbit-example-app/src/main/resources/application-mysql.properties b/examples/hawkbit-example-app/src/main/resources/application-mysql.properties new file mode 100644 index 000000000..fbb0fcbad --- /dev/null +++ b/examples/hawkbit-example-app/src/main/resources/application-mysql.properties @@ -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 +# + +# This profile adds basic configurations for a MySQL DB usage. +# Keep in mind that you need the MaridDB driver in your classpath on compile. +# see https://github.com/eclipse/hawkbit/wiki/Run-hawkBit + +spring.jpa.database=MYSQL +spring.datasource.url=jdbc:mysql://localhost:3306/hawkbit +spring.datasource.username=root +spring.datasource.password= +spring.datasource.driverClassName=org.mariadb.jdbc.Driver + +spring.datasource.max-active=100 +spring.datasource.max-idle=10 +spring.datasource.min-idle=10 +spring.datasource.initial-size=10 +spring.datasource.validation-query=select 1 from dual +spring.datasource.validation-interval=30000 +spring.datasource.test-on-borrow=true +spring.datasource.test-on-return=false +spring.datasource.test-while-idle=true +spring.datasource.time-between-eviction-runs-millis=30000 +spring.datasource.min-evictable-idle-time-millis=60000 +spring.datasource.max-wait=10000 +spring.datasource.jmx-enabled=true \ No newline at end of file From 33a4ed117528c3789696974cf0004c3ab0071150 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 13 May 2016 09:30:22 +0200 Subject: [PATCH 301/344] fix typo of MariaDB --- .../src/main/resources/application-mysql.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/hawkbit-example-app/src/main/resources/application-mysql.properties b/examples/hawkbit-example-app/src/main/resources/application-mysql.properties index fbb0fcbad..202500245 100644 --- a/examples/hawkbit-example-app/src/main/resources/application-mysql.properties +++ b/examples/hawkbit-example-app/src/main/resources/application-mysql.properties @@ -8,7 +8,7 @@ # # This profile adds basic configurations for a MySQL DB usage. -# Keep in mind that you need the MaridDB driver in your classpath on compile. +# Keep in mind that you need the MariaDB driver in your classpath on compile. # see https://github.com/eclipse/hawkbit/wiki/Run-hawkBit spring.jpa.database=MYSQL @@ -29,4 +29,4 @@ spring.datasource.test-while-idle=true spring.datasource.time-between-eviction-runs-millis=30000 spring.datasource.min-evictable-idle-time-millis=60000 spring.datasource.max-wait=10000 -spring.datasource.jmx-enabled=true \ No newline at end of file +spring.datasource.jmx-enabled=true From 7a281a8236d2440984ebf7c71e40a787cd19ac3e Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 13 May 2016 15:38:52 +0200 Subject: [PATCH 302/344] allow the getTargetSecurityToken can be called as system code Signed-off-by: Michael Hirsch --- .../repository/DeploymentManagement.java | 9 ++++++- .../hawkbit/repository/model/Target.java | 9 +++++-- .../security/SystemSecurityContext.java | 26 +++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) 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..1e58ea938 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 @@ -54,6 +54,7 @@ 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.security.SystemSecurityContext; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -118,6 +119,9 @@ public class DeploymentManagement { @Autowired private AfterTransactionCommitExecutor afterCommit; + @Autowired + private SystemSecurityContext systemSecurityContext; + /** * method assigns the {@link DistributionSet} to all {@link Target}s. * @@ -422,11 +426,14 @@ public class DeploymentManagement { private void assignDistributionSetEvent(final Target target, final Long actionId, final List softwareModules) { target.getTargetInfo().setUpdateStatus(TargetUpdateStatus.PENDING); + final String targetSecurityToken = systemSecurityContext.runAsSystem(() -> { + return target.getSecurityToken(); + }); 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())); + targetSecurityToken)); }); } 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..8947ea6c3 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 @@ -38,6 +38,7 @@ import javax.validation.constraints.Size; 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.hawkbit.repository.model.helper.SystemSecurityContextHolder; import org.eclipse.persistence.annotations.CascadeOnDelete; import org.springframework.data.domain.Persistable; @@ -193,10 +194,14 @@ public class Target extends NamedEntity implements Persistable { } /** - * @return the securityToken + * @return the securityToken if the current security context contains the + * necessary permission {@link SpPermission#READ_TARGET_SEC_TOKEN} + * or the current context is executed as system code, otherwise + * {@code null}. */ public String getSecurityToken() { - if (SecurityChecker.hasPermission(SpPermission.READ_TARGET_SEC_TOKEN)) { + if (SystemSecurityContextHolder.getInstance().getSystemSecurityContext().isCurrentThreadSystemCode() + || SecurityChecker.hasPermission(SpPermission.READ_TARGET_SEC_TOKEN)) { return securityToken; } return null; 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 b22b54e39..409e714a0 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 @@ -49,6 +49,21 @@ public class SystemSecurityContext { this.tenantAware = tenantAware; } + /** + * Runs a given {@link Callable} within a system security context, which is + * permitted to call secured system code. Often the system needs to call + * secured methods by it's own without relying on the current security + * context e.g. if the current security context does not contain the + * necessary permission it's necessary to execute code as system code to + * execute necessary methods and functionality. + * + * The security context will be switched to the system code and back after + * the callable is called. + * + * @param callable + * the callable to call within the system security context + * @return the return value of the {@link Callable#call()} method. + */ public T runAsSystem(final Callable callable) { final SecurityContext oldContext = SecurityContextHolder.getContext(); try { @@ -68,6 +83,17 @@ public class SystemSecurityContext { } } + /** + * @return {@code true} if the current running code is running as system + * code block. + */ + public boolean isCurrentThreadSystemCode() { + if (SecurityContextHolder.getContext().getAuthentication() instanceof SystemCodeAuthentication) { + return true; + } + return false; + } + private static void setSystemContext() { final SecurityContextImpl securityContextImpl = new SecurityContextImpl(); securityContextImpl.setAuthentication(new SystemCodeAuthentication()); From dcbf27e3ed3a076e9e5a6c94fc9df9a862b1d370 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 17 May 2016 08:04:33 +0200 Subject: [PATCH 303/344] add junit tests to security of getTargetSecurityToken Signed-off-by: Michael Hirsch --- .../hawkbit/AbstractIntegrationTest.java | 7 +++-- .../hawkbit/WithSpringAuthorityRule.java | 14 ++++++--- .../repository/TargetManagementTest.java | 31 +++++++++++++++++++ 3 files changed, 45 insertions(+), 7 deletions(-) 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..ddd850df1 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/AbstractIntegrationTest.java @@ -48,6 +48,7 @@ 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; import org.junit.After; import org.junit.AfterClass; @@ -181,11 +182,10 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected TenantAwareCacheManager cacheManager; - + @Autowired protected TenantConfigurationManagement tenantConfigurationManagement; - @Autowired protected RolloutManagement rolloutManagement; @@ -198,6 +198,9 @@ public abstract class AbstractIntegrationTest implements EnvironmentAware { @Autowired protected RolloutRepository rolloutRepository; + @Autowired + protected SystemSecurityContext systemSecurityContext; + protected MockMvc mvc; @Autowired diff --git a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java index 15fda51b4..40f6a64c2 100644 --- a/hawkbit-repository/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java +++ b/hawkbit-repository/src/test/java/org/eclipse/hawkbit/WithSpringAuthorityRule.java @@ -160,19 +160,23 @@ public class WithSpringAuthorityRule implements TestRule { } public static WithUser withUser(final String principal, final String... authorities) { - return withUserAndTenant(principal, "default", true, authorities); + return withUserAndTenant(principal, "default", true, true, authorities); + } + + public static WithUser withUser(final String principal, final boolean allSpPermision, final String... authorities) { + return withUserAndTenant(principal, "default", true, allSpPermision, authorities); } public static WithUser withUser(final boolean autoCreateTenant) { - return withUserAndTenant("bumlux", "default", autoCreateTenant, new String[] {}); + return withUserAndTenant("bumlux", "default", autoCreateTenant, true, new String[] {}); } public static WithUser withUserAndTenant(final String principal, final String tenant, final String... authorities) { - return withUserAndTenant(principal, tenant, true, new String[] {}); + return withUserAndTenant(principal, tenant, true, true, new String[] {}); } public static WithUser withUserAndTenant(final String principal, final String tenant, - final boolean autoCreateTenant, final String... authorities) { + final boolean autoCreateTenant, final boolean allSpPermission, final String... authorities) { return new WithUser() { @Override @@ -197,7 +201,7 @@ public class WithSpringAuthorityRule implements TestRule { @Override public boolean allSpPermissions() { - return true; + return allSpPermission; } @Override 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..1c039c8c8 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 @@ -32,6 +32,7 @@ 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.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.exception.TenantNotExistException; import org.eclipse.hawkbit.repository.model.Action; @@ -56,6 +57,36 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Target Management") public class TargetManagementTest extends AbstractIntegrationTest { + @Test + @Description("Ensures that retrieving the target security is only permitted with the necessary permissions.") + public void getTargetSecurityTokenOnlyWithCorrectPermission() throws Exception { + final Target createdTarget = targetManagement.createTarget(new Target("targetWithSecurityToken")); + + // retrieve security token only with READ_TARGET_SEC_TOKEN permission + final String securityTokenWithReadPermission = securityRule.runAs(WithSpringAuthorityRule + .withUser("OnlyTargetReadPermission", false, SpPermission.READ_TARGET_SEC_TOKEN.toString()), () -> { + return createdTarget.getSecurityToken(); + }); + + // retrieve security token as system code execution + final String securityTokenAsSystemCode = systemSecurityContext.runAsSystem(() -> { + return createdTarget.getSecurityToken(); + }); + + // retrieve security token without any permissions + final String securityTokenWithoutPermission = securityRule + .runAs(WithSpringAuthorityRule.withUser("NoPermission", false), () -> { + return createdTarget.getSecurityToken(); + }); + + assertThat(createdTarget.getSecurityToken()).isNotNull(); + assertThat(securityTokenWithReadPermission).isNotNull(); + assertThat(securityTokenAsSystemCode).isNotNull(); + + assertThat(securityTokenWithoutPermission).isNull(); + + } + @Test @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists.") @WithUser(tenantId = "tenantWhichDoesNotExists", allSpPermissions = true, autoCreateTenant = false) From 5eeac5cb382c1abece801858683189c4a16dd567 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 17 May 2016 08:37:04 +0200 Subject: [PATCH 304/344] remove create breadcumb comment --- .../hawkbit/ui/filtermanagement/CreateOrUpdateFilterHeader.java | 1 - 1 file changed, 1 deletion(-) 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 17c1410d3..eb809ff02 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 @@ -212,7 +212,6 @@ public class CreateOrUpdateFilterHeader extends VerticalLayout implements Button private void createComponents() { - // Breadcrumb breadcrumbButton = createBreadcrumbButton(); headerCaption = SPUIComponentProvider.getLabel(SPUILabelDefinitions.VAR_CREATE_FILTER, From 56487ad1b78af39487811fc8c99de4833a411519 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Tue, 17 May 2016 10:57:08 +0200 Subject: [PATCH 305/344] remove if-statement and return immediately the instanceof result Signed-off-by: Michael Hirsch --- .../org/eclipse/hawkbit/security/SystemSecurityContext.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 409e714a0..f849eb541 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 @@ -88,10 +88,7 @@ public class SystemSecurityContext { * code block. */ public boolean isCurrentThreadSystemCode() { - if (SecurityContextHolder.getContext().getAuthentication() instanceof SystemCodeAuthentication) { - return true; - } - return false; + return SecurityContextHolder.getContext().getAuthentication() instanceof SystemCodeAuthentication; } private static void setSystemContext() { From e658e7dac6175a030cac6022b7aff7563dc2cb6d Mon Sep 17 00:00:00 2001 From: Jonathan Philip Knoblauch Date: Tue, 17 May 2016 12:49:32 +0200 Subject: [PATCH 306/344] 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 307/344] 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 308/344] 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 eb3f9f6f2d22a06c5c16c6897d079ca9e28866e2 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 17 May 2016 16:24:14 +0200 Subject: [PATCH 309/344] 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 310/344] 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 311/344] 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 312/344] 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 313/344] 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 314/344] 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 677b35ef423d0f2405b05d21dd07418b34bc2bb1 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 08:32:33 +0200 Subject: [PATCH 315/344] 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 316/344] 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 317/344] 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 318/344] 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 319/344] 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 320/344] 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 321/344] 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 322/344] 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 323/344] 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 324/344] 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 325/344] 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 b58ba745652e4fb435ddf0f5e3cacc2a85c4c8c9 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Wed, 18 May 2016 12:45:09 +0200 Subject: [PATCH 326/344] the column name must be the same as the bean attribute name otherwise NPE Signed-off-by: Michael Hirsch --- .../eclipse/hawkbit/simulator/ui/SimulatorView.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) 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 bd6ecbe8b..4834bece9 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 @@ -53,11 +53,13 @@ import com.vaadin.ui.renderers.ProgressBarRenderer; * */ @SpringView(name = "") +// The inheritance comes from Vaadin +@SuppressWarnings("squid:MaximumInheritanceDepth") public class SimulatorView extends VerticalLayout implements View { private static final String NEXT_POLL_COUNTER_SEC_COL = "nextPollCounterSec"; - private static final String RESPONSE_STATUS_COL = "responseStatus"; + private static final String RESPONSE_STATUS_COL = "updateStatus"; private static final String PROTOCOL_COL = "protocol"; @@ -141,10 +143,9 @@ public class SimulatorView extends VerticalLayout implements View { responseComboBox.setItemIcon(ResponseStatus.ERROR, FontAwesome.EXCLAMATION_CIRCLE); responseComboBox.setNullSelectionAllowed(false); responseComboBox.setValue(ResponseStatus.SUCCESSFUL); - responseComboBox.addValueChangeListener(valueChangeEvent -> { - beanContainer.getItemIds().forEach(itemId -> beanContainer.getItem(itemId) - .getItemProperty(RESPONSE_STATUS_COL).setValue(valueChangeEvent.getProperty().getValue())); - }); + responseComboBox.addValueChangeListener( + valueChangeEvent -> beanContainer.getItemIds().forEach(itemId -> beanContainer.getItem(itemId) + .getItemProperty(RESPONSE_STATUS_COL).setValue(valueChangeEvent.getProperty().getValue()))); // add all components addComponent(caption); From 5bb24c78ade0714efed4fb45254d75f00994d7c8 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 13:48:04 +0200 Subject: [PATCH 327/344] 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 328/344] 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 329/344] 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 f02485129e4223c4845cbea388c2d765471f3969 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Wed, 18 May 2016 15:24:28 +0200 Subject: [PATCH 330/344] 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 331/344] 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 332/344] 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 333/344] 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 176f190ec662bb408b80a455441038bb8a0db872 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 19 May 2016 10:15:02 +0200 Subject: [PATCH 334/344] 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 f345d5068fd96a9b4d9c38ab0167c0b1b430220e Mon Sep 17 00:00:00 2001 From: venu1278 Date: Thu, 19 May 2016 15:56:19 +0530 Subject: [PATCH 335/344] 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 336/344] 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 337/344] 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 338/344] 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 47e254e14ee1c609353cdf46cb1a87d27adfb2e7 Mon Sep 17 00:00:00 2001 From: Michael Hirsch Date: Fri, 20 May 2016 13:56:36 +0200 Subject: [PATCH 339/344] 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 340/344] 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 341/344] 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 57153b12441e11a4aac35a5a0fb7f84d5d94521d Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 24 May 2016 10:45:07 +0200 Subject: [PATCH 342/344] 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 343/344] 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 dc74ec8889564d31ea7052734d99bad676742ac4 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 24 May 2016 15:08:07 +0200 Subject: [PATCH 344/344] 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 +}