getMissingPermissionsForDrop() {
- return permChecker.hasUpdateTargetPermission() ? Collections.emptyList()
+ return uiDependencies.getPermChecker().hasUpdateTargetPermission() ? Collections.emptyList()
: Collections.singletonList(SpPermission.UPDATE_TARGET);
}
@@ -74,7 +63,7 @@ public class TargetTagsToTargetAssignmentSupport extends TagsAssignmentSupport {
@@ -35,20 +34,16 @@ public class TargetsToDistributionSetAssignmentSupport
/**
* Constructor for TargetsToDistributionSetAssignmentSupport
*
- * @param notification
- * UINotification
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param assignmentController
* DeploymentAssignmentWindowController
*/
- public TargetsToDistributionSetAssignmentSupport(final UINotification notification, final VaadinMessageSource i18n,
- final SpPermissionChecker permChecker, final DeploymentAssignmentWindowController assignmentController) {
- super(notification, i18n);
+ public TargetsToDistributionSetAssignmentSupport(final CommonUiDependencies uiDependencies,
+ final DeploymentAssignmentWindowController assignmentController) {
+ super(uiDependencies.getUiNotification(), uiDependencies.getI18n());
- this.permChecker = permChecker;
+ this.permChecker = uiDependencies.getPermChecker();
this.assignmentController = assignmentController;
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/support/assignment/TargetsToTagAssignmentSupport.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/support/assignment/TargetsToTagAssignmentSupport.java
index a124f5ca2..382a303ed 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/support/assignment/TargetsToTagAssignmentSupport.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/support/assignment/TargetsToTagAssignmentSupport.java
@@ -18,19 +18,18 @@ import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.model.AbstractAssignmentResult;
import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Support for assigning the {@link ProxyTarget} items to {@link ProxyTag}.
- *
+ *
*/
public class TargetsToTagAssignmentSupport extends ToTagAssignmentSupport {
private final TargetManagement targetManagement;
@@ -40,23 +39,16 @@ public class TargetsToTagAssignmentSupport extends ToTagAssignmentSupport listeners = new HashSet<>();
+ private final transient SmWindowBuilder smWindowBuilder;
+ private final transient SmMetaDataWindowBuilder smMetaDataWindowBuilder;
+ private final EventView eventView;
+
+ /**
+ * Constructor for AbstractSoftwareModuleGridLayout.
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
+ * @param softwareModuleManagement
+ * SoftwareModuleManagement
+ * @param softwareModuleTypeManagement
+ * SoftwareModuleTypeManagement
+ * @param eventView
+ * EventView
+ */
+ public AbstractSoftwareModuleGridLayout(final CommonUiDependencies uiDependencies,
+ final SoftwareModuleManagement softwareModuleManagement,
+ final SoftwareModuleTypeManagement softwareModuleTypeManagement, final EventView eventView) {
+
+ this.eventView = eventView;
+ smWindowBuilder = new SmWindowBuilder(uiDependencies, softwareModuleManagement, softwareModuleTypeManagement,
+ eventView);
+ smMetaDataWindowBuilder = new SmMetaDataWindowBuilder(uiDependencies, softwareModuleManagement);
+
+ }
+
+ protected abstract SoftwareModuleGridHeader getSoftwareModuleGridHeader();
+
+ protected abstract SoftwareModuleGrid getSoftwareModuleGrid();
+
+ /**
+ * Return SmMetaDataWindowBuilder
+ *
+ * @return the smMetaDataWindowBuilder
+ */
+ public SmMetaDataWindowBuilder getSmMetaDataWindowBuilder() {
+ return smMetaDataWindowBuilder;
+ }
+
+ /**
+ * Return SmWindowBuilder.
+ *
+ * @return the smWindowBuilder
+ */
+ public SmWindowBuilder getSmWindowBuilder() {
+ return smWindowBuilder;
+ }
+
+ /**
+ * Return EventView.
+ *
+ * @return the eventView
+ */
+ public EventView getEventView() {
+ return eventView;
+ }
+
+ /**
+ * Show software module grid header
+ */
+ public void showSmTypeHeaderIcon() {
+ getSoftwareModuleGridHeader().showFilterIcon();
+ }
+
+ /**
+ * Hide software module grid header
+ */
+ public void hideSmTypeHeaderIcon() {
+ getSoftwareModuleGridHeader().hideFilterIcon();
+ }
+
+ /**
+ * Maximize the software module grid
+ */
+ public void maximize() {
+ getSoftwareModuleGrid().createMaximizedContent();
+ hideDetailsLayout();
+ }
+
+ /**
+ * Minimize the software module grid
+ */
+ public void minimize() {
+ getSoftwareModuleGrid().createMinimizedContent();
+ showDetailsLayout();
+ }
+
+ /**
+ * Is called when view is shown to the user
+ */
+ public void restoreState() {
+ getSoftwareModuleGridHeader().restoreState();
+ getSoftwareModuleGrid().restoreState();
+ }
+
+ protected void addEventListener(final TopicEventListener listener) {
+ listeners.add(listener);
+ }
+
+ /**
+ * Unsubscribe the event listeners.
+ */
+ public void unsubscribeListener() {
+ listeners.forEach(TopicEventListener::unsubscribe);
+ }
+
+}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tag/ProxyTagValidator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tag/ProxyTagValidator.java
new file mode 100644
index 000000000..68dcaed04
--- /dev/null
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/tag/ProxyTagValidator.java
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2020 Bosch.IO GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse 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.tag;
+
+import java.util.function.BooleanSupplier;
+
+import org.eclipse.hawkbit.ui.common.EntityValidator;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
+import org.springframework.util.StringUtils;
+
+/**
+ * Validator used in *Tag window controllers to validate {@link ProxyTag}.
+ */
+public class ProxyTagValidator extends EntityValidator {
+
+ /**
+ * Constructor
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
+ */
+ public ProxyTagValidator(final CommonUiDependencies uiDependencies) {
+ super(uiDependencies);
+ }
+
+ /**
+ * Checks if the entity is valid
+ *
+ * @param entity
+ * {@link ProxyTag}
+ * @param duplicateCheck
+ * true if the entity already exists in the
+ * repository
+ * @return true if the entity is valid
+ */
+ public boolean isEntityValid(final ProxyTag entity, final BooleanSupplier duplicateCheck) {
+ if (!StringUtils.hasText(entity.getName())) {
+ displayValidationError("message.error.missing.tagname");
+ return false;
+ }
+
+ if (duplicateCheck.getAsBoolean()) {
+ final String trimmedName = StringUtils.trimWhitespace(entity.getName());
+ displayValidationError("message.tag.duplicate.check", trimmedName);
+ return false;
+ }
+
+ return true;
+ }
+}
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 b67ea776e..989bd0e5c 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
@@ -16,6 +16,7 @@ import java.util.stream.Collectors;
import org.eclipse.hawkbit.repository.Identifiable;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyNamedEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.common.layout.MasterEntityAwareComponent;
@@ -42,12 +43,11 @@ public abstract class AbstractTagToken
private T masterEntity;
- protected AbstractTagToken(final SpPermissionChecker checker, final VaadinMessageSource i18n,
- final UINotification uiNotification, final UIEventBus eventBus) {
- this.checker = checker;
- this.i18n = i18n;
- this.uiNotification = uiNotification;
- this.eventBus = eventBus;
+ protected AbstractTagToken(final CommonUiDependencies uiDependencies) {
+ this.checker = uiDependencies.getPermChecker();
+ this.i18n = uiDependencies.getI18n();
+ this.uiNotification = uiDependencies.getUiNotification();
+ this.eventBus = uiDependencies.getEventBus();
buildTagPanel();
tagPanelLayout.setVisible(false);
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 98849c183..baa36ceb0 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
@@ -17,7 +17,7 @@ import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.mappers.TagToProxyTagMapper;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
@@ -25,9 +25,6 @@ import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
import org.eclipse.hawkbit.ui.common.event.EventTopics;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Implementation of target/ds tag token layout.
@@ -42,24 +39,17 @@ public class DistributionTagToken extends AbstractTagToken
/**
* Constructor for DistributionTagToken
*
- * @param checker
- * SpPermissionChecker
- * @param i18n
- * VaadinMessageSource
- * @param uinotification
- * UINotification
- * @param eventBus
- * UIEventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param distributionSetTagManagement
* DistributionSetTagManagement
* @param distributionSetManagement
* DistributionSetManagement
*/
- public DistributionTagToken(final SpPermissionChecker checker, final VaadinMessageSource i18n,
- final UINotification uinotification, final UIEventBus eventBus,
+ public DistributionTagToken(final CommonUiDependencies uiDependencies,
final DistributionSetTagManagement distributionSetTagManagement,
final DistributionSetManagement distributionSetManagement) {
- super(checker, i18n, uinotification, eventBus);
+ super(uiDependencies);
this.distributionSetTagManagement = distributionSetTagManagement;
this.distributionSetManagement = distributionSetManagement;
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 ab7d562af..d21b3d41a 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
@@ -17,7 +17,7 @@ import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.TargetTagManagement;
import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetTag;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.mappers.TagToProxyTagMapper;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
@@ -25,9 +25,6 @@ import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
import org.eclipse.hawkbit.ui.common.event.EventTopics;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Implementation of Target tag token.
@@ -43,23 +40,16 @@ public class TargetTagToken extends AbstractTagToken {
/**
* Constructor for TargetTagToken
*
- * @param checker
- * SpPermissionChecker
- * @param i18n
- * VaadinMessageSource
- * @param uinotification
- * UINotification
- * @param eventBus
- * UIEventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetTagManagement
* TargetTagManagement
* @param targetManagement
* TargetManagement
*/
- public TargetTagToken(final SpPermissionChecker checker, final VaadinMessageSource i18n,
- final UINotification uinotification, final UIEventBus eventBus,
- final TargetTagManagement targetTagManagement, final TargetManagement targetManagement) {
- super(checker, i18n, uinotification, eventBus);
+ public TargetTagToken(final CommonUiDependencies uiDependencies, final TargetTagManagement targetTagManagement,
+ final TargetManagement targetManagement) {
+ super(uiDependencies);
this.targetTagManagement = targetTagManagement;
this.targetManagement = targetManagement;
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/type/ProxyTypeValidator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/type/ProxyTypeValidator.java
new file mode 100644
index 000000000..16c05285f
--- /dev/null
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/type/ProxyTypeValidator.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright (c) 2020 Bosch.IO GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse 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.type;
+
+import java.util.function.BooleanSupplier;
+
+import org.eclipse.hawkbit.ui.common.EntityValidator;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * Validator used in *Type window controllers to validate {@link ProxyType}.
+ */
+public class ProxyTypeValidator extends EntityValidator {
+
+ private static final String KEY_MISSING_NAME_OR_KEY = "message.error.missing.typenameorkeyorsmtype";
+
+ /**
+ * Constructor
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
+ */
+ public ProxyTypeValidator(final CommonUiDependencies uiDependencies) {
+ super(uiDependencies);
+ }
+
+ /**
+ * Checks if the entity is valid
+ *
+ * @param entity
+ * {@link ProxyTag}
+ * @param keyDuplicateCheck
+ * true if the entity key already exists in the
+ * repository
+ * @param nameDuplicateCheck
+ * true if the entity name already exists in the
+ * repository
+ * @return true if the entity is valid
+ */
+ public boolean isDsTypeValid(final ProxyType entity, final BooleanSupplier keyDuplicateCheck,
+ final BooleanSupplier nameDuplicateCheck) {
+ return mandatoryDsAttributesPresent(entity) && nameDoesNotExistInRepo(entity, nameDuplicateCheck)
+ && keyDoesNotExistInRepo(entity, keyDuplicateCheck, "message.type.key.ds.duplicate.check");
+ }
+
+ /**
+ * Checks if the entity is valid
+ *
+ * @param entity
+ * {@link ProxyTag}
+ * @param keyDuplicateCheck
+ * true if the entity key already exists in the
+ * repository
+ * @param nameDuplicateCheck
+ * true if the entity name already exists in the
+ * repository
+ * @return true if the entity is valid
+ */
+ public boolean isSmTypeValid(final ProxyType entity, final BooleanSupplier keyDuplicateCheck,
+ final BooleanSupplier nameDuplicateCheck) {
+ return mandatorySmAttributesPresent(entity) && nameDoesNotExistInRepo(entity, nameDuplicateCheck)
+ && keyDoesNotExistInRepo(entity, keyDuplicateCheck, "message.type.key.swmodule.duplicate.check");
+ }
+
+ private boolean mandatorySmAttributesPresent(final ProxyType entity) {
+ if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getKey())
+ || entity.getSmTypeAssign() == null) {
+ displayValidationError(KEY_MISSING_NAME_OR_KEY);
+ return false;
+ }
+ return true;
+ }
+
+ private boolean mandatoryDsAttributesPresent(final ProxyType entity) {
+ if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getKey())
+ || CollectionUtils.isEmpty(entity.getSelectedSmTypes())) {
+ displayValidationError(KEY_MISSING_NAME_OR_KEY);
+ return false;
+ }
+ return true;
+ }
+
+ private boolean keyDoesNotExistInRepo(final ProxyType entity, final BooleanSupplier keyExistsInRepository,
+ final String duplicateKeyMessageKey) {
+ if (keyExistsInRepository.getAsBoolean()) {
+ final String trimmedKey = StringUtils.trimWhitespace(entity.getKey());
+ displayValidationError(duplicateKeyMessageKey, trimmedKey);
+ return false;
+ }
+ return true;
+ }
+
+ private boolean nameDoesNotExistInRepo(final ProxyType entity, final BooleanSupplier nameExistsInRepository) {
+ if (nameExistsInRepository.getAsBoolean()) {
+ final String trimmedName = StringUtils.trimWhitespace(entity.getName());
+ displayValidationError("message.type.duplicate.check", trimmedName);
+ return false;
+ }
+ return true;
+ }
+
+}
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 8b16cd603..a808159e5 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
@@ -28,6 +28,7 @@ import org.eclipse.hawkbit.repository.TenantConfigurationManagement;
import org.eclipse.hawkbit.security.SystemSecurityContext;
import org.eclipse.hawkbit.ui.AbstractHawkbitUI;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.EventViewAware;
@@ -93,21 +94,24 @@ public class DistributionsView extends VerticalLayout implements View, BrowserWi
this.permChecker = permChecker;
this.manageDistUIState = manageDistUIState;
+ final CommonUiDependencies uiDependencies = new CommonUiDependencies(i18n, entityFactory, eventBus, uiNotification,
+ permChecker);
+
if (permChecker.hasReadRepositoryPermission()) {
- this.dsTypeFilterLayout = new DSTypeFilterLayout(i18n, permChecker, eventBus, entityFactory, uiNotification,
- softwareModuleTypeManagement, distributionSetTypeManagement, distributionSetManagement,
- systemManagement, manageDistUIState.getDsTypeFilterLayoutUiState());
- this.distributionSetGridLayout = new DistributionSetGridLayout(i18n, eventBus, permChecker, uiNotification,
- entityFactory, targetManagement, targetFilterQueryManagement, distributionSetManagement,
- softwareModuleManagement, distributionSetTypeManagement, distributionSetTagManagement,
- softwareModuleTypeManagement, systemManagement, configManagement, systemSecurityContext,
+ this.dsTypeFilterLayout = new DSTypeFilterLayout(uiDependencies, softwareModuleTypeManagement,
+ distributionSetTypeManagement, distributionSetManagement, systemManagement,
+ manageDistUIState.getDsTypeFilterLayoutUiState());
+ this.distributionSetGridLayout = new DistributionSetGridLayout(uiDependencies, targetManagement,
+ targetFilterQueryManagement, distributionSetManagement, softwareModuleManagement,
+ distributionSetTypeManagement, distributionSetTagManagement, softwareModuleTypeManagement,
+ systemManagement, configManagement, systemSecurityContext,
manageDistUIState.getDsTypeFilterLayoutUiState(),
manageDistUIState.getDistributionSetGridLayoutUiState());
- this.swModuleGridLayout = new SwModuleGridLayout(i18n, uiNotification, eventBus, softwareModuleManagement,
- softwareModuleTypeManagement, entityFactory, permChecker, artifactManagement,
- manageDistUIState.getSmTypeFilterLayoutUiState(), manageDistUIState.getSwModuleGridLayoutUiState());
- this.distSMTypeFilterLayout = new DistSMTypeFilterLayout(eventBus, i18n, permChecker, entityFactory,
- uiNotification, softwareModuleTypeManagement, manageDistUIState.getSmTypeFilterLayoutUiState());
+ this.swModuleGridLayout = new SwModuleGridLayout(uiDependencies, softwareModuleManagement,
+ softwareModuleTypeManagement, artifactManagement, manageDistUIState.getSmTypeFilterLayoutUiState(),
+ manageDistUIState.getSwModuleGridLayoutUiState());
+ this.distSMTypeFilterLayout = new DistSMTypeFilterLayout(uiDependencies, softwareModuleTypeManagement,
+ manageDistUIState.getSmTypeFilterLayoutUiState());
final Map layoutVisibilityHandlers = new EnumMap<>(EventLayout.class);
layoutVisibilityHandlers.put(EventLayout.DS_TYPE_FILTER,
@@ -201,12 +205,12 @@ public class DistributionsView extends VerticalLayout implements View, BrowserWi
private void showDsTypeLayout() {
dsTypeFilterLayout.setVisible(true);
- distributionSetGridLayout.hideDsTypeHeaderIcon();
+ distributionSetGridLayout.hideDsFilterHeaderIcon();
}
private void hideDsTypeLayout() {
dsTypeFilterLayout.setVisible(false);
- distributionSetGridLayout.showDsTypeHeaderIcon();
+ distributionSetGridLayout.showDsFilterHeaderIcon();
}
private void maximizeDsGridLayout() {
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/AddDsTypeWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/AddDsTypeWindowController.java
index 0910e1265..b4b62a86f 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/AddDsTypeWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/AddDsTypeWindowController.java
@@ -12,65 +12,47 @@ import java.util.List;
import java.util.stream.Collectors;
import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.model.DistributionSetType;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractAddNamedEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityWindowLayout;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.springframework.util.CollectionUtils;
+import org.eclipse.hawkbit.ui.common.type.ProxyTypeValidator;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Add distribution set type window controller
*/
-public class AddDsTypeWindowController extends AbstractEntityWindowController {
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class AddDsTypeWindowController
+ extends AbstractAddNamedEntityWindowController {
private final DistributionSetTypeManagement dsTypeManagement;
-
private final DsTypeWindowLayout layout;
+ private final ProxyTypeValidator validator;
/**
* Constructor for AddDsTypeWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTypeManagement
* DistributionSetTypeManagement
* @param layout
* DsTypeWindowLayout
*/
- public AddDsTypeWindowController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public AddDsTypeWindowController(final CommonUiDependencies uiDependencies,
final DistributionSetTypeManagement dsTypeManagement, final DsTypeWindowLayout layout) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.dsTypeManagement = dsTypeManagement;
-
this.layout = layout;
+ this.validator = new ProxyTypeValidator(uiDependencies);
}
@Override
- public AbstractEntityWindowLayout getLayout() {
+ public EntityWindowLayout getLayout() {
return layout;
}
@@ -82,7 +64,7 @@ public class AddDsTypeWindowController extends AbstractEntityWindowController mandatorySmTypeIds = entity.getSelectedSmTypes().stream().filter(ProxyType::isMandatory)
.map(ProxyType::getId).collect(Collectors.toList());
@@ -90,34 +72,26 @@ public class AddDsTypeWindowController extends AbstractEntityWindowController !selectedSmType.isMandatory()).map(ProxyType::getId)
.collect(Collectors.toList());
- final DistributionSetType newDsType = dsTypeManagement.create(entityFactory.distributionSetType().create()
- .key(entity.getKey()).name(entity.getName()).description(entity.getDescription())
- .colour(entity.getColour()).mandatory(mandatorySmTypeIds).optional(optionalSmTypeIds));
+ return dsTypeManagement.create(getEntityFactory().distributionSetType().create().key(entity.getKey())
+ .name(entity.getName()).description(entity.getDescription()).colour(entity.getColour())
+ .mandatory(mandatorySmTypeIds).optional(optionalSmTypeIds));
+ }
- uiNotification.displaySuccess(i18n.getMessage("message.save.success", newDsType.getName()));
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this, new EntityModifiedEventPayload(
- EntityModifiedEventType.ENTITY_ADDED, ProxyDistributionSet.class, ProxyType.class, newDsType.getId()));
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyType.class;
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getParentEntityClass() {
+ return ProxyDistributionSet.class;
}
@Override
protected boolean isEntityValid(final ProxyType entity) {
- if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getKey())
- || CollectionUtils.isEmpty(entity.getSelectedSmTypes())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.typenameorkeyorsmtype"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
final String trimmedKey = StringUtils.trimWhitespace(entity.getKey());
- if (dsTypeManagement.getByName(trimmedName).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.type.duplicate.check", trimmedName));
- return false;
- }
- if (dsTypeManagement.getByKey(trimmedKey).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.type.key.ds.duplicate.check", trimmedKey));
- return false;
- }
-
- return true;
+ return validator.isDsTypeValid(entity, () -> dsTypeManagement.getByKey(trimmedKey).isPresent(),
+ () -> dsTypeManagement.getByName(trimmedName).isPresent());
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowBuilder.java
index 03796a03d..fe605f84a 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowBuilder.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowBuilder.java
@@ -10,14 +10,11 @@ package org.eclipse.hawkbit.ui.distributions.disttype;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowBuilder;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -25,9 +22,6 @@ import com.vaadin.ui.Window;
* Builder for distribution set type window
*/
public class DsTypeWindowBuilder extends AbstractEntityWindowBuilder {
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
private final DistributionSetTypeManagement dsTypeManagement;
private final DistributionSetManagement dsManagement;
@@ -36,30 +30,18 @@ public class DsTypeWindowBuilder extends AbstractEntityWindowBuilder
/**
* Constructor for DsTypeWindowBuilder
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTypeManagement
- * DistributionSetTypeManagement
+ * DistributionSetTypeManagement
* @param dsManagement
- * DistributionSetManagement
+ * DistributionSetManagement
* @param smTypeManagement
- * SoftwareModuleTypeManagement
+ * SoftwareModuleTypeManagement
*/
- public DsTypeWindowBuilder(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
- final DistributionSetTypeManagement dsTypeManagement, final DistributionSetManagement dsManagement,
- final SoftwareModuleTypeManagement smTypeManagement) {
- super(i18n);
-
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ public DsTypeWindowBuilder(final CommonUiDependencies uiDependencies, final DistributionSetTypeManagement dsTypeManagement,
+ final DistributionSetManagement dsManagement, final SoftwareModuleTypeManagement smTypeManagement) {
+ super(uiDependencies);
this.dsTypeManagement = dsTypeManagement;
this.dsManagement = dsManagement;
@@ -73,15 +55,14 @@ public class DsTypeWindowBuilder extends AbstractEntityWindowBuilder
@Override
public Window getWindowForAdd() {
- return getWindowForNewEntity(new AddDsTypeWindowController(i18n, entityFactory, eventBus, uiNotification,
- dsTypeManagement, new DsTypeWindowLayout(i18n, uiNotification, smTypeManagement)));
+ return getWindowForNewEntity(new AddDsTypeWindowController(uiDependencies, dsTypeManagement,
+ new DsTypeWindowLayout(uiDependencies, smTypeManagement)));
}
@Override
public Window getWindowForUpdate(final ProxyType proxyType) {
- return getWindowForEntity(proxyType,
- new UpdateDsTypeWindowController(i18n, entityFactory, eventBus, uiNotification, dsTypeManagement,
- dsManagement, new DsTypeWindowLayout(i18n, uiNotification, smTypeManagement)));
+ return getWindowForEntity(proxyType, new UpdateDsTypeWindowController(uiDependencies, dsTypeManagement, dsManagement,
+ new DsTypeWindowLayout(uiDependencies, smTypeManagement)));
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowLayout.java
index 833cd5401..19e0bed33 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/DsTypeWindowLayout.java
@@ -9,11 +9,10 @@
package org.eclipse.hawkbit.ui.distributions.disttype;
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.FormComponentBuilder;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
import org.eclipse.hawkbit.ui.management.tag.TagWindowLayout;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.FormLayout;
@@ -31,16 +30,14 @@ public class DsTypeWindowLayout extends TagWindowLayout {
/**
* Constructor for DsTypeWindowLayout
*
- * @param i18n
- * VaadinMessageSource
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param softwareModuleTypeManagement
- * SoftwareModuleTypeManagement
+ * SoftwareModuleTypeManagement
*/
- public DsTypeWindowLayout(final VaadinMessageSource i18n, final UINotification uiNotification,
+ public DsTypeWindowLayout(final CommonUiDependencies uiDependencies,
final SoftwareModuleTypeManagement softwareModuleTypeManagement) {
- super(i18n, uiNotification);
+ super(uiDependencies);
this.dsTypeComponentBuilder = new DsTypeWindowLayoutComponentBuilder(i18n, softwareModuleTypeManagement);
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/UpdateDsTypeWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/UpdateDsTypeWindowController.java
index 9f8d2ded8..7c78c0b85 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/UpdateDsTypeWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/UpdateDsTypeWindowController.java
@@ -15,44 +15,30 @@ import java.util.stream.Stream;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.builder.DistributionSetTypeUpdate;
-import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
-import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException;
import org.eclipse.hawkbit.repository.model.DistributionSetType;
import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractUpdateNamedEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.mappers.TypeToProxyTypeMapper;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.CollectionUtils;
+import org.eclipse.hawkbit.ui.common.type.ProxyTypeValidator;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for update distribution set type window
*/
-public class UpdateDsTypeWindowController extends AbstractEntityWindowController {
- private static final Logger LOG = LoggerFactory.getLogger(UpdateDsTypeWindowController.class);
-
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class UpdateDsTypeWindowController
+ extends AbstractUpdateNamedEntityWindowController {
private final DistributionSetTypeManagement dsTypeManagement;
private final DistributionSetManagement dsManagement;
private final TypeToProxyTypeMapper smTypeToProxyTypeMapper;
-
private final DsTypeWindowLayout layout;
+ private final ProxyTypeValidator validator;
private String nameBeforeEdit;
private String keyBeforeEdit;
@@ -61,14 +47,8 @@ public class UpdateDsTypeWindowController extends AbstractEntityWindowController
/**
* Constructor for UpdateDsTypeWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTypeManagement
* DistributionSetTypeManagement
* @param dsManagement
@@ -76,21 +56,16 @@ public class UpdateDsTypeWindowController extends AbstractEntityWindowController
* @param layout
* DsTypeWindowLayout
*/
- public UpdateDsTypeWindowController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public UpdateDsTypeWindowController(final CommonUiDependencies uiDependencies,
final DistributionSetTypeManagement dsTypeManagement, final DistributionSetManagement dsManagement,
final DsTypeWindowLayout layout) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.dsTypeManagement = dsTypeManagement;
this.dsManagement = dsManagement;
-
this.smTypeToProxyTypeMapper = new TypeToProxyTypeMapper<>();
-
this.layout = layout;
+ this.validator = new ProxyTypeValidator(uiDependencies);
}
@Override
@@ -144,15 +119,15 @@ public class UpdateDsTypeWindowController extends AbstractEntityWindowController
layout.disableTypeKey();
if (isDsTypeAssigned) {
- uiNotification.displayValidationError(
- nameBeforeEdit + " " + i18n.getMessage("message.error.dist.set.type.update"));
+ getUiNotification().displayValidationError(
+ nameBeforeEdit + " " + getI18n().getMessage("message.error.dist.set.type.update"));
layout.disableDsTypeSmSelectLayout();
}
}
@Override
- protected void persistEntity(final ProxyType entity) {
- final DistributionSetTypeUpdate dsTypeUpdate = entityFactory.distributionSetType().update(entity.getId())
+ protected DistributionSetType persistEntityInRepository(final ProxyType entity) {
+ final DistributionSetTypeUpdate dsTypeUpdate = getEntityFactory().distributionSetType().update(entity.getId())
.description(entity.getDescription()).colour(entity.getColour());
final List mandatorySmTypeIds = entity.getSelectedSmTypes().stream().filter(ProxyType::isMandatory)
@@ -164,40 +139,33 @@ public class UpdateDsTypeWindowController extends AbstractEntityWindowController
dsTypeUpdate.mandatory(mandatorySmTypeIds).optional(optionalSmTypeIds);
- try {
- final DistributionSetType updatedDsType = dsTypeManagement.update(dsTypeUpdate);
+ return dsTypeManagement.update(dsTypeUpdate);
+ }
- uiNotification.displaySuccess(i18n.getMessage("message.update.success", updatedDsType.getName()));
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this,
- new EntityModifiedEventPayload(EntityModifiedEventType.ENTITY_UPDATED, ProxyDistributionSet.class,
- ProxyType.class, updatedDsType.getId()));
- } catch (final EntityNotFoundException | EntityReadOnlyException e) {
- LOG.trace("Update of DS type failed in UI: {}", e.getMessage());
- final String entityType = i18n.getMessage("caption.entity.distribution.type");
- uiNotification
- .displayWarning(i18n.getMessage("message.deleted.or.notAllowed", entityType, entity.getName()));
- }
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyType.class;
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getParentEntityClass() {
+ return ProxyDistributionSet.class;
}
@Override
protected boolean isEntityValid(final ProxyType entity) {
- if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getKey())
- || CollectionUtils.isEmpty(entity.getSelectedSmTypes())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.typenameorkeyorsmtype"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
final String trimmedKey = StringUtils.trimWhitespace(entity.getKey());
- if (!nameBeforeEdit.equals(trimmedName) && dsTypeManagement.getByName(trimmedName).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.type.duplicate.check", trimmedName));
- return false;
- }
- if (!keyBeforeEdit.equals(trimmedKey) && dsTypeManagement.getByKey(trimmedKey).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.type.key.ds.duplicate.check", trimmedKey));
- return false;
- }
+ return validator.isDsTypeValid(entity,
+ () -> hasKeyChanged(trimmedKey) && dsTypeManagement.getByKey(trimmedKey).isPresent(),
+ () -> hasNameChanged(trimmedName) && dsTypeManagement.getByName(trimmedName).isPresent());
+ }
- return true;
+ private boolean hasNameChanged(final String trimmedName) {
+ return !nameBeforeEdit.equals(trimmedName);
+ }
+
+ private boolean hasKeyChanged(final String trimmedKey) {
+ return !keyBeforeEdit.equals(trimmedKey);
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterButtons.java
index 0c74c0a01..c1f3d6a47 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterButtons.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterButtons.java
@@ -11,7 +11,7 @@ package org.eclipse.hawkbit.ui.distributions.disttype.filter;
import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
import org.eclipse.hawkbit.repository.SystemManagement;
import org.eclipse.hawkbit.repository.model.DistributionSetType;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.mappers.TypeToProxyTypeMapper;
import org.eclipse.hawkbit.ui.common.data.providers.DistributionSetTypeDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
@@ -22,9 +22,6 @@ import org.eclipse.hawkbit.ui.common.filterlayout.AbstractTypeFilterButtons;
import org.eclipse.hawkbit.ui.common.state.TypeFilterLayoutUiState;
import org.eclipse.hawkbit.ui.distributions.disttype.DsTypeWindowBuilder;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -40,17 +37,11 @@ public class DSTypeFilterButtons extends AbstractTypeFilterButtons {
/**
* Constructor
- *
- * @param eventBus
- * UIEventBus
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param distributionSetTypeManagement
* DistributionSetTypeManagement
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
- * @param uiNotification
- * UINotification
* @param systemManagement
* SystemManagement
* @param dsTypeWindowBuilder
@@ -58,11 +49,10 @@ public class DSTypeFilterButtons extends AbstractTypeFilterButtons {
* @param typeFilterLayoutUiState
* TypeFilterLayoutUiState
*/
- public DSTypeFilterButtons(final UIEventBus eventBus, final VaadinMessageSource i18n,
- final UINotification uiNotification, final SpPermissionChecker permChecker,
+ public DSTypeFilterButtons(final CommonUiDependencies uiDependencies,
final DistributionSetTypeManagement distributionSetTypeManagement, final SystemManagement systemManagement,
final DsTypeWindowBuilder dsTypeWindowBuilder, final TypeFilterLayoutUiState typeFilterLayoutUiState) {
- super(eventBus, i18n, uiNotification, permChecker, typeFilterLayoutUiState);
+ super(uiDependencies, typeFilterLayoutUiState);
this.distributionSetTypeManagement = distributionSetTypeManagement;
this.dsTypeWindowBuilder = dsTypeWindowBuilder;
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterHeader.java
index 5c0edc5c4..4bd97eb48 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterHeader.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterHeader.java
@@ -8,7 +8,7 @@
*/
package org.eclipse.hawkbit.ui.distributions.disttype.filter;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.grid.header.AbstractFilterHeader;
@@ -16,8 +16,6 @@ import org.eclipse.hawkbit.ui.common.state.TypeFilterLayoutUiState;
import org.eclipse.hawkbit.ui.distributions.disttype.DsTypeWindowBuilder;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -36,20 +34,16 @@ public class DSTypeFilterHeader extends AbstractFilterHeader {
/**
* Constructor
*
- * @param eventBus
- * DsTypeWindowBuilder
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTypeWindowBuilder
- * DsTypeWindowBuilder
+ * DsTypeWindowBuilder
* @param dSTypeFilterLayoutUiState
- * TypeFilterLayoutUiState
+ * TypeFilterLayoutUiState
*/
- DSTypeFilterHeader(final UIEventBus eventBus, final VaadinMessageSource i18n, final SpPermissionChecker permChecker,
- final DsTypeWindowBuilder dsTypeWindowBuilder, final TypeFilterLayoutUiState dSTypeFilterLayoutUiState) {
- super(i18n, permChecker, eventBus);
+ DSTypeFilterHeader(final CommonUiDependencies uiDependencies, final DsTypeWindowBuilder dsTypeWindowBuilder,
+ final TypeFilterLayoutUiState dSTypeFilterLayoutUiState) {
+ super(uiDependencies.getI18n(), uiDependencies.getPermChecker(), uiDependencies.getEventBus());
this.dSTypeFilterLayoutUiState = dSTypeFilterLayoutUiState;
this.dsTypeWindowBuilder = dsTypeWindowBuilder;
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterLayout.java
index 108d924bc..df0b92305 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/disttype/filter/DSTypeFilterLayout.java
@@ -13,10 +13,9 @@ import java.util.List;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
import org.eclipse.hawkbit.repository.SystemManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
@@ -30,9 +29,6 @@ import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGener
import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGridRefreshAwareSupport;
import org.eclipse.hawkbit.ui.common.state.TypeFilterLayoutUiState;
import org.eclipse.hawkbit.ui.distributions.disttype.DsTypeWindowBuilder;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.ComponentContainer;
@@ -50,17 +46,9 @@ public class DSTypeFilterLayout extends AbstractFilterLayout {
/**
* Constructor
- *
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
- * @param eventBus
- * UIEventBus
- * @param entityFactory
- * EntityFactory
- * @param uiNotification
- * UINotification
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param softwareModuleTypeManagement
* SoftwareModuleTypeManagement
* @param distributionSetTypeManagement
@@ -72,25 +60,23 @@ public class DSTypeFilterLayout extends AbstractFilterLayout {
* @param dSTypeFilterLayoutUiState
* TypeFilterLayoutUiState
*/
- public DSTypeFilterLayout(final VaadinMessageSource i18n, final SpPermissionChecker permChecker,
- final UIEventBus eventBus, final EntityFactory entityFactory, final UINotification uiNotification,
+ public DSTypeFilterLayout(final CommonUiDependencies uiDependencies,
final SoftwareModuleTypeManagement softwareModuleTypeManagement,
final DistributionSetTypeManagement distributionSetTypeManagement,
final DistributionSetManagement distributionSetManagement, final SystemManagement systemManagement,
final TypeFilterLayoutUiState dSTypeFilterLayoutUiState) {
- final DsTypeWindowBuilder dsTypeWindowBuilder = new DsTypeWindowBuilder(i18n, entityFactory, eventBus,
- uiNotification, distributionSetTypeManagement, distributionSetManagement, softwareModuleTypeManagement);
+ final DsTypeWindowBuilder dsTypeWindowBuilder = new DsTypeWindowBuilder(uiDependencies, distributionSetTypeManagement,
+ distributionSetManagement, softwareModuleTypeManagement);
- this.dsTypeFilterHeader = new DSTypeFilterHeader(eventBus, i18n, permChecker, dsTypeWindowBuilder,
- dSTypeFilterLayoutUiState);
- this.dSTypeFilterButtons = new DSTypeFilterButtons(eventBus, i18n, uiNotification, permChecker,
- distributionSetTypeManagement, systemManagement, dsTypeWindowBuilder, dSTypeFilterLayoutUiState);
+ this.dsTypeFilterHeader = new DSTypeFilterHeader(uiDependencies, dsTypeWindowBuilder, dSTypeFilterLayoutUiState);
+ this.dSTypeFilterButtons = new DSTypeFilterButtons(uiDependencies, distributionSetTypeManagement, systemManagement,
+ dsTypeWindowBuilder, dSTypeFilterLayoutUiState);
- this.gridActionsVisibilityListener = new GridActionsVisibilityListener(eventBus,
+ this.gridActionsVisibilityListener = new GridActionsVisibilityListener(uiDependencies.getEventBus(),
new EventLayoutViewAware(EventLayout.DS_TYPE_FILTER, EventView.DISTRIBUTIONS),
dSTypeFilterButtons::hideActionColumns, dSTypeFilterButtons::showEditColumn,
dSTypeFilterButtons::showDeleteColumn);
- this.entityModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyType.class)
+ this.entityModifiedListener = new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyType.class)
.entityModifiedAwareSupports(getEntityModifiedAwareSupports())
.parentEntityType(ProxyDistributionSet.class).build();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/AddDsWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/AddDsWindowController.java
index 63f3a200b..36fca626b 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/AddDsWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/AddDsWindowController.java
@@ -9,54 +9,39 @@
package org.eclipse.hawkbit.ui.distributions.dstable;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SystemManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractAddNamedEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityWindowLayout;
import org.eclipse.hawkbit.ui.common.data.mappers.DistributionSetToProxyDistributionMapper;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTypeInfo;
-import org.eclipse.hawkbit.ui.common.event.CommandTopics;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.SelectionChangedEventPayload;
import org.eclipse.hawkbit.ui.common.event.SelectionChangedEventPayload.SelectionChangedEventType;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
+import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for add distribution set window
*/
-public class AddDsWindowController extends AbstractEntityWindowController {
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class AddDsWindowController
+ extends AbstractAddNamedEntityWindowController {
+
private final SystemManagement systemManagement;
-
private final DistributionSetManagement dsManagement;
-
private final DsWindowLayout layout;
-
private final EventView view;
+ private final ProxyDsValidator validator;
/**
* Constructor for AddDsWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * VaadinMessageSource
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param systemManagement
* SystemManagement
* @param dsManagement
@@ -66,24 +51,19 @@ public class AddDsWindowController extends AbstractEntityWindowController getLayout() {
+ public EntityWindowLayout getLayout() {
return layout;
}
@@ -101,36 +81,39 @@ public class AddDsWindowController extends AbstractEntityWindowController(
- SelectionChangedEventType.ENTITY_SELECTED, addedItem, EventLayout.DS_LIST, view));
+ @Override
+ protected String getDisplayableNameForFailedMessage(final ProxyDistributionSet entity) {
+ return HawkbitCommonUtil.getFormattedNameVersion(entity.getName(), entity.getVersion());
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyDistributionSet.class;
+ }
+
+ @Override
+ protected void selectPersistedEntity(final DistributionSet entity) {
+ final ProxyDistributionSet addedItem = new DistributionSetToProxyDistributionMapper().map(entity);
+ publishSelectionEvent(new SelectionChangedEventPayload<>(SelectionChangedEventType.ENTITY_SELECTED, addedItem,
+ EventLayout.DS_LIST, view));
}
@Override
protected boolean isEntityValid(final ProxyDistributionSet entity) {
- if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getVersion())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.nameorversion"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
final String trimmedVersion = StringUtils.trimWhitespace(entity.getVersion());
- if (dsManagement.getByNameAndVersion(trimmedName, trimmedVersion).isPresent()) {
- uiNotification
- .displayValidationError(i18n.getMessage("message.duplicate.dist", trimmedName, trimmedVersion));
- return false;
- }
-
- return true;
+ return validator.isEntityValid(entity,
+ () -> dsManagement.getByNameAndVersion(trimmedName, trimmedVersion).isPresent());
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetGrid.java
index 514cdff29..8b83ad470 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetGrid.java
@@ -16,13 +16,13 @@ import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.filters.DsDistributionsFilterParams;
import org.eclipse.hawkbit.ui.common.data.providers.DistributionSetDistributionsStateDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.distributionset.AbstractDsGrid;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.FilterType;
-import org.eclipse.hawkbit.ui.common.grid.AbstractDsGrid;
import org.eclipse.hawkbit.ui.common.grid.support.DragAndDropSupport;
import org.eclipse.hawkbit.ui.common.grid.support.FilterSupport;
import org.eclipse.hawkbit.ui.common.grid.support.assignment.AssignmentSupport;
@@ -31,9 +31,6 @@ import org.eclipse.hawkbit.ui.common.state.GridLayoutUiState;
import org.eclipse.hawkbit.ui.common.state.TypeFilterLayoutUiState;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Distribution set grid which is shown on the Distributions View.
@@ -46,38 +43,29 @@ public class DistributionSetGrid extends AbstractDsGrid dsFilterListener;
- private final transient SelectionChangedListener masterDsChangedListener;
- private final transient SelectGridEntityListener selectDsListener;
- private final transient EntityModifiedListener dsModifiedListener;
- private final transient EntityModifiedListener tagModifiedListener;
-
/**
* Constructor for DistributionSetGridLayout
*
- * @param i18n
- * VaadinMessageSource
- * @param eventBus
- * UIEventBus
- * @param permissionChecker
- * SpPermissionChecker
- * @param uiNotification
- * UINotification
- * @param entityFactory
- * EntityFactory
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetManagement
- * TargetManagement
+ * TargetManagement
* @param targetFilterQueryManagement
- * TargetFilterQueryManagement
+ * TargetFilterQueryManagement
* @param distributionSetManagement
- * DistributionSetManagement
+ * DistributionSetManagement
* @param smManagement
- * SoftwareModuleManagement
+ * SoftwareModuleManagement
* @param distributionSetTypeManagement
- * DistributionSetTypeManagement
+ * DistributionSetTypeManagement
* @param distributionSetTagManagement
- * DistributionSetTagManagement
+ * DistributionSetTagManagement
* @param smTypeManagement
- * SoftwareModuleTypeManagement
+ * SoftwareModuleTypeManagement
* @param systemManagement
- * SystemManagement
+ * SystemManagement
* @param configManagement
- * TenantConfigurationManagement
+ * TenantConfigurationManagement
* @param systemSecurityContext
- * SystemSecurityContext
+ * SystemSecurityContext
* @param dSTypeFilterLayoutUiState
- * TypeFilterLayoutUiState
+ * TypeFilterLayoutUiState
* @param distributionSetGridLayoutUiState
- * GridLayoutUiState
+ * GridLayoutUiState
*/
- public DistributionSetGridLayout(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final SpPermissionChecker permissionChecker, final UINotification uiNotification,
- final EntityFactory entityFactory, final TargetManagement targetManagement,
+ public DistributionSetGridLayout(final CommonUiDependencies uiDependencies, final TargetManagement targetManagement,
final TargetFilterQueryManagement targetFilterQueryManagement,
final DistributionSetManagement distributionSetManagement, final SoftwareModuleManagement smManagement,
final DistributionSetTypeManagement distributionSetTypeManagement,
@@ -114,42 +95,40 @@ public class DistributionSetGridLayout extends AbstractGridComponentLayout {
final TenantConfigurationManagement configManagement, final SystemSecurityContext systemSecurityContext,
final TypeFilterLayoutUiState dSTypeFilterLayoutUiState,
final GridLayoutUiState distributionSetGridLayoutUiState) {
- final DsWindowBuilder dsWindowBuilder = new DsWindowBuilder(i18n, entityFactory, eventBus, uiNotification,
- systemManagement, systemSecurityContext, configManagement, distributionSetManagement,
+ super(uiDependencies, systemManagement, systemSecurityContext, configManagement, distributionSetManagement,
distributionSetTypeManagement, EventView.DISTRIBUTIONS);
- final DsMetaDataWindowBuilder dsMetaDataWindowBuilder = new DsMetaDataWindowBuilder(i18n, entityFactory,
- eventBus, uiNotification, permissionChecker, distributionSetManagement);
- this.distributionSetGridHeader = new DistributionSetGridHeader(i18n, permissionChecker, eventBus,
- dSTypeFilterLayoutUiState, distributionSetGridLayoutUiState, EventLayout.DS_TYPE_FILTER,
- EventView.DISTRIBUTIONS);
- this.distributionSetGridHeader.addAddHeaderSupport(dsWindowBuilder);
+ this.distributionSetGridHeader = new DistributionSetGridHeader(uiDependencies, dSTypeFilterLayoutUiState,
+ distributionSetGridLayoutUiState, EventLayout.DS_TYPE_FILTER, getEventView());
+ this.distributionSetGridHeader.addAddHeaderSupport(getDsWindowBuilder());
this.distributionSetGridHeader.buildHeader();
- this.distributionSetGrid = new DistributionSetGrid(eventBus, i18n, permissionChecker, uiNotification,
- targetManagement, distributionSetManagement, smManagement, distributionSetTypeManagement,
- smTypeManagement, dSTypeFilterLayoutUiState, distributionSetGridLayoutUiState);
- this.distributionSetDetailsHeader = new DistributionSetDetailsHeader(i18n, permissionChecker, eventBus,
- uiNotification, dsWindowBuilder, dsMetaDataWindowBuilder);
- this.distributionSetDetails = new DistributionSetDetails(i18n, eventBus, permissionChecker, uiNotification,
- distributionSetManagement, smManagement, distributionSetTypeManagement, distributionSetTagManagement,
- configManagement, systemSecurityContext, dsMetaDataWindowBuilder);
+ this.distributionSetGrid = new DistributionSetGrid(uiDependencies, targetManagement, distributionSetManagement,
+ smManagement, distributionSetTypeManagement, smTypeManagement, dSTypeFilterLayoutUiState,
+ distributionSetGridLayoutUiState);
+
+ this.distributionSetDetailsHeader = new DistributionSetDetailsHeader(uiDependencies, getDsWindowBuilder(),
+ getDsMetaDataWindowBuilder());
+
+ this.distributionSetDetails = new DistributionSetDetails(uiDependencies, distributionSetManagement, smManagement,
+ distributionSetTypeManagement, distributionSetTagManagement, configManagement, systemSecurityContext,
+ getDsMetaDataWindowBuilder());
this.distributionSetDetails.setUnassignSmAllowed(true);
this.distributionSetDetails.addTfqDetailsGrid(targetFilterQueryManagement);
this.distributionSetDetails.buildDetails();
- this.dsFilterListener = new FilterChangedListener<>(eventBus, ProxyDistributionSet.class,
- new EventViewAware(EventView.DISTRIBUTIONS), distributionSetGrid.getFilterSupport());
- this.masterDsChangedListener = new SelectionChangedListener<>(eventBus,
- new EventLayoutViewAware(EventLayout.DS_LIST, EventView.DISTRIBUTIONS), getDsEntityAwareComponents());
- this.selectDsListener = new SelectGridEntityListener<>(eventBus,
- new EventLayoutViewAware(EventLayout.DS_LIST, EventView.DISTRIBUTIONS),
- distributionSetGrid.getSelectionSupport());
- this.dsModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyDistributionSet.class)
- .entityModifiedAwareSupports(getDsModifiedAwareSupports()).build();
- this.tagModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyTag.class)
+ addEventListener(new FilterChangedListener<>(uiDependencies.getEventBus(), ProxyDistributionSet.class,
+ new EventViewAware(getEventView()), distributionSetGrid.getFilterSupport()));
+ addEventListener(new SelectionChangedListener<>(uiDependencies.getEventBus(),
+ new EventLayoutViewAware(EventLayout.DS_LIST, getEventView()), getDsEntityAwareComponents()));
+ addEventListener(new SelectGridEntityListener<>(uiDependencies.getEventBus(),
+ new EventLayoutViewAware(EventLayout.DS_LIST, getEventView()),
+ distributionSetGrid.getSelectionSupport()));
+ addEventListener(new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyDistributionSet.class)
+ .entityModifiedAwareSupports(getDsModifiedAwareSupports()).build());
+ addEventListener(new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyTag.class)
.entityModifiedAwareSupports(getTagModifiedAwareSupports()).parentEntityType(ProxyDistributionSet.class)
- .build();
+ .build());
buildLayout(distributionSetGridHeader, distributionSetGrid, distributionSetDetailsHeader,
distributionSetDetails);
@@ -170,52 +149,13 @@ public class DistributionSetGridLayout extends AbstractGridComponentLayout {
.singletonList(EntityModifiedTagTokenAwareSupport.of(distributionSetDetails.getDistributionTagToken()));
}
- /**
- * Show distribution set type header icon
- */
- public void showDsTypeHeaderIcon() {
- distributionSetGridHeader.showFilterIcon();
+ @Override
+ public DistributionSetGrid getDistributionGrid() {
+ return distributionSetGrid;
}
- /**
- * Hide distribution set type header icon
- */
- public void hideDsTypeHeaderIcon() {
- distributionSetGridHeader.hideFilterIcon();
- }
-
- /**
- * Maximize the distribution set grid
- */
- public void maximize() {
- distributionSetGrid.createMaximizedContent();
- hideDetailsLayout();
- }
-
- /**
- * Minimize the distribution set grid
- */
- public void minimize() {
- distributionSetGrid.createMinimizedContent();
- showDetailsLayout();
- }
-
- /**
- * Restore the distribution set header and grid
- */
- public void restoreState() {
- distributionSetGridHeader.restoreState();
- distributionSetGrid.restoreState();
- }
-
- /**
- * Unsubscribe the eent listener
- */
- public void unsubscribeListener() {
- dsFilterListener.unsubscribe();
- masterDsChangedListener.unsubscribe();
- selectDsListener.unsubscribe();
- dsModifiedListener.unsubscribe();
- tagModifiedListener.unsubscribe();
+ @Override
+ public DistributionSetGridHeader getDistributionSetGridHeader() {
+ return distributionSetGridHeader;
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetaDataWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetaDataWindowLayout.java
index 3fb2868b3..b0ad9cde2 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetaDataWindowLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DsMetaDataWindowLayout.java
@@ -11,9 +11,8 @@ package org.eclipse.hawkbit.ui.distributions.dstable;
import java.util.Collections;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.model.MetaData;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.providers.DsMetaDataDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyMetaData;
@@ -25,9 +24,6 @@ import org.eclipse.hawkbit.ui.common.detailslayout.UpdateMetaDataWindowControlle
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Class for metadata add/update window layout.
@@ -36,7 +32,6 @@ public class DsMetaDataWindowLayout extends AbstractMetaDataWindowLayout {
private static final long serialVersionUID = 1L;
private final transient DistributionSetManagement dsManagement;
- private final transient EntityFactory entityFactory;
private final MetaDataWindowGrid dsMetaDataWindowGrid;
@@ -46,36 +41,26 @@ public class DsMetaDataWindowLayout extends AbstractMetaDataWindowLayout {
/**
* Constructor for AbstractTagWindowLayout
- *
- * @param i18n
- * I18N
- * @param eventBus
- * UIEventBus
- * @param permChecker
- * SpPermissionChecker
- * @param uiNotification
- * UINotification
- * @param entityFactory
- * EntityFactory
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsManagement
* DistributionSetManagement
*/
- public DsMetaDataWindowLayout(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final SpPermissionChecker permChecker, final UINotification uiNotification,
- final EntityFactory entityFactory, final DistributionSetManagement dsManagement) {
- super(i18n, eventBus, uiNotification, permChecker);
+ public DsMetaDataWindowLayout(final CommonUiDependencies uiDependencies,
+ final DistributionSetManagement dsManagement) {
+ super(uiDependencies);
this.dsManagement = dsManagement;
- this.entityFactory = entityFactory;
- this.dsMetaDataWindowGrid = new MetaDataWindowGrid<>(i18n, eventBus, permChecker, uiNotification,
- new DsMetaDataDataProvider(dsManagement), this::hasMetadataChangePermission, this::deleteMetaData);
+ this.dsMetaDataWindowGrid = new MetaDataWindowGrid<>(uiDependencies, new DsMetaDataDataProvider(dsManagement),
+ this::hasMetadataChangePermission,this::deleteMetaData);
- this.metaDataAddUpdateWindowLayout = new MetaDataAddUpdateWindowLayout(i18n, this::hasMetadataChangePermission);
- this.addDsMetaDataWindowController = new AddMetaDataWindowController(i18n, uiNotification,
+ this.metaDataAddUpdateWindowLayout = new MetaDataAddUpdateWindowLayout(i18n,this::hasMetadataChangePermission);
+ this.addDsMetaDataWindowController = new AddMetaDataWindowController(uiDependencies,
metaDataAddUpdateWindowLayout, this::createMetaData, this::isDuplicate);
- this.updateDsMetaDataWindowController = new UpdateMetaDataWindowController(i18n, uiNotification,
- metaDataAddUpdateWindowLayout, this::updateMetaData);
+ this.updateDsMetaDataWindowController = new UpdateMetaDataWindowController(uiDependencies,
+ metaDataAddUpdateWindowLayout, this::updateMetaData, this::isDuplicate);
buildLayout();
addGridSelectionListener();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ProxyDsValidator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ProxyDsValidator.java
new file mode 100644
index 000000000..a40970cca
--- /dev/null
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/ProxyDsValidator.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2020 Bosch.IO GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.hawkbit.ui.distributions.dstable;
+
+import java.util.function.BooleanSupplier;
+
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityValidator;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.springframework.util.StringUtils;
+
+/**
+ * Validator used in target window controllers to validate {@link ProxyDistributionSet}.
+ */
+public class ProxyDsValidator extends EntityValidator {
+
+ /**
+ * Constructor
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
+ */
+ public ProxyDsValidator(final CommonUiDependencies uiDependencies) {
+ super(uiDependencies);
+ }
+
+ boolean isEntityValid(final ProxyDistributionSet entity, final BooleanSupplier duplicateCheck) {
+ if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getVersion())) {
+ displayValidationError("message.error.missing.nameorversion");
+ return false;
+ }
+
+ final String trimmedName = StringUtils.trimWhitespace(entity.getName());
+ final String trimmedVersion = StringUtils.trimWhitespace(entity.getVersion());
+ if (duplicateCheck.getAsBoolean()) {
+ displayValidationError("message.duplicate.dist", trimmedName, trimmedVersion);
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/UpdateDsWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/UpdateDsWindowController.java
index 27e5f1dc6..d44f24ea3 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/UpdateDsWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/UpdateDsWindowController.java
@@ -9,72 +9,46 @@
package org.eclipse.hawkbit.ui.distributions.dstable;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.builder.DistributionSetUpdate;
-import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
-import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException;
import org.eclipse.hawkbit.repository.model.DistributionSet;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractUpdateNamedEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityWindowLayout;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
+import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for update distribution set window
*/
public class UpdateDsWindowController
- extends AbstractEntityWindowController {
- private static final Logger LOG = LoggerFactory.getLogger(UpdateDsWindowController.class);
-
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+ extends AbstractUpdateNamedEntityWindowController {
private final DistributionSetManagement dsManagement;
-
private final DsWindowLayout layout;
+ private final ProxyDsValidator validator;
+
+ private String nameBeforeEdit;
+ private String versionBeforeEdit;
/**
* Constructor for UpdateDsWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsManagement
* DistributionSetManagement
* @param layout
* DsWindowLayout
*/
- public UpdateDsWindowController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public UpdateDsWindowController(final CommonUiDependencies uiDependencies,
final DistributionSetManagement dsManagement, final DsWindowLayout layout) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.dsManagement = dsManagement;
-
this.layout = layout;
- }
-
- @Override
- public AbstractEntityWindowLayout getLayout() {
- return layout;
+ this.validator = new ProxyDsValidator(uiDependencies);
}
@Override
@@ -88,50 +62,54 @@ public class UpdateDsWindowController
ds.setDescription(proxyEntity.getDescription());
ds.setRequiredMigrationStep(proxyEntity.isRequiredMigrationStep());
+ nameBeforeEdit = proxyEntity.getName();
+ versionBeforeEdit = proxyEntity.getVersion();
+
return ds;
}
+ @Override
+ public EntityWindowLayout getLayout() {
+ return layout;
+ }
+
@Override
protected void adaptLayout(final ProxyDistributionSet proxyEntity) {
layout.disableDsTypeSelect();
}
@Override
- protected void persistEntity(final ProxyDistributionSet entity) {
- final DistributionSetUpdate dsUpdate = entityFactory.distributionSet().update(entity.getId())
+ protected DistributionSet persistEntityInRepository(final ProxyDistributionSet entity) {
+ final DistributionSetUpdate dsUpdate = getEntityFactory().distributionSet().update(entity.getId())
.name(entity.getName()).version(entity.getVersion()).description(entity.getDescription())
.requiredMigrationStep(entity.isRequiredMigrationStep());
+ return dsManagement.update(dsUpdate);
+ }
- try {
- final DistributionSet updatedDs = dsManagement.update(dsUpdate);
+ @Override
+ protected String getDisplayableName(final DistributionSet entity) {
+ return HawkbitCommonUtil.getFormattedNameVersion(entity.getName(), entity.getVersion());
+ }
- uiNotification.displaySuccess(
- i18n.getMessage("message.update.success", updatedDs.getName() + ":" + updatedDs.getVersion()));
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this, new EntityModifiedEventPayload(
- EntityModifiedEventType.ENTITY_UPDATED, ProxyDistributionSet.class, updatedDs.getId()));
- } catch (final EntityNotFoundException | EntityReadOnlyException e) {
- LOG.trace("Update of distribution set failed in UI: {}", e.getMessage());
- final String entityType = i18n.getMessage("caption.distribution");
- uiNotification
- .displayWarning(i18n.getMessage("message.deleted.or.notAllowed", entityType, entity.getName()));
- }
+ @Override
+ protected String getDisplayableNameForFailedMessage(final ProxyDistributionSet entity) {
+ return HawkbitCommonUtil.getFormattedNameVersion(entity.getName(), entity.getVersion());
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyDistributionSet.class;
}
@Override
protected boolean isEntityValid(final ProxyDistributionSet entity) {
- if (!StringUtils.hasText(entity.getName()) || !StringUtils.hasText(entity.getVersion())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.nameorversion"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
final String trimmedVersion = StringUtils.trimWhitespace(entity.getVersion());
- if (dsManagement.getByNameAndVersion(trimmedName, trimmedVersion).isPresent()) {
- uiNotification
- .displayValidationError(i18n.getMessage("message.duplicate.dist", trimmedName, trimmedVersion));
- return false;
- }
+ return validator.isEntityValid(entity, () -> hasNameOrVersionChanged(trimmedName, trimmedVersion)
+ && dsManagement.getByNameAndVersion(trimmedName, trimmedVersion).isPresent());
+ }
- return true;
+ private boolean hasNameOrVersionChanged(final String trimmedName, final String trimmedVersion) {
+ return !nameBeforeEdit.equals(trimmedName) || !versionBeforeEdit.equals(trimmedVersion);
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleGridLayout.java
index ec4a46de3..0ea7ddf15 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleGridLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtable/SwModuleGridLayout.java
@@ -13,14 +13,11 @@ import java.util.Collections;
import java.util.List;
import org.eclipse.hawkbit.repository.ArtifactManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
-import org.eclipse.hawkbit.ui.artifacts.smtable.SmMetaDataWindowBuilder;
-import org.eclipse.hawkbit.ui.artifacts.smtable.SmWindowBuilder;
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleGrid;
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleGridHeader;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxySoftwareModule;
import org.eclipse.hawkbit.ui.common.detailslayout.SoftwareModuleDetails;
@@ -29,7 +26,6 @@ import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventLayoutViewAware;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.EventViewAware;
-import org.eclipse.hawkbit.ui.common.layout.AbstractGridComponentLayout;
import org.eclipse.hawkbit.ui.common.layout.MasterEntityAwareComponent;
import org.eclipse.hawkbit.ui.common.layout.listener.EntityModifiedListener;
import org.eclipse.hawkbit.ui.common.layout.listener.EntityModifiedListener.EntityModifiedAwareSupport;
@@ -38,16 +34,14 @@ import org.eclipse.hawkbit.ui.common.layout.listener.SelectGridEntityListener;
import org.eclipse.hawkbit.ui.common.layout.listener.SelectionChangedListener;
import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGridRefreshAwareSupport;
import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedSelectionAwareSupport;
+import org.eclipse.hawkbit.ui.common.softwaremodule.AbstractSoftwareModuleGridLayout;
import org.eclipse.hawkbit.ui.common.state.GridLayoutUiState;
import org.eclipse.hawkbit.ui.common.state.TypeFilterLayoutUiState;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Implementation of software module Layout on the Distribution View
*/
-public class SwModuleGridLayout extends AbstractGridComponentLayout {
+public class SwModuleGridLayout extends AbstractSoftwareModuleGridLayout {
private static final long serialVersionUID = 1L;
private final SoftwareModuleGridHeader swModuleGridHeader;
@@ -55,29 +49,15 @@ public class SwModuleGridLayout extends AbstractGridComponentLayout {
private final SoftwareModuleDetailsHeader softwareModuleDetailsHeader;
private final SoftwareModuleDetails swModuleDetails;
- private final transient FilterChangedListener smFilterListener;
- private final transient SelectionChangedListener masterDsChangedListener;
- private final transient SelectionChangedListener masterSmChangedListener;
- private final transient SelectGridEntityListener selectSmListener;
- private final transient EntityModifiedListener smModifiedListener;
-
/**
* Constructor for SwModuleGridLayout
*
- * @param i18n
- * VaadinMessageSource
- * @param uiNotification
- * UINotification
- * @param eventBus
- * UIEventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param softwareModuleManagement
* SoftwareModuleManagement
* @param softwareModuleTypeManagement
* SoftwareModuleTypeManagement
- * @param entityFactory
- * EntityFactory
- * @param permChecker
- * SpPermissionChecker
* @param artifactManagement
* ArtifactManagement
* @param smTypeFilterLayoutUiState
@@ -85,48 +65,39 @@ public class SwModuleGridLayout extends AbstractGridComponentLayout {
* @param swModuleGridLayoutUiState
* GridLayoutUiState
*/
- public SwModuleGridLayout(final VaadinMessageSource i18n, final UINotification uiNotification,
- final UIEventBus eventBus, final SoftwareModuleManagement softwareModuleManagement,
- final SoftwareModuleTypeManagement softwareModuleTypeManagement, final EntityFactory entityFactory,
- final SpPermissionChecker permChecker, final ArtifactManagement artifactManagement,
- final TypeFilterLayoutUiState smTypeFilterLayoutUiState,
+ public SwModuleGridLayout(final CommonUiDependencies uiDependencies, final SoftwareModuleManagement softwareModuleManagement,
+ final SoftwareModuleTypeManagement softwareModuleTypeManagement,
+ final ArtifactManagement artifactManagement, final TypeFilterLayoutUiState smTypeFilterLayoutUiState,
final GridLayoutUiState swModuleGridLayoutUiState) {
- super();
+ super(uiDependencies, softwareModuleManagement, softwareModuleTypeManagement, EventView.DISTRIBUTIONS);
- final SmWindowBuilder smWindowBuilder = new SmWindowBuilder(i18n, entityFactory, eventBus, uiNotification,
- softwareModuleManagement, softwareModuleTypeManagement, EventView.DISTRIBUTIONS);
- final SmMetaDataWindowBuilder smMetaDataWindowBuilder = new SmMetaDataWindowBuilder(i18n, entityFactory,
- eventBus, uiNotification, permChecker, softwareModuleManagement);
-
- this.swModuleGridHeader = new SoftwareModuleGridHeader(i18n, permChecker, eventBus, smTypeFilterLayoutUiState,
- swModuleGridLayoutUiState, smWindowBuilder, EventView.DISTRIBUTIONS);
+ this.swModuleGridHeader = new SoftwareModuleGridHeader(uiDependencies, smTypeFilterLayoutUiState,
+ swModuleGridLayoutUiState, getSmWindowBuilder(), getEventView());
this.swModuleGridHeader.buildHeader();
- this.swModuleGrid = new SoftwareModuleGrid(eventBus, i18n, permChecker, uiNotification,
- smTypeFilterLayoutUiState, swModuleGridLayoutUiState, softwareModuleManagement,
- EventView.DISTRIBUTIONS);
+ this.swModuleGrid = new SoftwareModuleGrid(uiDependencies, smTypeFilterLayoutUiState, swModuleGridLayoutUiState,
+ softwareModuleManagement, getEventView());
this.swModuleGrid.addDragAndDropSupport();
this.swModuleGrid.addMasterSupport();
this.swModuleGrid.init();
- this.softwareModuleDetailsHeader = new SoftwareModuleDetailsHeader(i18n, permChecker, eventBus, uiNotification,
- smWindowBuilder, smMetaDataWindowBuilder);
+ this.softwareModuleDetailsHeader = new SoftwareModuleDetailsHeader(uiDependencies, getSmWindowBuilder(),
+ getSmMetaDataWindowBuilder());
this.softwareModuleDetailsHeader.addArtifactDetailsHeaderSupport(artifactManagement);
this.softwareModuleDetailsHeader.buildHeader();
- this.swModuleDetails = new SoftwareModuleDetails(i18n, eventBus, softwareModuleManagement,
- softwareModuleTypeManagement, smMetaDataWindowBuilder);
+ this.swModuleDetails = new SoftwareModuleDetails(uiDependencies, softwareModuleManagement,
+ softwareModuleTypeManagement, getSmMetaDataWindowBuilder());
this.swModuleDetails.buildDetails();
- this.smFilterListener = new FilterChangedListener<>(eventBus, ProxySoftwareModule.class,
- new EventViewAware(EventView.DISTRIBUTIONS), swModuleGrid.getFilterSupport());
- this.masterDsChangedListener = new SelectionChangedListener<>(eventBus,
- new EventLayoutViewAware(EventLayout.DS_LIST, EventView.DISTRIBUTIONS), getMasterDsAwareComponents());
- this.masterSmChangedListener = new SelectionChangedListener<>(eventBus,
- new EventLayoutViewAware(EventLayout.SM_LIST, EventView.DISTRIBUTIONS), getMasterSmAwareComponents());
- this.selectSmListener = new SelectGridEntityListener<>(eventBus,
- new EventLayoutViewAware(EventLayout.SM_LIST, EventView.DISTRIBUTIONS),
- swModuleGrid.getSelectionSupport());
- this.smModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxySoftwareModule.class)
- .entityModifiedAwareSupports(getSmModifiedAwareSupports()).build();
+ addEventListener(new FilterChangedListener<>(uiDependencies.getEventBus(), ProxySoftwareModule.class,
+ new EventViewAware(getEventView()), swModuleGrid.getFilterSupport()));
+ addEventListener(new SelectionChangedListener<>(uiDependencies.getEventBus(),
+ new EventLayoutViewAware(EventLayout.DS_LIST, getEventView()), getMasterDsAwareComponents()));
+ addEventListener(new SelectionChangedListener<>(uiDependencies.getEventBus(),
+ new EventLayoutViewAware(EventLayout.SM_LIST, getEventView()), getMasterSmAwareComponents()));
+ addEventListener(new SelectGridEntityListener<>(uiDependencies.getEventBus(),
+ new EventLayoutViewAware(EventLayout.SM_LIST, getEventView()), swModuleGrid.getSelectionSupport()));
+ addEventListener(new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxySoftwareModule.class)
+ .entityModifiedAwareSupports(getSmModifiedAwareSupports()).build());
buildLayout(swModuleGridHeader, swModuleGrid, softwareModuleDetailsHeader, swModuleDetails);
}
@@ -145,52 +116,13 @@ public class SwModuleGridLayout extends AbstractGridComponentLayout {
swModuleGrid::mapIdToProxyEntity));
}
- /**
- * Show software type module header icon
- */
- public void showSmTypeHeaderIcon() {
- swModuleGridHeader.showFilterIcon();
+ @Override
+ protected SoftwareModuleGridHeader getSoftwareModuleGridHeader() {
+ return swModuleGridHeader;
}
- /**
- * Hide software type module header icon
- */
- public void hideSmTypeHeaderIcon() {
- swModuleGridHeader.hideFilterIcon();
- }
-
- /**
- * Maximize the software module grid
- */
- public void maximize() {
- swModuleGrid.createMaximizedContent();
- hideDetailsLayout();
- }
-
- /**
- * Minimize the software module grid
- */
- public void minimize() {
- swModuleGrid.createMinimizedContent();
- showDetailsLayout();
- }
-
- /**
- * Restore the software module grid and header
- */
- public void restoreState() {
- swModuleGridHeader.restoreState();
- swModuleGrid.restoreState();
- }
-
- /**
- * Unsubscribe the event listener
- */
- public void unsubscribeListener() {
- smFilterListener.unsubscribe();
- masterDsChangedListener.unsubscribe();
- masterSmChangedListener.unsubscribe();
- selectSmListener.unsubscribe();
- smModifiedListener.unsubscribe();
+ @Override
+ protected SoftwareModuleGrid getSoftwareModuleGrid() {
+ return swModuleGrid;
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/filter/DistSMTypeFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/filter/DistSMTypeFilterLayout.java
index aba00ee24..e366d5f8d 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/filter/DistSMTypeFilterLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/smtype/filter/DistSMTypeFilterLayout.java
@@ -8,123 +8,45 @@
*/
package org.eclipse.hawkbit.ui.distributions.smtype.filter;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
-import org.eclipse.hawkbit.ui.artifacts.smtype.SmTypeWindowBuilder;
-import org.eclipse.hawkbit.ui.artifacts.smtype.filter.SMTypeFilterButtons;
-import org.eclipse.hawkbit.ui.artifacts.smtype.filter.SMTypeFilterHeader;
-import org.eclipse.hawkbit.ui.common.data.proxies.ProxySoftwareModule;
-import org.eclipse.hawkbit.ui.common.data.proxies.ProxyType;
-import org.eclipse.hawkbit.ui.common.event.EventLayout;
-import org.eclipse.hawkbit.ui.common.event.EventLayoutViewAware;
+import org.eclipse.hawkbit.ui.artifacts.smtype.filter.SMTypeFilterLayout;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.event.EventView;
-import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterLayout;
-import org.eclipse.hawkbit.ui.common.layout.listener.EntityModifiedListener;
-import org.eclipse.hawkbit.ui.common.layout.listener.EntityModifiedListener.EntityModifiedAwareSupport;
-import org.eclipse.hawkbit.ui.common.layout.listener.GridActionsVisibilityListener;
-import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGenericSupport;
-import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGridRefreshAwareSupport;
import org.eclipse.hawkbit.ui.common.state.TypeFilterLayoutUiState;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
-
-import com.vaadin.ui.ComponentContainer;
/**
* Software Module Type filter layout.
*/
-public class DistSMTypeFilterLayout extends AbstractFilterLayout {
+public class DistSMTypeFilterLayout extends SMTypeFilterLayout {
private static final long serialVersionUID = 1L;
- private final SMTypeFilterHeader smTypeFilterHeader;
- private final SMTypeFilterButtons smTypeFilterButtons;
-
- private final transient GridActionsVisibilityListener gridActionsVisibilityListener;
- private final transient EntityModifiedListener entityModifiedListener;
-
private final transient SmTypeCssStylesHandler smTypeCssStylesHandler;
/**
* Constructor
- *
- * @param eventBus
- * UIEventBus
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
- * @param entityFactory
- * EntityFactory
- * @param uiNotification
- * UINotification
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param softwareModuleTypeManagement
* SoftwareModuleTypeManagement
* @param smTypeFilterLayoutUiState
* TypeFilterLayoutUiState
*/
- public DistSMTypeFilterLayout(final UIEventBus eventBus, final VaadinMessageSource i18n,
- final SpPermissionChecker permChecker, final EntityFactory entityFactory,
- final UINotification uiNotification, final SoftwareModuleTypeManagement softwareModuleTypeManagement,
+ public DistSMTypeFilterLayout(final CommonUiDependencies uiDependencies,
+ final SoftwareModuleTypeManagement softwareModuleTypeManagement,
final TypeFilterLayoutUiState smTypeFilterLayoutUiState) {
- final SmTypeWindowBuilder smTypeWindowBuilder = new SmTypeWindowBuilder(i18n, entityFactory, eventBus,
- uiNotification, softwareModuleTypeManagement);
-
- this.smTypeFilterHeader = new SMTypeFilterHeader(eventBus, i18n, permChecker, smTypeWindowBuilder,
- smTypeFilterLayoutUiState, EventView.DISTRIBUTIONS);
- this.smTypeFilterButtons = new SMTypeFilterButtons(eventBus, i18n, uiNotification, permChecker,
- softwareModuleTypeManagement, smTypeWindowBuilder, smTypeFilterLayoutUiState, EventView.DISTRIBUTIONS);
-
- this.gridActionsVisibilityListener = new GridActionsVisibilityListener(eventBus,
- new EventLayoutViewAware(EventLayout.SM_TYPE_FILTER, EventView.DISTRIBUTIONS),
- smTypeFilterButtons::hideActionColumns, smTypeFilterButtons::showEditColumn,
- smTypeFilterButtons::showDeleteColumn);
- this.entityModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyType.class)
- .entityModifiedAwareSupports(getEntityModifiedAwareSupports())
- .parentEntityType(ProxySoftwareModule.class).build();
+ super(uiDependencies, softwareModuleTypeManagement, smTypeFilterLayoutUiState, EventView.DISTRIBUTIONS);
this.smTypeCssStylesHandler = new SmTypeCssStylesHandler(softwareModuleTypeManagement);
this.smTypeCssStylesHandler.updateSmTypeStyles();
- buildLayout();
- }
-
- private List getEntityModifiedAwareSupports() {
- return Arrays.asList(EntityModifiedGridRefreshAwareSupport.of(this::refreshFilterButtons),
- EntityModifiedGenericSupport.of(null, null, smTypeFilterButtons::resetFilterOnTypesDeleted));
- }
-
- private void refreshFilterButtons() {
- smTypeFilterButtons.refreshAll();
- smTypeCssStylesHandler.updateSmTypeStyles();
+ // buildLayout(); was already called in super(...)
}
@Override
- protected SMTypeFilterHeader getFilterHeader() {
- return smTypeFilterHeader;
- }
+ protected void refreshFilterButtons() {
+ super.refreshFilterButtons();
- @Override
- protected ComponentContainer getFilterContent() {
- return wrapFilterContent(smTypeFilterButtons);
- }
-
- /**
- * Restore the software module type filter button
- */
- public void restoreState() {
- smTypeFilterButtons.restoreState();
- }
-
- /**
- * Unsubscribe the event listener
- */
- public void unsubscribeListener() {
- gridActionsVisibilityListener.unsubscribe();
- entityModifiedListener.unsubscribe();
+ this.smTypeCssStylesHandler.updateSmTypeStyles();
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AddTargetFilterController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AddTargetFilterController.java
index b4008fdd3..b40a41ebe 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AddTargetFilterController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AddTargetFilterController.java
@@ -8,19 +8,14 @@
*/
package org.eclipse.hawkbit.ui.filtermanagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetFilterQueryManagement;
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractAddEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTargetFilterQuery;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for add target filter
@@ -29,54 +24,38 @@ import org.vaadin.spring.events.EventBus.UIEventBus;
*
*/
public class AddTargetFilterController
- extends AbstractEntityWindowController {
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+ extends AbstractAddEntityWindowController {
private final TargetFilterQueryManagement targetFilterManagement;
-
private final TargetFilterAddUpdateLayout layout;
-
private final Runnable closeFormCallback;
+ private final ProxyTargetFilterValidator validator;
/**
* Constructor for AddTargetFilterController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetFilterManagement
- * TargetFilterQueryManagement
+ * TargetFilterQueryManagement
* @param layout
- * TargetFilterAddUpdateLayout
+ * TargetFilterAddUpdateLayout
* @param closeFormCallback
- * Runnable
+ * Runnable
*/
- public AddTargetFilterController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public AddTargetFilterController(final CommonUiDependencies uiDependencies,
final TargetFilterQueryManagement targetFilterManagement, final TargetFilterAddUpdateLayout layout,
final Runnable closeFormCallback) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.targetFilterManagement = targetFilterManagement;
-
this.layout = layout;
-
this.closeFormCallback = closeFormCallback;
+ this.validator = new ProxyTargetFilterValidator(uiDependencies);
}
@Override
- public AbstractEntityWindowLayout getLayout() {
+ public EntityWindowLayout getLayout() {
return layout;
}
@@ -86,30 +65,39 @@ public class AddTargetFilterController
}
@Override
- protected void persistEntity(final ProxyTargetFilterQuery entity) {
- final TargetFilterQuery newTargetFilter = targetFilterManagement
- .create(entityFactory.targetFilterQuery().create().name(entity.getName()).query(entity.getQuery()));
-
- uiNotification.displaySuccess(i18n.getMessage("message.save.success", newTargetFilter.getName()));
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this, new EntityModifiedEventPayload(
- EntityModifiedEventType.ENTITY_ADDED, ProxyTargetFilterQuery.class, newTargetFilter.getId()));
+ protected TargetFilterQuery persistEntityInRepository(final ProxyTargetFilterQuery entity) {
+ return targetFilterManagement.create(
+ getEntityFactory().targetFilterQuery().create().name(entity.getName()).query(entity.getQuery()));
+ }
+ @Override
+ protected void postPersist() {
closeFormCallback.run();
}
+ @Override
+ protected String getDisplayableName(final TargetFilterQuery entity) {
+ return entity.getName();
+ }
+
+ @Override
+ protected String getDisplayableNameForFailedMessage(final ProxyTargetFilterQuery entity) {
+ return entity.getName();
+ }
+
+ @Override
+ protected Long getId(final TargetFilterQuery entity) {
+ return entity.getId();
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyTargetFilterQuery.class;
+ }
+
@Override
protected boolean isEntityValid(final ProxyTargetFilterQuery entity) {
- if (!StringUtils.hasText(entity.getName())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.filtername"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
- if (targetFilterManagement.getByName(trimmedName).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.target.filter.duplicate", trimmedName));
- return false;
- }
-
- return true;
+ return validator.isEntityValid(entity, () -> targetFilterManagement.getByName(trimmedName).isPresent());
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AutoAssignmentWindowBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AutoAssignmentWindowBuilder.java
index 8d8a69628..ab7e4ee63 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AutoAssignmentWindowBuilder.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/AutoAssignmentWindowBuilder.java
@@ -9,15 +9,12 @@
package org.eclipse.hawkbit.ui.filtermanagement;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetFilterQueryManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowBuilder;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTargetFilterQuery;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -25,9 +22,6 @@ import com.vaadin.ui.Window;
* Builder for auto assignment window
*/
public class AutoAssignmentWindowBuilder extends AbstractEntityWindowBuilder {
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
- private final EntityFactory entityFactory;
private final TargetManagement targetManagement;
private final TargetFilterQueryManagement targetFilterQueryManagement;
@@ -36,30 +30,19 @@ public class AutoAssignmentWindowBuilder extends AbstractEntityWindowBuilder {
- private final VaadinMessageSource i18n;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
- private final EntityFactory entityFactory;
+public class AutoAssignmentWindowController extends
+ AbstractUpdateEntityWindowController {
private final TargetManagement targetManagement;
private final TargetFilterQueryManagement targetFilterQueryManagement;
-
private final AutoAssignmentWindowLayout layout;
/**
* Constructor for AutoAssignmentWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetManagement
* TargetManagement
* @param targetFilterQueryManagement
@@ -61,26 +46,16 @@ public class AutoAssignmentWindowController
* @param layout
* AutoAssignmentWindowLayout
*/
- public AutoAssignmentWindowController(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final UINotification uiNotification, final EntityFactory entityFactory,
+ public AutoAssignmentWindowController(final CommonUiDependencies uiDependencies,
final TargetManagement targetManagement, final TargetFilterQueryManagement targetFilterQueryManagement,
final AutoAssignmentWindowLayout layout) {
- this.i18n = i18n;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
- this.entityFactory = entityFactory;
+ super(uiDependencies);
this.targetManagement = targetManagement;
this.targetFilterQueryManagement = targetFilterQueryManagement;
-
this.layout = layout;
}
- @Override
- public AbstractEntityWindowLayout getLayout() {
- return layout;
- }
-
@Override
protected ProxyTargetFilterQuery buildEntityFromProxy(final ProxyTargetFilterQuery proxyEntity) {
final ProxyTargetFilterQuery autoAssignmentFilter = new ProxyTargetFilterQuery();
@@ -101,6 +76,11 @@ public class AutoAssignmentWindowController
return autoAssignmentFilter;
}
+ @Override
+ public EntityWindowLayout getLayout() {
+ return layout;
+ }
+
@Override
protected void adaptLayout(final ProxyTargetFilterQuery proxyEntity) {
layout.switchAutoAssignmentInputsVisibility(layout.getEntity().isAutoAssignmentEnabled());
@@ -108,36 +88,38 @@ public class AutoAssignmentWindowController
@Override
protected void persistEntity(final ProxyTargetFilterQuery entity) {
+ // super.persistEntity couldn't be used because of the two cases
+ // store/show dialog
if (entity.isAutoAssignmentEnabled() && entity.getDistributionSetInfo() != null) {
final Long autoAssignDsId = entity.getDistributionSetInfo().getId();
final Long targetsForAutoAssignmentCount = targetManagement.countByRsqlAndNonDS(autoAssignDsId,
entity.getQuery());
- final String confirmationCaption = i18n
+ final String confirmationCaption = getI18n()
.getMessage(UIMessageIdProvider.CAPTION_CONFIRM_AUTO_ASSIGN_CONSEQUENCES);
final String confirmationQuestion = targetsForAutoAssignmentCount == 0
- ? i18n.getMessage(UIMessageIdProvider.MESSAGE_CONFIRM_AUTO_ASSIGN_CONSEQUENCES_NONE)
- : i18n.getMessage(UIMessageIdProvider.MESSAGE_CONFIRM_AUTO_ASSIGN_CONSEQUENCES_TEXT,
+ ? getI18n().getMessage(UIMessageIdProvider.MESSAGE_CONFIRM_AUTO_ASSIGN_CONSEQUENCES_NONE)
+ : getI18n().getMessage(UIMessageIdProvider.MESSAGE_CONFIRM_AUTO_ASSIGN_CONSEQUENCES_TEXT,
targetsForAutoAssignmentCount);
showConsequencesDialog(confirmationCaption, confirmationQuestion, entity.getId(), autoAssignDsId,
- entity.getAutoAssignActionType(), entity);
+ entity.getAutoAssignActionType());
} else {
- targetFilterQueryManagement
- .updateAutoAssignDS(entityFactory.targetFilterQuery().updateAutoAssign(entity.getId()).ds(null));
- publishModifiedEvent(entity.getId());
+ final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement.updateAutoAssignDS(
+ getEntityFactory().targetFilterQuery().updateAutoAssign(entity.getId()).ds(null));
+ publishModifiedEvent(createModifiedEventPayload(targetFilterQuery));
}
}
private void showConsequencesDialog(final String confirmationCaption, final String confirmationQuestion,
- final Long targetFilterId, final Long autoAssignDsId, final ActionType autoAssignActionType,
- final ProxyTargetFilterQuery entity) {
- final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n, confirmationCaption, confirmationQuestion,
- ok -> {
+ final Long targetFilterId, final Long autoAssignDsId, final ActionType autoAssignActionType) {
+ final ConfirmationDialog confirmDialog = new ConfirmationDialog(getI18n(), confirmationCaption,
+ confirmationQuestion, ok -> {
if (ok) {
- targetFilterQueryManagement.updateAutoAssignDS(entityFactory.targetFilterQuery()
- .updateAutoAssign(targetFilterId).ds(autoAssignDsId).actionType(autoAssignActionType));
- publishModifiedEvent(entity.getId());
+ final TargetFilterQuery targetFilterQuery = targetFilterQueryManagement.updateAutoAssignDS(
+ getEntityFactory().targetFilterQuery().updateAutoAssign(targetFilterId)
+ .ds(autoAssignDsId).actionType(autoAssignActionType));
+ publishModifiedEvent(createModifiedEventPayload(targetFilterQuery));
}
}, UIComponentIdProvider.DIST_SET_SELECT_CONS_WINDOW_ID);
@@ -147,17 +129,52 @@ public class AutoAssignmentWindowController
confirmDialog.getWindow().bringToFront();
}
- private void publishModifiedEvent(final Long entityId) {
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this, new EntityModifiedEventPayload(
- EntityModifiedEventType.ENTITY_UPDATED, ProxyTargetFilterQuery.class, entityId));
+ @Override
+ protected TargetFilterQuery persistEntityInRepository(final ProxyTargetFilterQuery entity) {
+ // this subclass cares itself for persisting the entity because of
+ // special requirements (multiple confirmation dialogs).
+ return null;
+ }
+
+ @Override
+ protected String getDisplayableName(final TargetFilterQuery entity) {
+ return entity.getName();
+ }
+
+ @Override
+ protected String getDisplayableNameForFailedMessage(final ProxyTargetFilterQuery entity) {
+ return entity.getName();
+ }
+
+ @Override
+ protected Long getId(final TargetFilterQuery entity) {
+ return entity.getId();
+ }
+
+ @Override
+ protected String getPersistSuccessMessageKey() {
+ // this subclass cares itself for persisting the entity because of
+ // special requirements (multiple confirmation dialogs)
+ return null;
+ }
+
+ @Override
+ protected String getPersistFailureMessageKey() {
+ // this subclass cares itself for persisting the entity because of
+ // special requirements (multiple confirmation dialogs)
+ return null;
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyTargetFilterQuery.class;
}
@Override
protected boolean isEntityValid(final ProxyTargetFilterQuery entity) {
if (entity.isAutoAssignmentEnabled()
&& (entity.getAutoAssignActionType() == null || entity.getDistributionSetInfo() == null)) {
- uiNotification.displayValidationError(
- i18n.getMessage(UIMessageIdProvider.MESSAGE_AUTOASSIGN_CREATE_ERROR_MISSINGELEMENTS));
+ displayValidationError(UIMessageIdProvider.MESSAGE_AUTOASSIGN_CREATE_ERROR_MISSINGELEMENTS);
return false;
}
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 167b7740c..32cae63c6 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
@@ -22,6 +22,7 @@ import org.eclipse.hawkbit.repository.rsql.RsqlValidationOracle;
import org.eclipse.hawkbit.ui.AbstractHawkbitUI;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.EventViewAware;
@@ -65,13 +66,14 @@ public class FilterManagementView extends VerticalLayout implements View {
final TargetManagement targetManagement, final DistributionSetManagement distributionSetManagement) {
this.filterManagementUIState = filterManagementUIState;
- this.targetFilterGridLayout = new TargetFilterGridLayout(i18n, eventBus, permissionChecker, notification,
- entityFactory, targetFilterQueryManagement, targetManagement, distributionSetManagement,
- filterManagementUIState);
+ final CommonUiDependencies uiDependencies = new CommonUiDependencies(i18n, entityFactory, eventBus, notification,
+ permissionChecker);
- this.targetFilterDetailsLayout = new TargetFilterDetailsLayout(i18n, permissionChecker, eventBus, notification,
- uiProperties, entityFactory, rsqlValidationOracle, targetManagement, targetFilterQueryManagement,
- filterManagementUIState.getDetailsLayoutUiState());
+ this.targetFilterGridLayout = new TargetFilterGridLayout(uiDependencies, targetFilterQueryManagement,
+ targetManagement, distributionSetManagement, filterManagementUIState);
+
+ this.targetFilterDetailsLayout = new TargetFilterDetailsLayout(uiDependencies, uiProperties, rsqlValidationOracle,
+ targetManagement, targetFilterQueryManagement, filterManagementUIState.getDetailsLayoutUiState());
final Map layoutVisibilityHandlers = new EnumMap<>(EventLayout.class);
layoutVisibilityHandlers.put(EventLayout.TARGET_FILTER_QUERY_LIST,
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ProxyTargetFilterValidator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ProxyTargetFilterValidator.java
new file mode 100644
index 000000000..64bdbdbc9
--- /dev/null
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/ProxyTargetFilterValidator.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2020 Bosch.IO GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse 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.filtermanagement;
+
+import java.util.function.BooleanSupplier;
+
+import org.eclipse.hawkbit.ui.common.EntityValidator;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTargetFilterQuery;
+import org.springframework.util.StringUtils;
+
+/**
+ * Validator used in targetfilter window controllers to validate
+ * {@link ProxyTargetFilterQuery}.
+ */
+public class ProxyTargetFilterValidator extends EntityValidator {
+
+ /**
+ * Constructor
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
+ */
+ public ProxyTargetFilterValidator(final CommonUiDependencies uiDependencies) {
+ super(uiDependencies);
+ }
+
+ boolean isEntityValid(final ProxyTargetFilterQuery entity, final BooleanSupplier duplicateCheck) {
+ if (!StringUtils.hasText(entity.getName())) {
+ displayValidationError("message.error.missing.filtername");
+ return false;
+ }
+
+ final String trimmedName = StringUtils.trimWhitespace(entity.getName());
+ if (duplicateCheck.getAsBoolean()) {
+ displayValidationError("message.target.filter.duplicate", trimmedName);
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsGridHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsGridHeader.java
index 3131eb477..6d7dbeea0 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsGridHeader.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsGridHeader.java
@@ -8,12 +8,12 @@
*/
package org.eclipse.hawkbit.ui.filtermanagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetFilterQueryManagement;
+import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
import org.eclipse.hawkbit.repository.rsql.RsqlValidationOracle;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTargetFilterQuery;
import org.eclipse.hawkbit.ui.common.event.CommandTopics;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
@@ -26,9 +26,6 @@ import org.eclipse.hawkbit.ui.filtermanagement.state.TargetFilterDetailsLayoutUi
import org.eclipse.hawkbit.ui.filtermanagement.state.TargetFilterDetailsLayoutUiState.Mode;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Layout for Custom Filter view
@@ -47,16 +44,8 @@ public class TargetFilterDetailsGridHeader extends AbstractBreadcrumbGridHeader
/**
* Constructor for TargetFilterDetailsGridHeader
*
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
- * @param entityFactory
- * EntityFactory
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetFilterManagement
* TargetFilterQueryManagement
* @param uiProperties
@@ -66,11 +55,10 @@ public class TargetFilterDetailsGridHeader extends AbstractBreadcrumbGridHeader
* @param uiState
* TargetFilterDetailsLayoutUiState
*/
- public TargetFilterDetailsGridHeader(final VaadinMessageSource i18n, final SpPermissionChecker permChecker,
- final UIEventBus eventBus, final UINotification uiNotification, final EntityFactory entityFactory,
+ public TargetFilterDetailsGridHeader(final CommonUiDependencies uiDependencies,
final TargetFilterQueryManagement targetFilterManagement, final UiProperties uiProperties,
final RsqlValidationOracle rsqlValidationOracle, final TargetFilterDetailsLayoutUiState uiState) {
- super(i18n, permChecker, eventBus);
+ super(uiDependencies.getI18n(), uiDependencies.getPermChecker(), uiDependencies.getEventBus());
this.uiState = uiState;
@@ -84,10 +72,10 @@ public class TargetFilterDetailsGridHeader extends AbstractBreadcrumbGridHeader
this.targetFilterAddUpdateLayout = new TargetFilterAddUpdateLayout(i18n, permChecker, uiProperties, uiState,
eventBus, rsqlValidationOracle);
- this.addTargetFilterController = new AddTargetFilterController(i18n, entityFactory, eventBus, uiNotification,
- targetFilterManagement, targetFilterAddUpdateLayout, this::closeDetails);
- this.updateTargetFilterController = new UpdateTargetFilterController(i18n, entityFactory, eventBus,
- uiNotification, targetFilterManagement, targetFilterAddUpdateLayout, this::closeDetails);
+ this.addTargetFilterController = new AddTargetFilterController(uiDependencies, targetFilterManagement,
+ targetFilterAddUpdateLayout, this::closeDetails);
+ this.updateTargetFilterController = new UpdateTargetFilterController(uiDependencies, targetFilterManagement,
+ targetFilterAddUpdateLayout, this::closeDetails);
buildHeader();
}
@@ -150,7 +138,7 @@ public class TargetFilterDetailsGridHeader extends AbstractBreadcrumbGridHeader
}
private void showAddUpdateFilterLayout(final String captionMessage,
- final AbstractEntityWindowController controller,
+ final AbstractEntityWindowController controller,
final ProxyTargetFilterQuery proxyEntity) {
headerCaptionDetails.setValue(captionMessage);
controller.populateWithData(proxyEntity);
@@ -187,7 +175,7 @@ public class TargetFilterDetailsGridHeader extends AbstractBreadcrumbGridHeader
/**
* Check validity of target filter query.
- *
+ *
* @return {@code true}: if header form layout is active and the target
* filter query is valid {@code false}: otherwise
*/
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsLayout.java
index af5ede39b..1051ced93 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterDetailsLayout.java
@@ -8,12 +8,11 @@
*/
package org.eclipse.hawkbit.ui.filtermanagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetFilterQueryManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.rsql.RsqlValidationOracle;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTargetFilterQuery;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
@@ -24,9 +23,6 @@ import org.eclipse.hawkbit.ui.common.layout.AbstractGridComponentLayout;
import org.eclipse.hawkbit.ui.common.layout.listener.FilterChangedListener;
import org.eclipse.hawkbit.ui.common.layout.listener.ShowEntityFormLayoutListener;
import org.eclipse.hawkbit.ui.filtermanagement.state.TargetFilterDetailsLayoutUiState;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* DistributionSet table layout.
@@ -43,19 +39,11 @@ public class TargetFilterDetailsLayout extends AbstractGridComponentLayout {
/**
* TargetFilterDetailsLayout constructor
- *
- * @param i18n
- * MessageSource
- * @param permChecker
- * SpPermissionChecker
- * @param eventBus
- * Bus to publish UI events
- * @param uiNotification
- * helper to display messages
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param uiProperties
* properties
- * @param entityFactory
- * entity factory
* @param rsqlValidationOracle
* to get RSQL validation and suggestions
* @param targetManagement
@@ -65,24 +53,23 @@ public class TargetFilterDetailsLayout extends AbstractGridComponentLayout {
* @param uiState
* to persist the user interaction
*/
- public TargetFilterDetailsLayout(final VaadinMessageSource i18n, final SpPermissionChecker permChecker,
- final UIEventBus eventBus, final UINotification uiNotification, final UiProperties uiProperties,
- final EntityFactory entityFactory, final RsqlValidationOracle rsqlValidationOracle,
- final TargetManagement targetManagement, final TargetFilterQueryManagement targetFilterManagement,
- final TargetFilterDetailsLayoutUiState uiState) {
+ public TargetFilterDetailsLayout(final CommonUiDependencies uiDependencies, final UiProperties uiProperties,
+ final RsqlValidationOracle rsqlValidationOracle, final TargetManagement targetManagement,
+ final TargetFilterQueryManagement targetFilterManagement, final TargetFilterDetailsLayoutUiState uiState) {
- this.targetFilterDetailsGridHeader = new TargetFilterDetailsGridHeader(i18n, permChecker, eventBus,
- uiNotification, entityFactory, targetFilterManagement, uiProperties, rsqlValidationOracle, uiState);
- this.targetFilterTargetGrid = new TargetFilterTargetGrid(i18n, eventBus, targetManagement, uiState);
- this.targetFilterCountMessageLabel = new TargetFilterCountMessageLabel(i18n);
+ this.targetFilterDetailsGridHeader = new TargetFilterDetailsGridHeader(uiDependencies, targetFilterManagement,
+ uiProperties, rsqlValidationOracle, uiState);
+ this.targetFilterTargetGrid = new TargetFilterTargetGrid(uiDependencies, targetManagement, uiState);
+ this.targetFilterCountMessageLabel = new TargetFilterCountMessageLabel(uiDependencies.getI18n());
initGridDataUpdatedListener();
- this.showFilterQueryFormListener = new ShowEntityFormLayoutListener<>(eventBus, ProxyTargetFilterQuery.class,
+ this.showFilterQueryFormListener = new ShowEntityFormLayoutListener<>(uiDependencies.getEventBus(),
+ ProxyTargetFilterQuery.class,
new EventLayoutViewAware(EventLayout.TARGET_FILTER_QUERY_FORM, EventView.TARGET_FILTER),
targetFilterDetailsGridHeader::showAddFilterLayout,
targetFilterDetailsGridHeader::showEditFilterLayout);
- this.targetFilterListener = new FilterChangedListener<>(eventBus, ProxyTarget.class,
+ this.targetFilterListener = new FilterChangedListener<>(uiDependencies.getEventBus(), ProxyTarget.class,
new EventViewAware(EventView.TARGET_FILTER), targetFilterTargetGrid.getFilterSupport());
buildLayout(targetFilterDetailsGridHeader, targetFilterTargetGrid, targetFilterCountMessageLabel);
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterGrid.java
index 1e2b41452..a4408c20a 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterGrid.java
@@ -13,7 +13,7 @@ import java.util.stream.Collectors;
import org.eclipse.hawkbit.im.authentication.SpPermission;
import org.eclipse.hawkbit.repository.TargetFilterQueryManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.GridComponentBuilder;
import org.eclipse.hawkbit.ui.common.builder.StatusIconBuilder.ActionTypeIconSupplier;
import org.eclipse.hawkbit.ui.common.data.mappers.TargetFilterQueryToProxyTargetFilterMapper;
@@ -35,9 +35,7 @@ import org.eclipse.hawkbit.ui.filtermanagement.state.TargetFilterGridLayoutUiSta
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.data.ValueProvider;
import com.vaadin.server.Sizeable;
@@ -71,28 +69,21 @@ public class TargetFilterGrid extends AbstractGrid(eventBus, ProxyTargetFilterQuery.class,
- new EventViewAware(EventView.TARGET_FILTER), targetFilterGrid.getFilterSupport());
- this.filterQueryModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyTargetFilterQuery.class)
- .entityModifiedAwareSupports(getFilterQueryModifiedAwareSupports()).build();
+ this.targetQueryFilterListener = new FilterChangedListener<>(uiDependencies.getEventBus(),
+ ProxyTargetFilterQuery.class, new EventViewAware(EventView.TARGET_FILTER),
+ targetFilterGrid.getFilterSupport());
+ this.filterQueryModifiedListener = new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(),
+ ProxyTargetFilterQuery.class).entityModifiedAwareSupports(getFilterQueryModifiedAwareSupports())
+ .build();
buildLayout(targetFilterGridHeader, targetFilterGrid);
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTargetGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTargetGrid.java
index 619097650..031416268 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTargetGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/TargetFilterTargetGrid.java
@@ -9,6 +9,7 @@
package org.eclipse.hawkbit.ui.filtermanagement;
import org.eclipse.hawkbit.repository.TargetManagement;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.GridComponentBuilder;
import org.eclipse.hawkbit.ui.common.builder.StatusIconBuilder.TargetStatusIconSupplier;
import org.eclipse.hawkbit.ui.common.data.mappers.TargetToProxyTargetMapper;
@@ -19,8 +20,6 @@ import org.eclipse.hawkbit.ui.common.grid.AbstractGrid;
import org.eclipse.hawkbit.ui.common.grid.support.FilterSupport;
import org.eclipse.hawkbit.ui.filtermanagement.state.TargetFilterDetailsLayoutUiState;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Shows the targets as a result of the executed filter query.
@@ -36,9 +35,9 @@ public class TargetFilterTargetGrid extends AbstractGrid {
private final TargetFilterDetailsLayoutUiState uiState;
- TargetFilterTargetGrid(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final TargetManagement targetManagement, final TargetFilterDetailsLayoutUiState uiState) {
- super(i18n, eventBus);
+ TargetFilterTargetGrid(final CommonUiDependencies uiDependencies, final TargetManagement targetManagement,
+ final TargetFilterDetailsLayoutUiState uiState) {
+ super(uiDependencies.getI18n(), uiDependencies.getEventBus());
this.uiState = uiState;
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/UpdateTargetFilterController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/UpdateTargetFilterController.java
index f0da8dd84..f74f464a8 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/UpdateTargetFilterController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/filtermanagement/UpdateTargetFilterController.java
@@ -8,82 +8,54 @@
*/
package org.eclipse.hawkbit.ui.filtermanagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetFilterQueryManagement;
import org.eclipse.hawkbit.repository.builder.TargetFilterQueryUpdate;
-import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
-import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException;
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractUpdateEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTargetFilterQuery;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for update target filter
*/
-public class UpdateTargetFilterController
- extends AbstractEntityWindowController {
-
- private static final Logger LOG = LoggerFactory.getLogger(UpdateTargetFilterController.class);
-
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class UpdateTargetFilterController extends
+ AbstractUpdateEntityWindowController {
private final TargetFilterQueryManagement targetFilterManagement;
-
private final TargetFilterAddUpdateLayout layout;
-
private final Runnable closeFormCallback;
+ private final ProxyTargetFilterValidator validator;
private String nameBeforeEdit;
/**
* Constructor for UpdateTargetFilterController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetFilterManagement
- * TargetFilterQueryManagement
+ * TargetFilterQueryManagement
* @param layout
- * TargetFilterAddUpdateLayout
+ * TargetFilterAddUpdateLayout
* @param closeFormCallback
- * Runnable
+ * Runnable
*/
- public UpdateTargetFilterController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public UpdateTargetFilterController(final CommonUiDependencies uiDependencies,
final TargetFilterQueryManagement targetFilterManagement, final TargetFilterAddUpdateLayout layout,
final Runnable closeFormCallback) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.targetFilterManagement = targetFilterManagement;
-
this.layout = layout;
-
this.closeFormCallback = closeFormCallback;
+ this.validator = new ProxyTargetFilterValidator(uiDependencies);
}
@Override
- public AbstractEntityWindowLayout getLayout() {
+ public EntityWindowLayout getLayout() {
return layout;
}
@@ -101,39 +73,45 @@ public class UpdateTargetFilterController
}
@Override
- protected void persistEntity(final ProxyTargetFilterQuery entity) {
- final TargetFilterQueryUpdate targetFilterUpdate = entityFactory.targetFilterQuery().update(entity.getId())
+ protected TargetFilterQuery persistEntityInRepository(final ProxyTargetFilterQuery entity) {
+ final TargetFilterQueryUpdate targetFilterUpdate = getEntityFactory().targetFilterQuery().update(entity.getId())
.name(entity.getName()).query(entity.getQuery());
+ return targetFilterManagement.update(targetFilterUpdate);
+ }
- try {
- final TargetFilterQuery updatedTargetFilter = targetFilterManagement.update(targetFilterUpdate);
+ @Override
+ protected void postPersist() {
+ closeFormCallback.run();
+ }
- uiNotification.displaySuccess(i18n.getMessage("message.update.success", updatedTargetFilter.getName()));
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this, new EntityModifiedEventPayload(
- EntityModifiedEventType.ENTITY_UPDATED, ProxyTargetFilterQuery.class, updatedTargetFilter.getId()));
- } catch (final EntityNotFoundException | EntityReadOnlyException e) {
- LOG.trace("Update of target filter failed in UI: {}", e.getMessage());
- final String entityType = i18n.getMessage("caption.target.filter");
- uiNotification
- .displayWarning(i18n.getMessage("message.deleted.or.notAllowed", entityType, entity.getName()));
- } finally {
- closeFormCallback.run();
- }
+ @Override
+ protected String getDisplayableName(final TargetFilterQuery entity) {
+ return entity.getName();
+ }
+
+ @Override
+ protected String getDisplayableNameForFailedMessage(final ProxyTargetFilterQuery entity) {
+ return entity.getName();
+ }
+
+ @Override
+ protected Long getId(final TargetFilterQuery entity) {
+ return entity.getId();
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyTargetFilterQuery.class;
}
@Override
protected boolean isEntityValid(final ProxyTargetFilterQuery entity) {
- if (!StringUtils.hasText(entity.getName())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.filtername"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
- if (!nameBeforeEdit.equals(trimmedName) && targetFilterManagement.getByName(trimmedName).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.target.filter.duplicate", trimmedName));
- return false;
- }
+ return validator.isEntityValid(entity,
+ () -> hasNamedChanged(trimmedName) && targetFilterManagement.getByName(trimmedName).isPresent());
+ }
- return true;
+ private boolean hasNamedChanged(final String trimmedName) {
+ return !nameBeforeEdit.equals(trimmedName);
}
}
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 1fc71f8ef..394c31f88 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
@@ -30,6 +30,7 @@ import org.eclipse.hawkbit.security.SystemSecurityContext;
import org.eclipse.hawkbit.ui.AbstractHawkbitUI;
import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.EventViewAware;
@@ -99,21 +100,23 @@ public class DeploymentView extends VerticalLayout implements View, BrowserWindo
this.permChecker = permChecker;
this.managementUIState = managementUIState;
+ final CommonUiDependencies uiDependencies = new CommonUiDependencies(i18n, entityFactory, eventBus, uiNotification,
+ permChecker);
+
if (permChecker.hasTargetReadPermission()) {
- this.targetTagFilterLayout = new TargetTagFilterLayout(i18n, managementUIState, permChecker, eventBus,
- uiNotification, entityFactory, targetFilterQueryManagement, targetTagManagement, targetManagement,
+ this.targetTagFilterLayout = new TargetTagFilterLayout(uiDependencies, managementUIState,
+ targetFilterQueryManagement, targetTagManagement, targetManagement,
managementUIState.getTargetTagFilterLayoutUiState());
- this.targetGridLayout = new TargetGridLayout(eventBus, targetManagement, entityFactory, i18n,
- uiNotification, deploymentManagement, uiProperties, permChecker, targetTagManagement,
- distributionSetManagement, uiExecutor, configManagement, systemSecurityContext,
+ this.targetGridLayout = new TargetGridLayout(uiDependencies, targetManagement, deploymentManagement, uiProperties,
+ targetTagManagement, distributionSetManagement, uiExecutor, configManagement, systemSecurityContext,
managementUIState.getTargetTagFilterLayoutUiState(), managementUIState.getTargetGridLayoutUiState(),
managementUIState.getTargetBulkUploadUiState(),
managementUIState.getDistributionGridLayoutUiState());
this.targetCountLayout = targetGridLayout.getCountMessageLabel().createFooterMessageComponent();
- this.actionHistoryLayout = new ActionHistoryLayout(i18n, deploymentManagement, eventBus, uiNotification,
- permChecker, managementUIState.getActionHistoryGridLayoutUiState());
+ this.actionHistoryLayout = new ActionHistoryLayout(uiDependencies, deploymentManagement,
+ managementUIState.getActionHistoryGridLayoutUiState());
} else {
this.targetTagFilterLayout = null;
this.targetGridLayout = null;
@@ -122,14 +125,12 @@ public class DeploymentView extends VerticalLayout implements View, BrowserWindo
}
if (permChecker.hasReadRepositoryPermission()) {
- this.distributionTagLayout = new DistributionTagLayout(eventBus, i18n, permChecker,
- distributionSetTagManagement, entityFactory, uiNotification, distributionSetManagement,
- managementUIState.getDistributionTagLayoutUiState());
- this.distributionGridLayout = new DistributionGridLayout(i18n, eventBus, permChecker, entityFactory,
- uiNotification, targetManagement, distributionSetManagement, smManagement,
- distributionSetTypeManagement, distributionSetTagManagement, systemManagement, deploymentManagement,
- configManagement, systemSecurityContext, uiProperties,
- managementUIState.getDistributionGridLayoutUiState(),
+ this.distributionTagLayout = new DistributionTagLayout(uiDependencies, distributionSetTagManagement,
+ distributionSetManagement, managementUIState.getDistributionTagLayoutUiState());
+ this.distributionGridLayout = new DistributionGridLayout(uiDependencies, targetManagement,
+ distributionSetManagement, smManagement, distributionSetTypeManagement,
+ distributionSetTagManagement, systemManagement, deploymentManagement, configManagement,
+ systemSecurityContext, uiProperties, managementUIState.getDistributionGridLayoutUiState(),
managementUIState.getDistributionTagLayoutUiState(),
managementUIState.getTargetGridLayoutUiState());
} else {
@@ -379,12 +380,12 @@ public class DeploymentView extends VerticalLayout implements View, BrowserWindo
private void showDsTagLayout() {
distributionTagLayout.setVisible(true);
- distributionGridLayout.hideDsTagHeaderIcon();
+ distributionGridLayout.hideDsFilterHeaderIcon();
}
private void hideDsTagLayout() {
distributionTagLayout.setVisible(false);
- distributionGridLayout.showDsTagHeaderIcon();
+ distributionGridLayout.showDsFilterHeaderIcon();
}
private void maximizeActionHistoryGridLayout() {
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGrid.java
index 7189c6250..7a56cb0e7 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGrid.java
@@ -15,8 +15,8 @@ import java.util.Optional;
import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException;
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.common.ConfirmationDialog;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.GridComponentBuilder;
import org.eclipse.hawkbit.ui.common.builder.StatusIconBuilder.ActionStatusIconSupplier;
import org.eclipse.hawkbit.ui.common.builder.StatusIconBuilder.ActionTypeIconSupplier;
@@ -42,10 +42,8 @@ import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.data.ValueProvider;
import com.vaadin.icons.VaadinIcons;
@@ -86,12 +84,11 @@ public class ActionHistoryGrid extends AbstractGrid {
private final transient MasterEntitySupport masterEntitySupport;
- ActionHistoryGrid(final VaadinMessageSource i18n, final DeploymentManagement deploymentManagement,
- final UIEventBus eventBus, final UINotification notification, final SpPermissionChecker permissionChecker,
+ ActionHistoryGrid(final CommonUiDependencies uiDependencies, final DeploymentManagement deploymentManagement,
final ActionHistoryGridLayoutUiState actionHistoryGridLayoutUiState) {
- super(i18n, eventBus, permissionChecker);
+ super(uiDependencies.getI18n(), uiDependencies.getEventBus(), uiDependencies.getPermChecker());
- this.notification = notification;
+ this.notification = uiDependencies.getUiNotification();
this.deploymentManagement = deploymentManagement;
this.actionToProxyActionMapper = new ActionToProxyActionMapper();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGridHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGridHeader.java
index af197a36e..69de4b0e3 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGridHeader.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryGridHeader.java
@@ -8,6 +8,7 @@
*/
package org.eclipse.hawkbit.ui.management.actionhistory;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
import org.eclipse.hawkbit.ui.common.event.CommandTopics;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
@@ -19,8 +20,6 @@ import org.eclipse.hawkbit.ui.common.grid.header.support.ResizeHeaderSupport;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Header for ActionHistory with maximize-support.
@@ -35,16 +34,14 @@ public class ActionHistoryGridHeader extends AbstractMasterAwareGridHeader(eventBus, masterLayoutView,
+ this.masterEntityChangedListener = new SelectionChangedListener<>(uiDependencies.getEventBus(), masterLayoutView,
getMasterEntityAwareComponents());
- this.entityModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyAction.class)
+ this.entityModifiedListener = new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyAction.class)
.entityModifiedAwareSupports(getEntityModifiedAwareSupports()).parentEntityType(ProxyTarget.class)
.parentEntityIdProvider(this::getMasterEntityId).build();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryLayout.java
index 08cac72f7..12daf1548 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryLayout.java
@@ -9,10 +9,7 @@
package org.eclipse.hawkbit.ui.management.actionhistory;
import org.eclipse.hawkbit.repository.DeploymentManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import com.vaadin.ui.HorizontalLayout;
@@ -29,28 +26,21 @@ public class ActionHistoryLayout extends HorizontalLayout {
/**
* Constructor for ActionHistoryLayout
*
- * @param i18n
- * VaadinMessageSource
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param deploymentManagement
- * DeploymentManagement
- * @param eventBus
- * UIEventBus
- * @param notification
- * UINotification
- * @param permChecker
- * SpPermissionChecker
+ * DeploymentManagement
* @param actionHistoryGridLayoutUiState
- * ActionHistoryGridLayoutUiState
+ * ActionHistoryGridLayoutUiState
*/
- public ActionHistoryLayout(final VaadinMessageSource i18n, final DeploymentManagement deploymentManagement,
- final UIEventBus eventBus, final UINotification notification, final SpPermissionChecker permChecker,
+ public ActionHistoryLayout(final CommonUiDependencies uiDependencies, final DeploymentManagement deploymentManagement,
final ActionHistoryGridLayoutUiState actionHistoryGridLayoutUiState) {
- this.actionHistoryGridLayout = new ActionHistoryGridLayout(i18n, deploymentManagement, eventBus, notification,
- permChecker, actionHistoryGridLayoutUiState);
+ this.actionHistoryGridLayout = new ActionHistoryGridLayout(uiDependencies, deploymentManagement,
+ actionHistoryGridLayoutUiState);
- this.actionStatusLayout = new ActionStatusGridLayout(i18n, eventBus, deploymentManagement);
- this.actionStatusMsgLayout = new ActionStatusMsgGridLayout(i18n, eventBus, deploymentManagement);
+ this.actionStatusLayout = new ActionStatusGridLayout(uiDependencies, deploymentManagement);
+ this.actionStatusMsgLayout = new ActionStatusMsgGridLayout(uiDependencies, deploymentManagement);
init();
buildLayout();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGrid.java
index c189eeac8..624eef028 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGrid.java
@@ -9,6 +9,7 @@
package org.eclipse.hawkbit.ui.management.actionhistory;
import org.eclipse.hawkbit.repository.DeploymentManagement;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.GridComponentBuilder;
import org.eclipse.hawkbit.ui.common.builder.StatusIconBuilder.ActionStatusIconSupplier;
import org.eclipse.hawkbit.ui.common.data.mappers.ActionStatusToProxyActionStatusMapper;
@@ -25,8 +26,6 @@ import org.eclipse.hawkbit.ui.common.grid.support.SelectionSupport;
import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* This grid presents the action states for a selected action.
@@ -44,16 +43,13 @@ public class ActionStatusGrid extends AbstractGrid {
/**
* Constructor.
*
- * @param i18n
- * i18n
- * @param eventBus
- * eventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param deploymentManagement
* deploymentManagement
*/
- protected ActionStatusGrid(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final DeploymentManagement deploymentManagement) {
- super(i18n, eventBus, null);
+ protected ActionStatusGrid(final CommonUiDependencies uiDependencies, final DeploymentManagement deploymentManagement) {
+ super(uiDependencies.getI18n(), uiDependencies.getEventBus(), uiDependencies.getPermChecker());
setSelectionSupport(new SelectionSupport(this, eventBus,
EventLayout.ACTION_HISTORY_STATUS_LIST, EventView.DEPLOYMENT, null, null, null));
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGridLayout.java
index c669c403e..a7a229900 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGridLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusGridLayout.java
@@ -12,6 +12,7 @@ import java.util.Arrays;
import java.util.List;
import org.eclipse.hawkbit.repository.DeploymentManagement;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyAction;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventLayoutViewAware;
@@ -20,8 +21,6 @@ import org.eclipse.hawkbit.ui.common.event.SelectionChangedEventPayload.Selectio
import org.eclipse.hawkbit.ui.common.layout.AbstractGridComponentLayout;
import org.eclipse.hawkbit.ui.common.layout.MasterEntityAwareComponent;
import org.eclipse.hawkbit.ui.common.layout.listener.SelectionChangedListener;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Layout responsible for action-states-grid and the corresponding header.
@@ -37,21 +36,18 @@ public class ActionStatusGridLayout extends AbstractGridComponentLayout {
/**
* Constructor for ActionStatusGridLayout
*
- * @param i18n
- * VaadinMessageSource
- * @param eventBus
- * UIEventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param deploymentManagement
- * DeploymentManagement
+ * DeploymentManagement
*/
- public ActionStatusGridLayout(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final DeploymentManagement deploymentManagement) {
- this.actionStatusGridHeader = new ActionStatusGridHeader(i18n);
- this.actionStatusGrid = new ActionStatusGrid(i18n, eventBus, deploymentManagement);
+ public ActionStatusGridLayout(final CommonUiDependencies uiDependencies, final DeploymentManagement deploymentManagement) {
+ this.actionStatusGridHeader = new ActionStatusGridHeader(uiDependencies.getI18n());
+ this.actionStatusGrid = new ActionStatusGrid(uiDependencies, deploymentManagement);
final EventLayoutViewAware masterLayoutView = new EventLayoutViewAware(EventLayout.ACTION_HISTORY_LIST,
EventView.DEPLOYMENT);
- this.selectionChangedListener = new SelectionChangedListener<>(eventBus, masterLayoutView,
+ this.selectionChangedListener = new SelectionChangedListener<>(uiDependencies.getEventBus(), masterLayoutView,
getMasterEntityAwareComponents());
buildLayout(actionStatusGridHeader, actionStatusGrid);
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGrid.java
index 4c52c885d..043814a83 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGrid.java
@@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui.management.actionhistory;
import javax.annotation.PreDestroy;
import org.eclipse.hawkbit.repository.DeploymentManagement;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.GridComponentBuilder;
import org.eclipse.hawkbit.ui.common.data.providers.ActionStatusMsgDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyActionStatus;
@@ -23,8 +24,6 @@ import org.eclipse.hawkbit.ui.common.grid.support.SelectionSupport;
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.data.provider.Query;
import com.vaadin.shared.Registration;
@@ -45,17 +44,8 @@ public class ActionStatusMsgGrid extends AbstractGrid {
private final Registration itemClickListenerRegistration;
- /**
- * Constructor.
- *
- * @param i18n
- * i18n
- * @param eventBus
- * eventBus
- */
- protected ActionStatusMsgGrid(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final DeploymentManagement deploymentManagement) {
- super(i18n, eventBus, null);
+ protected ActionStatusMsgGrid(final CommonUiDependencies uiDependencies, final DeploymentManagement deploymentManagement) {
+ super(uiDependencies.getI18n(), uiDependencies.getEventBus(), uiDependencies.getPermChecker());
setSelectionSupport(new SelectionSupport(this));
getSelectionSupport().enableSingleSelection();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGridLayout.java
index 9f229954e..f4a30ec91 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGridLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionStatusMsgGridLayout.java
@@ -12,6 +12,7 @@ import java.util.Arrays;
import java.util.List;
import org.eclipse.hawkbit.repository.DeploymentManagement;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyActionStatus;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventLayoutViewAware;
@@ -19,8 +20,6 @@ import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.layout.AbstractGridComponentLayout;
import org.eclipse.hawkbit.ui.common.layout.MasterEntityAwareComponent;
import org.eclipse.hawkbit.ui.common.layout.listener.SelectionChangedListener;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Layout responsible for messages-grid and the corresponding header.
@@ -36,21 +35,18 @@ public class ActionStatusMsgGridLayout extends AbstractGridComponentLayout {
/**
* Constructor for ActionStatusMsgGridLayout
*
- * @param i18n
- * VaadinMessageSource
- * @param eventBus
- * UIEventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param deploymentManagement
- * DeploymentManagement
+ * DeploymentManagement
*/
- public ActionStatusMsgGridLayout(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final DeploymentManagement deploymentManagement) {
- this.actionStatusMsgHeader = new ActionStatusMsgGridHeader(i18n);
- this.actionStatusMsgGrid = new ActionStatusMsgGrid(i18n, eventBus, deploymentManagement);
+ public ActionStatusMsgGridLayout(final CommonUiDependencies uiDependencies, final DeploymentManagement deploymentManagement) {
+ this.actionStatusMsgHeader = new ActionStatusMsgGridHeader(uiDependencies.getI18n());
+ this.actionStatusMsgGrid = new ActionStatusMsgGrid(uiDependencies, deploymentManagement);
final EventLayoutViewAware masterLayoutView = new EventLayoutViewAware(EventLayout.ACTION_HISTORY_STATUS_LIST,
EventView.DEPLOYMENT);
- this.selectionChangedListener = new SelectionChangedListener<>(eventBus, masterLayoutView,
+ this.selectionChangedListener = new SelectionChangedListener<>(uiDependencies.getEventBus(), masterLayoutView,
getMasterEntityAwareComponents());
buildLayout(actionStatusMsgHeader, actionStatusMsgGrid);
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadHandler.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadHandler.java
index 9baa656ac..5f8efa37a 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadHandler.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadHandler.java
@@ -43,6 +43,7 @@ import org.eclipse.hawkbit.repository.exception.IncompleteDistributionSetExcepti
import org.eclipse.hawkbit.repository.exception.MultiAssignmentIsNotEnabledException;
import org.eclipse.hawkbit.repository.model.Action.ActionType;
import org.eclipse.hawkbit.repository.model.DeploymentRequest;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyBulkUploadWindow;
import org.eclipse.hawkbit.ui.common.event.BulkUploadEventPayload;
import org.eclipse.hawkbit.ui.common.event.EventTopics;
@@ -90,31 +91,18 @@ public class BulkUploadHandler implements SucceededListener, FailedListener, Rec
private final transient Supplier bulkUploadInputsProvider;
- /**
- * Constructor
- *
- * @param i18n
- * @param eventBus
- * @param entityFactory
- * @param uiExecutor
- * @param targetManagement
- * @param tagManagement
- * @param distributionSetManagement
- * @param deploymentManagement
- * @param bulkUploadInputsProvider
- */
- BulkUploadHandler(final VaadinMessageSource i18n, final UIEventBus eventBus, final EntityFactory entityFactory,
- final Executor uiExecutor, final TargetManagement targetManagement, final TargetTagManagement tagManagement,
+ BulkUploadHandler(final CommonUiDependencies uiDependencies, final Executor uiExecutor,
+ final TargetManagement targetManagement, final TargetTagManagement tagManagement,
final DistributionSetManagement distributionSetManagement, final DeploymentManagement deploymentManagement,
final Supplier bulkUploadInputsProvider) {
this.targetManagement = targetManagement;
this.deploymentManagement = deploymentManagement;
- this.i18n = i18n;
+ this.i18n = uiDependencies.getI18n();
this.uiExecutor = uiExecutor;
- this.eventBus = eventBus;
+ this.eventBus = uiDependencies.getEventBus();
this.distributionSetManagement = distributionSetManagement;
this.tagManagement = tagManagement;
- this.entityFactory = entityFactory;
+ this.entityFactory = uiDependencies.getEntityFactory();
this.bulkUploadInputsProvider = bulkUploadInputsProvider;
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadWindowBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadWindowBuilder.java
index 377ae7f63..00ed4c3e8 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadWindowBuilder.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/BulkUploadWindowBuilder.java
@@ -13,17 +13,13 @@ import java.util.concurrent.Executor;
import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.TargetTagManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.WindowBuilder;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -31,17 +27,13 @@ import com.vaadin.ui.Window;
* Builder for bulk upload window
*/
public class BulkUploadWindowBuilder {
- private final VaadinMessageSource i18n;
- private final UIEventBus eventBus;
- private final SpPermissionChecker checker;
- private final UINotification uinotification;
private final UiProperties uiproperties;
private final Executor uiExecutor;
private final TargetManagement targetManagement;
private final DeploymentManagement deploymentManagement;
private final TargetTagManagement tagManagement;
private final DistributionSetManagement distributionSetManagement;
- private final EntityFactory entityFactory;
+ private final CommonUiDependencies uiDependencies;
private final TargetBulkUploadUiState targetBulkUploadUiState;
@@ -50,48 +42,35 @@ public class BulkUploadWindowBuilder {
/**
* Constructor for BulkUploadWindowBuilder
*
- * @param i18n
- * VaadinMessageSource
- * @param eventBus
- * UIEventBus
- * @param checker
- * SpPermissionChecker
- * @param uinotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param uiproperties
- * UiProperties
+ * UiProperties
* @param uiExecutor
- * Executor
+ * Executor
* @param targetManagement
- * TargetManagement
+ * TargetManagement
* @param deploymentManagement
- * DeploymentManagement
+ * DeploymentManagement
* @param tagManagement
- * TargetTagManagement
+ * TargetTagManagement
* @param distributionSetManagement
- * DistributionSetManagement
- * @param entityFactory
- * EntityFactory
+ * DistributionSetManagement
* @param targetBulkUploadUiState
- * TargetBulkUploadUiState
+ * TargetBulkUploadUiState
*/
- public BulkUploadWindowBuilder(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final SpPermissionChecker checker, final UINotification uinotification, final UiProperties uiproperties,
+ public BulkUploadWindowBuilder(final CommonUiDependencies uiDependencies, final UiProperties uiproperties,
final Executor uiExecutor, final TargetManagement targetManagement,
final DeploymentManagement deploymentManagement, final TargetTagManagement tagManagement,
- final DistributionSetManagement distributionSetManagement, final EntityFactory entityFactory,
+ final DistributionSetManagement distributionSetManagement,
final TargetBulkUploadUiState targetBulkUploadUiState) {
- this.i18n = i18n;
- this.eventBus = eventBus;
- this.checker = checker;
- this.uinotification = uinotification;
+ this.uiDependencies = uiDependencies;
this.uiproperties = uiproperties;
this.uiExecutor = uiExecutor;
this.targetManagement = targetManagement;
this.deploymentManagement = deploymentManagement;
this.tagManagement = tagManagement;
this.distributionSetManagement = distributionSetManagement;
- this.entityFactory = entityFactory;
this.targetBulkUploadUiState = targetBulkUploadUiState;
}
@@ -100,9 +79,9 @@ public class BulkUploadWindowBuilder {
*/
public Window getWindowForTargetBulkUpload() {
if (!targetBulkUploadUiState.isInProgress() || targetBulkUpdateWindowLayout == null) {
- targetBulkUpdateWindowLayout = new TargetBulkUpdateWindowLayout(i18n, eventBus, checker, uinotification,
- targetManagement, deploymentManagement, tagManagement, distributionSetManagement, entityFactory,
- uiproperties, uiExecutor, targetBulkUploadUiState);
+ targetBulkUpdateWindowLayout = new TargetBulkUpdateWindowLayout(uiDependencies, targetManagement,
+ deploymentManagement, tagManagement, distributionSetManagement, uiproperties, uiExecutor,
+ targetBulkUploadUiState);
}
final Window bulkUploadWindow = new WindowBuilder(SPUIDefinitions.CREATE_UPDATE_WINDOW)
@@ -127,9 +106,9 @@ public class BulkUploadWindowBuilder {
* Restore target bulk update window layout
*/
public void restoreState() {
- targetBulkUpdateWindowLayout = new TargetBulkUpdateWindowLayout(i18n, eventBus, checker, uinotification,
- targetManagement, deploymentManagement, tagManagement, distributionSetManagement, entityFactory,
- uiproperties, uiExecutor, targetBulkUploadUiState);
+ targetBulkUpdateWindowLayout = new TargetBulkUpdateWindowLayout(uiDependencies, targetManagement,
+ deploymentManagement, tagManagement, distributionSetManagement, uiproperties, uiExecutor,
+ targetBulkUploadUiState);
targetBulkUpdateWindowLayout.restoreComponentsValue();
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkTokenTags.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkTokenTags.java
index 3da3b42ee..97dc2fe5f 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkTokenTags.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkTokenTags.java
@@ -15,16 +15,13 @@ import java.util.stream.Collectors;
import org.eclipse.hawkbit.repository.TargetTagManagement;
import org.eclipse.hawkbit.repository.model.TargetTag;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.mappers.TagToProxyTagMapper;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
import org.eclipse.hawkbit.ui.common.tagdetails.AbstractTagToken;
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.util.CollectionUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Target tag layout in bulk upload popup.
@@ -35,9 +32,8 @@ public class TargetBulkTokenTags extends AbstractTagToken {
private final TagToProxyTagMapper tagMapper;
- TargetBulkTokenTags(final VaadinMessageSource i18n, final UIEventBus eventBus, final SpPermissionChecker checker,
- final UINotification uinotification, final TargetTagManagement tagManagement) {
- super(checker, i18n, uinotification, eventBus);
+ TargetBulkTokenTags(final CommonUiDependencies uiDependencies, final TargetTagManagement tagManagement) {
+ super(uiDependencies);
this.tagManagement = tagManagement;
this.tagMapper = new TagToProxyTagMapper<>();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkUpdateWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkUpdateWindowLayout.java
index f5c32ecf0..7d6d8b081 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkUpdateWindowLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/bulkupload/TargetBulkUpdateWindowLayout.java
@@ -14,11 +14,10 @@ import java.util.stream.Collectors;
import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.TargetTagManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyBulkUploadWindow;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
@@ -29,7 +28,6 @@ import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
import org.eclipse.hawkbit.ui.utils.UINotification;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.data.Binder;
import com.vaadin.icons.VaadinIcons;
@@ -77,14 +75,8 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent {
/**
* Constructor for TargetBulkUpdateWindowLayout
*
- * @param i18n
- * VaadinMessageSource
- * @param eventBus
- * UIEventBus
- * @param checker
- * SpPermissionChecker
- * @param uinotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetManagement
* TargetManagement
* @param deploymentManagement
@@ -93,8 +85,6 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent {
* TargetTagManagement
* @param distributionSetManagement
* DistributionSetManagement
- * @param entityFactory
- * EntityFactory
* @param uiproperties
* UiProperties
* @param uiExecutor
@@ -102,14 +92,12 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent {
* @param targetBulkUploadUiState
* TargetBulkUploadUiState
*/
- public TargetBulkUpdateWindowLayout(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final SpPermissionChecker checker, final UINotification uinotification,
- final TargetManagement targetManagement, final DeploymentManagement deploymentManagement,
- final TargetTagManagement tagManagement, final DistributionSetManagement distributionSetManagement,
- final EntityFactory entityFactory, final UiProperties uiproperties, final Executor uiExecutor,
- final TargetBulkUploadUiState targetBulkUploadUiState) {
- this.i18n = i18n;
- this.uinotification = uinotification;
+ public TargetBulkUpdateWindowLayout(final CommonUiDependencies uiDependencies, final TargetManagement targetManagement,
+ final DeploymentManagement deploymentManagement, final TargetTagManagement tagManagement,
+ final DistributionSetManagement distributionSetManagement, final UiProperties uiproperties,
+ final Executor uiExecutor, final TargetBulkUploadUiState targetBulkUploadUiState) {
+ this.i18n = uiDependencies.getI18n();
+ this.uinotification = uiDependencies.getUiNotification();
this.targetBulkUploadUiState = targetBulkUploadUiState;
this.binder = new Binder<>();
@@ -118,15 +106,14 @@ public class TargetBulkUpdateWindowLayout extends CustomComponent {
this.dsCombo = componentBuilder.createDistributionSetCombo(binder);
- this.tagsComponent = new TargetBulkTokenTags(i18n, eventBus, checker, uinotification, tagManagement);
+ this.tagsComponent = new TargetBulkTokenTags(uiDependencies, tagManagement);
this.descTextArea = componentBuilder.createDescriptionField(binder);
this.progressBar = createProgressBar();
this.targetsCountLabel = getStatusCountLabel();
- final BulkUploadHandler bulkUploadHandler = new BulkUploadHandler(i18n, eventBus, entityFactory, uiExecutor,
- targetManagement, tagManagement, distributionSetManagement, deploymentManagement,
- this::getBulkUploadInputsBean);
+ final BulkUploadHandler bulkUploadHandler = new BulkUploadHandler(uiDependencies, uiExecutor, targetManagement,
+ tagManagement, distributionSetManagement, deploymentManagement, this::getBulkUploadInputsBean);
this.uploadButton = createUploadButton(bulkUploadHandler);
this.linkToSystemConfigHelp = SPUIComponentProvider.getHelpLink(i18n,
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGrid.java
index df7221758..906d0dabf 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGrid.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGrid.java
@@ -19,18 +19,18 @@ import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.builder.GridComponentBuilder;
import org.eclipse.hawkbit.ui.common.data.filters.DsManagementFilterParams;
import org.eclipse.hawkbit.ui.common.data.providers.DistributionSetManagementStateDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.distributionset.AbstractDsGrid;
import org.eclipse.hawkbit.ui.common.event.EventTopics;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.FilterType;
import org.eclipse.hawkbit.ui.common.event.PinningChangedEventPayload;
import org.eclipse.hawkbit.ui.common.event.PinningChangedEventPayload.PinningChangedEventType;
-import org.eclipse.hawkbit.ui.common.grid.AbstractDsGrid;
import org.eclipse.hawkbit.ui.common.grid.support.DragAndDropSupport;
import org.eclipse.hawkbit.ui.common.grid.support.FilterSupport;
import org.eclipse.hawkbit.ui.common.grid.support.PinSupport;
@@ -45,10 +45,7 @@ import org.eclipse.hawkbit.ui.management.targettable.TargetGridLayoutUiState;
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.data.ValueProvider;
import com.vaadin.icons.VaadinIcons;
@@ -73,14 +70,8 @@ public class DistributionGrid extends AbstractDsGrid {
/**
* Constructor for DistributionGrid
*
- * @param eventBus
- * UIEventBus
- * @param i18n
- * VaadinMessageSource
- * @param permissionChecker
- * SpPermissionChecker
- * @param notification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetManagement
* TargetManagement
* @param distributionSetManagement
@@ -96,15 +87,12 @@ public class DistributionGrid extends AbstractDsGrid {
* @param distributionTagLayoutUiState
* TagFilterLayoutUiState
*/
- public DistributionGrid(final UIEventBus eventBus, final VaadinMessageSource i18n,
- final SpPermissionChecker permissionChecker, final UINotification notification,
- final TargetManagement targetManagement, final DistributionSetManagement distributionSetManagement,
- final DeploymentManagement deploymentManagement, final UiProperties uiProperties,
- final DistributionGridLayoutUiState distributionGridLayoutUiState,
+ public DistributionGrid(final CommonUiDependencies uiDependencies, final TargetManagement targetManagement,
+ final DistributionSetManagement distributionSetManagement, final DeploymentManagement deploymentManagement,
+ final UiProperties uiProperties, final DistributionGridLayoutUiState distributionGridLayoutUiState,
final TargetGridLayoutUiState targetGridLayoutUiState,
final TagFilterLayoutUiState distributionTagLayoutUiState) {
- super(i18n, eventBus, permissionChecker, notification, distributionSetManagement, distributionGridLayoutUiState,
- EventView.DEPLOYMENT);
+ super(uiDependencies, distributionSetManagement, distributionGridLayoutUiState, EventView.DEPLOYMENT);
this.targetGridLayoutUiState = targetGridLayoutUiState;
this.distributionGridLayoutUiState = distributionGridLayoutUiState;
@@ -117,14 +105,14 @@ public class DistributionGrid extends AbstractDsGrid {
final Map> sourceTargetAssignmentStrategies = new HashMap<>();
- final DeploymentAssignmentWindowController assignmentController = new DeploymentAssignmentWindowController(i18n,
- uiProperties, eventBus, notification, deploymentManagement);
+ final DeploymentAssignmentWindowController assignmentController = new DeploymentAssignmentWindowController(
+ uiDependencies, uiProperties, deploymentManagement);
final TargetsToDistributionSetAssignmentSupport targetsToDsAssignment = new TargetsToDistributionSetAssignmentSupport(
- notification, i18n, permissionChecker, assignmentController);
+ uiDependencies, assignmentController);
final TargetTagsToDistributionSetAssignmentSupport targetTagsToDsAssignment = new TargetTagsToDistributionSetAssignmentSupport(
- notification, i18n, targetManagement, targetsToDsAssignment);
+ uiDependencies, targetManagement, targetsToDsAssignment);
final DsTagsToDistributionSetAssignmentSupport dsTagsToDsAssignment = new DsTagsToDistributionSetAssignmentSupport(
- notification, i18n, distributionSetManagement, eventBus, permissionChecker);
+ uiDependencies, distributionSetManagement);
sourceTargetAssignmentStrategies.put(UIComponentIdProvider.TARGET_TABLE_ID, targetsToDsAssignment);
sourceTargetAssignmentStrategies.put(UIComponentIdProvider.TARGET_TAG_TABLE_ID, targetTagsToDsAssignment);
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGridLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGridLayout.java
index 46967a6b7..c75ca96a1 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGridLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstable/DistributionGridLayout.java
@@ -16,24 +16,24 @@ import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
import org.eclipse.hawkbit.repository.DistributionSetTypeManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
import org.eclipse.hawkbit.repository.SystemManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.TenantConfigurationManagement;
import org.eclipse.hawkbit.security.SystemSecurityContext;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
-import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetDetails;
-import org.eclipse.hawkbit.ui.common.detailslayout.DistributionSetDetailsHeader;
+import org.eclipse.hawkbit.ui.common.distributionset.AbstractDistributionSetGridLayout;
+import org.eclipse.hawkbit.ui.common.distributionset.DistributionSetDetails;
+import org.eclipse.hawkbit.ui.common.distributionset.DistributionSetDetailsHeader;
+import org.eclipse.hawkbit.ui.common.distributionset.DistributionSetGridHeader;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventLayoutViewAware;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.EventViewAware;
-import org.eclipse.hawkbit.ui.common.layout.AbstractGridComponentLayout;
import org.eclipse.hawkbit.ui.common.layout.MasterEntityAwareComponent;
import org.eclipse.hawkbit.ui.common.layout.listener.EntityModifiedListener;
import org.eclipse.hawkbit.ui.common.layout.listener.EntityModifiedListener.EntityModifiedAwareSupport;
@@ -45,18 +45,12 @@ import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedPinAw
import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedSelectionAwareSupport;
import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedTagTokenAwareSupport;
import org.eclipse.hawkbit.ui.common.state.TagFilterLayoutUiState;
-import org.eclipse.hawkbit.ui.distributions.dstable.DistributionSetGridHeader;
-import org.eclipse.hawkbit.ui.distributions.dstable.DsMetaDataWindowBuilder;
-import org.eclipse.hawkbit.ui.distributions.dstable.DsWindowBuilder;
import org.eclipse.hawkbit.ui.management.targettable.TargetGridLayoutUiState;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
- * Distribution Set table layout which is shown on the Distribution View
+ * Distribution Set table layout in deployment view.
*/
-public class DistributionGridLayout extends AbstractGridComponentLayout {
+public class DistributionGridLayout extends AbstractDistributionSetGridLayout {
private static final long serialVersionUID = 1L;
private final DistributionSetGridHeader distributionGridHeader;
@@ -64,25 +58,11 @@ public class DistributionGridLayout extends AbstractGridComponentLayout {
private final DistributionSetDetailsHeader distributionSetDetailsHeader;
private final DistributionSetDetails distributionDetails;
- private final transient FilterChangedListener dsFilterListener;
- private final transient PinningChangedListener pinningChangedListener;
- private final transient SelectionChangedListener masterDsChangedListener;
- private final transient EntityModifiedListener dsModifiedListener;
- private final transient EntityModifiedListener tagModifiedListener;
-
/**
* Constructor for DistributionGridLayout
*
- * @param eventBus
- * UIEventBus
- * @param i18n
- * VaadinMessageSource
- * @param permissionChecker
- * SpPermissionChecker
- * @param entityFactory
- * EntityFactory
- * @param notification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetManagement
* TargetManagement
* @param distributionSetManagement
@@ -110,9 +90,7 @@ public class DistributionGridLayout extends AbstractGridComponentLayout {
* @param targetGridLayoutUiState
* TargetGridLayoutUiState
*/
- public DistributionGridLayout(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final SpPermissionChecker permissionChecker, final EntityFactory entityFactory,
- final UINotification notification, final TargetManagement targetManagement,
+ public DistributionGridLayout(final CommonUiDependencies uiDependencies, final TargetManagement targetManagement,
final DistributionSetManagement distributionSetManagement, final SoftwareModuleManagement smManagement,
final DistributionSetTypeManagement distributionSetTypeManagement,
final DistributionSetTagManagement distributionSetTagManagement, final SystemManagement systemManagement,
@@ -121,40 +99,37 @@ public class DistributionGridLayout extends AbstractGridComponentLayout {
final DistributionGridLayoutUiState distributionGridLayoutUiState,
final TagFilterLayoutUiState distributionTagLayoutUiState,
final TargetGridLayoutUiState targetGridLayoutUiState) {
-
- final DsWindowBuilder dsWindowBuilder = new DsWindowBuilder(i18n, entityFactory, eventBus, notification,
- systemManagement, systemSecurityContext, configManagement, distributionSetManagement,
+ super(uiDependencies, systemManagement, systemSecurityContext, configManagement, distributionSetManagement,
distributionSetTypeManagement, EventView.DEPLOYMENT);
- final DsMetaDataWindowBuilder dsMetaDataWindowBuilder = new DsMetaDataWindowBuilder(i18n, entityFactory,
- eventBus, notification, permissionChecker, distributionSetManagement);
- this.distributionGridHeader = new DistributionSetGridHeader(i18n, permissionChecker, eventBus,
- distributionTagLayoutUiState, distributionGridLayoutUiState, EventLayout.DS_TAG_FILTER,
- EventView.DEPLOYMENT);
+ this.distributionGridHeader = new DistributionSetGridHeader(uiDependencies, distributionTagLayoutUiState,
+ distributionGridLayoutUiState, EventLayout.DS_TAG_FILTER, getEventView());
this.distributionGridHeader.buildHeader();
- this.distributionGrid = new DistributionGrid(eventBus, i18n, permissionChecker, notification, targetManagement,
- distributionSetManagement, deploymentManagement, uiProperties, distributionGridLayoutUiState,
- targetGridLayoutUiState, distributionTagLayoutUiState);
- this.distributionSetDetailsHeader = new DistributionSetDetailsHeader(i18n, permissionChecker, eventBus,
- notification, dsWindowBuilder, dsMetaDataWindowBuilder);
- this.distributionDetails = new DistributionSetDetails(i18n, eventBus, permissionChecker, notification,
- distributionSetManagement, smManagement, distributionSetTypeManagement, distributionSetTagManagement,
- configManagement, systemSecurityContext, dsMetaDataWindowBuilder);
+ this.distributionGrid = new DistributionGrid(uiDependencies, targetManagement, distributionSetManagement,
+ deploymentManagement, uiProperties, distributionGridLayoutUiState, targetGridLayoutUiState,
+ distributionTagLayoutUiState);
+
+ this.distributionSetDetailsHeader = new DistributionSetDetailsHeader(uiDependencies, getDsWindowBuilder(),
+ getDsMetaDataWindowBuilder());
+
+ this.distributionDetails = new DistributionSetDetails(uiDependencies, distributionSetManagement, smManagement,
+ distributionSetTypeManagement, distributionSetTagManagement, configManagement, systemSecurityContext,
+ getDsMetaDataWindowBuilder());
this.distributionDetails.setUnassignSmAllowed(false);
this.distributionDetails.buildDetails();
- this.dsFilterListener = new FilterChangedListener<>(eventBus, ProxyDistributionSet.class,
- new EventViewAware(EventView.DEPLOYMENT), distributionGrid.getFilterSupport());
- this.pinningChangedListener = new PinningChangedListener<>(eventBus, ProxyTarget.class,
- distributionGrid.getPinSupport());
- this.masterDsChangedListener = new SelectionChangedListener<>(eventBus,
- new EventLayoutViewAware(EventLayout.DS_LIST, EventView.DEPLOYMENT), getMasterDsAwareComponents());
- this.dsModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyDistributionSet.class)
- .entityModifiedAwareSupports(getDsModifiedAwareSupports()).build();
- this.tagModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyTag.class)
+ addEventListener(new FilterChangedListener<>(uiDependencies.getEventBus(), ProxyDistributionSet.class,
+ new EventViewAware(getEventView()), distributionGrid.getFilterSupport()));
+ addEventListener(new PinningChangedListener<>(uiDependencies.getEventBus(), ProxyTarget.class,
+ distributionGrid.getPinSupport()));
+ addEventListener(new SelectionChangedListener<>(uiDependencies.getEventBus(),
+ new EventLayoutViewAware(EventLayout.DS_LIST, getEventView()), getMasterDsAwareComponents()));
+ addEventListener(new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyDistributionSet.class)
+ .entityModifiedAwareSupports(getDsModifiedAwareSupports()).build());
+ addEventListener(new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyTag.class)
.entityModifiedAwareSupports(getTagModifiedAwareSupports()).parentEntityType(ProxyDistributionSet.class)
- .build();
+ .build());
buildLayout(distributionGridHeader, distributionGrid, distributionSetDetailsHeader, distributionDetails);
}
@@ -180,52 +155,13 @@ public class DistributionGridLayout extends AbstractGridComponentLayout {
.singletonList(EntityModifiedTagTokenAwareSupport.of(distributionDetails.getDistributionTagToken()));
}
- /**
- * Show distribution set tag header icon
- */
- public void showDsTagHeaderIcon() {
- distributionGridHeader.showFilterIcon();
+ @Override
+ public DistributionGrid getDistributionGrid() {
+ return distributionGrid;
}
- /**
- * Hide distribution set tag header icon
- */
- public void hideDsTagHeaderIcon() {
- distributionGridHeader.hideFilterIcon();
- }
-
- /**
- * Maximize the distribution grid
- */
- public void maximize() {
- distributionGrid.createMaximizedContent();
- hideDetailsLayout();
- }
-
- /**
- * Minimize the distribution grid
- */
- public void minimize() {
- distributionGrid.createMinimizedContent();
- showDetailsLayout();
- }
-
- /**
- * Restore the distribution grid state
- */
- public void restoreState() {
- distributionGridHeader.restoreState();
- distributionGrid.restoreState();
- }
-
- /**
- * Unsubscribe the changed listener
- */
- public void unsubscribeListener() {
- dsFilterListener.unsubscribe();
- pinningChangedListener.unsubscribe();
- masterDsChangedListener.unsubscribe();
- dsModifiedListener.unsubscribe();
- tagModifiedListener.unsubscribe();
+ @Override
+ public DistributionSetGridHeader getDistributionSetGridHeader() {
+ return distributionGridHeader;
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/AddDsTagWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/AddDsTagWindowController.java
index 2d16db57e..0b481ec32 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/AddDsTagWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/AddDsTagWindowController.java
@@ -9,61 +9,43 @@
package org.eclipse.hawkbit.ui.management.dstag;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
-import org.eclipse.hawkbit.repository.model.DistributionSetTag;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
+import org.eclipse.hawkbit.repository.model.Tag;
+import org.eclipse.hawkbit.ui.common.AbstractAddNamedEntityWindowController;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
+import org.eclipse.hawkbit.ui.common.tag.ProxyTagValidator;
import org.eclipse.hawkbit.ui.management.tag.TagWindowLayout;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for add distribution tag window
*/
-public class AddDsTagWindowController extends AbstractEntityWindowController {
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class AddDsTagWindowController extends AbstractAddNamedEntityWindowController {
private final DistributionSetTagManagement dsTagManagement;
-
private final TagWindowLayout layout;
+ private final ProxyTagValidator validator;
/**
* Constructor for AddDsTagWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTagManagement
* DistributionSetTagManagement
* @param layout
* Tag window layout
*/
- public AddDsTagWindowController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public AddDsTagWindowController(final CommonUiDependencies uiDependencies,
final DistributionSetTagManagement dsTagManagement, final TagWindowLayout layout) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.dsTagManagement = dsTagManagement;
-
this.layout = layout;
+ this.validator = new ProxyTagValidator(uiDependencies);
}
@Override
@@ -79,28 +61,24 @@ public class AddDsTagWindowController extends AbstractEntityWindowController getEntityClass() {
+ return ProxyTag.class;
+ }
+
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getParentEntityClass() {
+ return ProxyDistributionSet.class;
}
@Override
protected boolean isEntityValid(final ProxyTag entity) {
- if (!StringUtils.hasText(entity.getName())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.tagname"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
- if (dsTagManagement.getByName(trimmedName).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.tag.duplicate.check", trimmedName));
- return false;
- }
-
- return true;
+ return validator.isEntityValid(entity, () -> dsTagManagement.getByName(trimmedName).isPresent());
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DsTagWindowBuilder.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DsTagWindowBuilder.java
index ddc837737..a0daccf57 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DsTagWindowBuilder.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/DsTagWindowBuilder.java
@@ -9,14 +9,11 @@
package org.eclipse.hawkbit.ui.management.dstag;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowBuilder;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.management.tag.TagWindowLayout;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -24,34 +21,19 @@ import com.vaadin.ui.Window;
* Builder for distribution set tag window
*/
public class DsTagWindowBuilder extends AbstractEntityWindowBuilder {
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
private final DistributionSetTagManagement dsTagManagement;
/**
* Constructor for DsTagWindowBuilder
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTagManagement
- * DistributionSetTagManagement
+ * DistributionSetTagManagement
*/
- public DsTagWindowBuilder(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
- final DistributionSetTagManagement dsTagManagement) {
- super(i18n);
-
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ public DsTagWindowBuilder(final CommonUiDependencies uiDependencies, final DistributionSetTagManagement dsTagManagement) {
+ super(uiDependencies);
this.dsTagManagement = dsTagManagement;
}
@@ -63,14 +45,14 @@ public class DsTagWindowBuilder extends AbstractEntityWindowBuilder {
@Override
public Window getWindowForAdd() {
- return getWindowForNewEntity(new AddDsTagWindowController(i18n, entityFactory, eventBus, uiNotification,
- dsTagManagement, new TagWindowLayout(i18n, uiNotification)));
+ return getWindowForNewEntity(
+ new AddDsTagWindowController(uiDependencies, dsTagManagement, new TagWindowLayout(uiDependencies)));
}
@Override
public Window getWindowForUpdate(final ProxyTag proxyTag) {
- return getWindowForEntity(proxyTag, new UpdateDsTagWindowController(i18n, entityFactory, eventBus,
- uiNotification, dsTagManagement, new TagWindowLayout(i18n, uiNotification)));
+ return getWindowForEntity(proxyTag,
+ new UpdateDsTagWindowController(uiDependencies, dsTagManagement, new TagWindowLayout(uiDependencies)));
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/UpdateDsTagWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/UpdateDsTagWindowController.java
index fa012ac16..49bb0299c 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/UpdateDsTagWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/UpdateDsTagWindowController.java
@@ -9,70 +9,46 @@
package org.eclipse.hawkbit.ui.management.dstag;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.builder.TagUpdate;
-import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
-import org.eclipse.hawkbit.repository.exception.EntityReadOnlyException;
-import org.eclipse.hawkbit.repository.model.DistributionSetTag;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
+import org.eclipse.hawkbit.repository.model.Tag;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractUpdateNamedEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyIdentifiableEntity;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
+import org.eclipse.hawkbit.ui.common.tag.ProxyTagValidator;
import org.eclipse.hawkbit.ui.management.tag.TagWindowLayout;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for update distribution set tag window
*/
-public class UpdateDsTagWindowController extends AbstractEntityWindowController {
- private static final Logger LOG = LoggerFactory.getLogger(UpdateDsTagWindowController.class);
-
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class UpdateDsTagWindowController extends AbstractUpdateNamedEntityWindowController {
private final DistributionSetTagManagement dsTagManagement;
-
private final TagWindowLayout layout;
+ private final ProxyTagValidator validator;
private String nameBeforeEdit;
/**
* Constructor for UpdateDsTagWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTagManagement
* DistributionSetTagManagement
* @param layout
* Tag window layout
*/
- public UpdateDsTagWindowController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification,
+ public UpdateDsTagWindowController(final CommonUiDependencies uiDependencies,
final DistributionSetTagManagement dsTagManagement, final TagWindowLayout layout) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.dsTagManagement = dsTagManagement;
-
this.layout = layout;
+ this.validator = new ProxyTagValidator(uiDependencies);
}
@Override
@@ -100,38 +76,30 @@ public class UpdateDsTagWindowController extends AbstractEntityWindowController<
}
@Override
- protected void persistEntity(final ProxyTag entity) {
- final TagUpdate tagUpdate = entityFactory.tag().update(entity.getId()).name(entity.getName())
+ protected Tag persistEntityInRepository(final ProxyTag entity) {
+ final TagUpdate tagUpdate = getEntityFactory().tag().update(entity.getId()).name(entity.getName())
.description(entity.getDescription()).colour(entity.getColour());
+ return dsTagManagement.update(tagUpdate);
+ }
- try {
- final DistributionSetTag updatedTag = dsTagManagement.update(tagUpdate);
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getEntityClass() {
+ return ProxyTag.class;
+ }
- uiNotification.displaySuccess(i18n.getMessage("message.update.success", updatedTag.getName()));
- eventBus.publish(EventTopics.ENTITY_MODIFIED, this,
- new EntityModifiedEventPayload(EntityModifiedEventType.ENTITY_UPDATED, ProxyDistributionSet.class,
- ProxyTag.class, updatedTag.getId()));
- } catch (final EntityNotFoundException | EntityReadOnlyException e) {
- LOG.trace("Update of DS tag failed in UI: {}", e.getMessage());
- final String entityType = i18n.getMessage("caption.entity.distribution.tag");
- uiNotification
- .displayWarning(i18n.getMessage("message.deleted.or.notAllowed", entityType, entity.getName()));
- }
+ @Override
+ protected Class extends ProxyIdentifiableEntity> getParentEntityClass() {
+ return ProxyDistributionSet.class;
}
@Override
protected boolean isEntityValid(final ProxyTag entity) {
- if (!StringUtils.hasText(entity.getName())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.tagname"));
- return false;
- }
-
final String trimmedName = StringUtils.trimWhitespace(entity.getName());
- if (!nameBeforeEdit.equals(trimmedName) && dsTagManagement.getByName(trimmedName).isPresent()) {
- uiNotification.displayValidationError(i18n.getMessage("message.tag.duplicate.check", trimmedName));
- return false;
- }
+ return validator.isEntityValid(entity,
+ () -> hasNamedChanged(trimmedName) && dsTagManagement.getByName(trimmedName).isPresent());
+ }
- return true;
+ private boolean hasNamedChanged(final String trimmedName) {
+ return !nameBeforeEdit.equals(trimmedName);
}
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagButtons.java
index c38e6044d..8964d3624 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagButtons.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagButtons.java
@@ -12,7 +12,7 @@ import java.util.Collections;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.mappers.TagToProxyTagMapper;
import org.eclipse.hawkbit.ui.common.data.providers.DistributionSetTagDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
@@ -26,9 +26,6 @@ import org.eclipse.hawkbit.ui.common.state.TagFilterLayoutUiState;
import org.eclipse.hawkbit.ui.management.dstag.DsTagWindowBuilder;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -45,14 +42,8 @@ public class DistributionTagButtons extends AbstractTagFilterButtons {
/**
* Constructor for DistributionTagButtons
*
- * @param eventBus
- * UIEventBus
- * @param i18n
- * VaadinMessageSource
- * @param uiNotification
- * UINotification
- * @param permChecker
- * SpPermissionChecker
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param distributionSetTagManagement
* DistributionSetTagManagement
* @param distributionSetManagement
@@ -62,18 +53,17 @@ public class DistributionTagButtons extends AbstractTagFilterButtons {
* @param distributionTagLayoutUiState
* TagFilterLayoutUiState
*/
- public DistributionTagButtons(final UIEventBus eventBus, final VaadinMessageSource i18n,
- final UINotification uiNotification, final SpPermissionChecker permChecker,
+ public DistributionTagButtons(final CommonUiDependencies uiDependencies,
final DistributionSetTagManagement distributionSetTagManagement,
final DistributionSetManagement distributionSetManagement, final DsTagWindowBuilder dsTagWindowBuilder,
final TagFilterLayoutUiState distributionTagLayoutUiState) {
- super(eventBus, i18n, uiNotification, permChecker, distributionTagLayoutUiState);
+ super(uiDependencies, distributionTagLayoutUiState);
this.distributionSetTagManagement = distributionSetTagManagement;
this.dsTagWindowBuilder = dsTagWindowBuilder;
final DistributionSetsToTagAssignmentSupport distributionSetsToTagAssignment = new DistributionSetsToTagAssignmentSupport(
- uiNotification, i18n, distributionSetManagement, eventBus, permChecker);
+ uiDependencies, distributionSetManagement);
setDragAndDropSupportSupport(new DragAndDropSupport<>(this, i18n, uiNotification,
Collections.singletonMap(UIComponentIdProvider.DIST_TABLE_ID, distributionSetsToTagAssignment),
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagFilterHeader.java
index c33cbb2f9..75b705006 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagFilterHeader.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagFilterHeader.java
@@ -8,7 +8,7 @@
*/
package org.eclipse.hawkbit.ui.management.dstag.filter;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.grid.header.AbstractFilterHeader;
@@ -16,8 +16,6 @@ import org.eclipse.hawkbit.ui.common.state.TagFilterLayoutUiState;
import org.eclipse.hawkbit.ui.management.dstag.DsTagWindowBuilder;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Window;
@@ -34,21 +32,16 @@ public class DistributionTagFilterHeader extends AbstractFilterHeader {
/**
* Constructor for UIEventBus
*
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
- * @param eventBus
- * UIEventBus
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param dsTagWindowBuilder
- * DsTagWindowBuilder
+ * DsTagWindowBuilder
* @param distributionTagLayoutUiState
- * TagFilterLayoutUiState
+ * TagFilterLayoutUiState
*/
- public DistributionTagFilterHeader(final VaadinMessageSource i18n, final SpPermissionChecker permChecker,
- final UIEventBus eventBus, final DsTagWindowBuilder dsTagWindowBuilder,
+ public DistributionTagFilterHeader(final CommonUiDependencies uiDependencies, final DsTagWindowBuilder dsTagWindowBuilder,
final TagFilterLayoutUiState distributionTagLayoutUiState) {
- super(i18n, permChecker, eventBus);
+ super(uiDependencies.getI18n(), uiDependencies.getPermChecker(), uiDependencies.getEventBus());
this.distributionTagLayoutUiState = distributionTagLayoutUiState;
this.dsTagWindowBuilder = dsTagWindowBuilder;
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagLayout.java
index e17bd69d8..7b9def460 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/dstag/filter/DistributionTagLayout.java
@@ -13,8 +13,7 @@ import java.util.List;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.DistributionSetTagManagement;
-import org.eclipse.hawkbit.repository.EntityFactory;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTag;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
@@ -28,9 +27,6 @@ import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGener
import org.eclipse.hawkbit.ui.common.layout.listener.support.EntityModifiedGridRefreshAwareSupport;
import org.eclipse.hawkbit.ui.common.state.TagFilterLayoutUiState;
import org.eclipse.hawkbit.ui.management.dstag.DsTagWindowBuilder;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
@@ -52,43 +48,32 @@ public class DistributionTagLayout extends AbstractFilterLayout {
/**
* Constructor
- *
- * @param eventBus
- * UIEventBus
- * @param i18n
- * VaadinMessageSource
- * @param permChecker
- * SpPermissionChecker
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param distributionSetTagManagement
* DistributionSetTagManagement
- * @param entityFactory
- * EntityFactory
- * @param uiNotification
- * UINotification
* @param distributionSetManagement
* DistributionSetManagement
* @param distributionTagLayoutUiState
* TagFilterLayoutUiState
*/
- public DistributionTagLayout(final UIEventBus eventBus, final VaadinMessageSource i18n,
- final SpPermissionChecker permChecker, final DistributionSetTagManagement distributionSetTagManagement,
- final EntityFactory entityFactory, final UINotification uiNotification,
+ public DistributionTagLayout(final CommonUiDependencies uiDependencies,
+ final DistributionSetTagManagement distributionSetTagManagement,
final DistributionSetManagement distributionSetManagement,
final TagFilterLayoutUiState distributionTagLayoutUiState) {
- final DsTagWindowBuilder dsTagWindowBuilder = new DsTagWindowBuilder(i18n, entityFactory, eventBus,
- uiNotification, distributionSetTagManagement);
+ final DsTagWindowBuilder dsTagWindowBuilder = new DsTagWindowBuilder(uiDependencies, distributionSetTagManagement);
- this.distributionTagFilterHeader = new DistributionTagFilterHeader(i18n, permChecker, eventBus,
- dsTagWindowBuilder, distributionTagLayoutUiState);
- this.distributionTagButtons = new DistributionTagButtons(eventBus, i18n, uiNotification, permChecker,
- distributionSetTagManagement, distributionSetManagement, dsTagWindowBuilder,
+ this.distributionTagFilterHeader = new DistributionTagFilterHeader(uiDependencies, dsTagWindowBuilder,
distributionTagLayoutUiState);
+ this.distributionTagButtons = new DistributionTagButtons(uiDependencies, distributionSetTagManagement,
+ distributionSetManagement, dsTagWindowBuilder, distributionTagLayoutUiState);
- this.gridActionsVisibilityListener = new GridActionsVisibilityListener(eventBus,
+ this.gridActionsVisibilityListener = new GridActionsVisibilityListener(uiDependencies.getEventBus(),
new EventLayoutViewAware(EventLayout.DS_TAG_FILTER, EventView.DEPLOYMENT),
distributionTagButtons::hideActionColumns, distributionTagButtons::showEditColumn,
distributionTagButtons::showDeleteColumn);
- this.entityModifiedListener = new EntityModifiedListener.Builder<>(eventBus, ProxyTag.class)
+ this.entityModifiedListener = new EntityModifiedListener.Builder<>(uiDependencies.getEventBus(), ProxyTag.class)
.entityModifiedAwareSupports(getEntityModifiedAwareSupports())
.parentEntityType(ProxyDistributionSet.class).build();
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/miscs/DeploymentAssignmentWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/miscs/DeploymentAssignmentWindowController.java
index 47bb5739e..f14022d03 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/miscs/DeploymentAssignmentWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/miscs/DeploymentAssignmentWindowController.java
@@ -23,6 +23,7 @@ import org.eclipse.hawkbit.repository.model.DeploymentRequestBuilder;
import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult;
import org.eclipse.hawkbit.repository.model.RepositoryModelConstants;
import org.eclipse.hawkbit.ui.UiProperties;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyAssignmentWindow;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyDistributionSet;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
@@ -56,23 +57,18 @@ public class DeploymentAssignmentWindowController {
/**
* Constructor for DeploymentAssignmentWindowController
*
- * @param i18n
- * VaadinMessageSource
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param uiProperties
- * UiProperties
- * @param eventBus
- * UIEventBus
- * @param notification
- * UINotification
+ * UiProperties
* @param deploymentManagement
- * DeploymentManagement
+ * DeploymentManagement
*/
- public DeploymentAssignmentWindowController(final VaadinMessageSource i18n, final UiProperties uiProperties,
- final UIEventBus eventBus, final UINotification notification,
+ public DeploymentAssignmentWindowController(final CommonUiDependencies uiDependencies, final UiProperties uiProperties,
final DeploymentManagement deploymentManagement) {
- this.i18n = i18n;
- this.eventBus = eventBus;
- this.notification = notification;
+ this.i18n = uiDependencies.getI18n();
+ this.eventBus = uiDependencies.getEventBus();
+ this.notification = uiDependencies.getUiNotification();
this.deploymentManagement = deploymentManagement;
this.assignmentWindowLayout = new AssignmentWindowLayout(i18n, uiProperties);
@@ -100,7 +96,7 @@ public class DeploymentAssignmentWindowController {
/**
* Save the given distribution sets to targets assignments
- *
+ *
* @param proxyTargets
* to assign the given distribution sets to
* @param proxyDistributionSets
@@ -163,7 +159,7 @@ public class DeploymentAssignmentWindowController {
/**
* Check if the maintenance window is valid or not
- *
+ *
* @return boolean if maintenance window is valid or not
*/
public boolean isMaintenanceWindowValid() {
@@ -183,7 +179,7 @@ public class DeploymentAssignmentWindowController {
/**
* Check if the time-forced date is valid
- *
+ *
* @return boolean if time-forced date is valid or not
*/
public boolean isForceTimeValid() {
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagWindowLayout.java
index 0fd3c1835..522225d85 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagWindowLayout.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/tag/TagWindowLayout.java
@@ -9,9 +9,9 @@
package org.eclipse.hawkbit.ui.management.tag;
import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyFilterButton;
import org.eclipse.hawkbit.ui.components.ColorPickerComponent;
-import org.eclipse.hawkbit.ui.utils.UINotification;
import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import com.vaadin.ui.ComponentContainer;
@@ -24,7 +24,7 @@ import com.vaadin.ui.TextField;
* Abstract class for tag add/update window layout.
*
* @param
- * Generic type of ProxyFilterButton
+ * Generic type of ProxyFilterButton
*/
public class TagWindowLayout extends AbstractEntityWindowLayout {
protected final VaadinMessageSource i18n;
@@ -37,18 +37,16 @@ public class TagWindowLayout extends AbstractEntity
/**
* Constructor for AbstractTagWindowLayout
- *
- * @param i18n
- * VaadinMessageSource
- * @param uiNotification
- * UINotification
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
*/
- public TagWindowLayout(final VaadinMessageSource i18n, final UINotification uiNotification) {
+ public TagWindowLayout(final CommonUiDependencies uiDependencies) {
super();
- this.i18n = i18n;
+ this.i18n = uiDependencies.getI18n();
- this.tagComponentBuilder = new TagWindowLayoutComponentBuilder(i18n, uiNotification);
+ this.tagComponentBuilder = new TagWindowLayoutComponentBuilder(i18n, uiDependencies.getUiNotification());
this.tagName = tagComponentBuilder.createNameField(binder);
this.tagDescription = tagComponentBuilder.createDescription(binder);
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/AddTargetWindowController.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/AddTargetWindowController.java
index 4a47590c2..e039ae2cf 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/AddTargetWindowController.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/AddTargetWindowController.java
@@ -8,77 +8,50 @@
*/
package org.eclipse.hawkbit.ui.management.targettable;
-import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.model.Target;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowController;
-import org.eclipse.hawkbit.ui.common.AbstractEntityWindowLayout;
+import org.eclipse.hawkbit.ui.common.AbstractAddNamedEntityWindowController;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.EntityWindowLayout;
import org.eclipse.hawkbit.ui.common.data.mappers.TargetToProxyTargetMapper;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
-import org.eclipse.hawkbit.ui.common.event.CommandTopics;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload;
-import org.eclipse.hawkbit.ui.common.event.EntityModifiedEventPayload.EntityModifiedEventType;
import org.eclipse.hawkbit.ui.common.event.EventLayout;
-import org.eclipse.hawkbit.ui.common.event.EventTopics;
import org.eclipse.hawkbit.ui.common.event.EventView;
import org.eclipse.hawkbit.ui.common.event.SelectionChangedEventPayload;
import org.eclipse.hawkbit.ui.common.event.SelectionChangedEventPayload.SelectionChangedEventType;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
import org.springframework.util.StringUtils;
-import org.vaadin.spring.events.EventBus.UIEventBus;
/**
* Controller for add target window
*/
-public class AddTargetWindowController extends AbstractEntityWindowController {
- private final VaadinMessageSource i18n;
- private final EntityFactory entityFactory;
- private final UIEventBus eventBus;
- private final UINotification uiNotification;
+public class AddTargetWindowController
+ extends AbstractAddNamedEntityWindowController {
private final TargetManagement targetManagement;
-
private final TargetWindowLayout layout;
-
private final EventView view;
+ private final ProxyTargetValidator proxyTargetValidator;
/**
* Constructor for AddTargetWindowController
*
- * @param i18n
- * VaadinMessageSource
- * @param entityFactory
- * EntityFactory
- * @param eventBus
- * UIEventBus
- * @param uiNotification
- * UINotification
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
* @param targetManagement
- * TargetManagement
+ * TargetManagement
* @param layout
- * TargetWindowLayout
+ * TargetWindowLayout
* @param view
- * EventView
+ * EventView
*/
- public AddTargetWindowController(final VaadinMessageSource i18n, final EntityFactory entityFactory,
- final UIEventBus eventBus, final UINotification uiNotification, final TargetManagement targetManagement,
+ public AddTargetWindowController(final CommonUiDependencies uiDependencies, final TargetManagement targetManagement,
final TargetWindowLayout layout, final EventView view) {
- this.i18n = i18n;
- this.entityFactory = entityFactory;
- this.eventBus = eventBus;
- this.uiNotification = uiNotification;
+ super(uiDependencies);
this.targetManagement = targetManagement;
-
this.layout = layout;
-
this.view = view;
- }
-
- @Override
- public AbstractEntityWindowLayout getLayout() {
- return layout;
+ this.proxyTargetValidator = new ProxyTargetValidator(uiDependencies);
}
@Override
@@ -88,6 +61,11 @@ public class AddTargetWindowController extends AbstractEntityWindowController getLayout() {
+ return layout;
+ }
+
@Override
protected void adaptLayout(final ProxyTarget proxyEntity) {
layout.setControllerIdEnabled(true);
@@ -95,33 +73,38 @@ public class AddTargetWindowController extends AbstractEntityWindowController(
- SelectionChangedEventType.ENTITY_SELECTED, addedItem, EventLayout.TARGET_LIST, view));
+ @Override
+ protected String getDisplayableNameForFailedMessage(final ProxyTarget entity) {
+ return entity.getName() == null ? entity.getControllerId() : entity.getName();
+ }
+
+ @Override
+ protected Class getEntityClass() {
+ return ProxyTarget.class;
+ }
+
+ @Override
+ protected void selectPersistedEntity(final Target entity) {
+ final ProxyTarget addedItem = new TargetToProxyTargetMapper(getI18n()).map(entity);
+ publishSelectionEvent(new SelectionChangedEventPayload<>(SelectionChangedEventType.ENTITY_SELECTED, addedItem,
+ EventLayout.TARGET_LIST, view));
}
@Override
protected boolean isEntityValid(final ProxyTarget entity) {
- if (!StringUtils.hasText(entity.getControllerId())) {
- uiNotification.displayValidationError(i18n.getMessage("message.error.missing.controllerId"));
- return false;
- }
-
final String trimmedControllerId = StringUtils.trimWhitespace(entity.getControllerId());
- if (targetManagement.getByControllerID(trimmedControllerId).isPresent()) {
- uiNotification
- .displayValidationError(i18n.getMessage("message.target.duplicate.check", trimmedControllerId));
- return false;
- }
-
- return true;
+ return proxyTargetValidator.isEntityValid(entity,
+ () -> targetManagement.getByControllerID(trimmedControllerId).isPresent());
}
+
}
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/ProxyTargetValidator.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/ProxyTargetValidator.java
new file mode 100644
index 000000000..acb7e3690
--- /dev/null
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/ProxyTargetValidator.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2020 Bosch.IO GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.hawkbit.ui.management.targettable;
+
+import java.util.function.BooleanSupplier;
+
+import org.eclipse.hawkbit.ui.common.EntityValidator;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
+import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
+import org.springframework.util.StringUtils;
+
+/**
+ * Validator used in target window controllers to validate {@link ProxyTarget}.
+ */
+public class ProxyTargetValidator extends EntityValidator {
+
+ /**
+ * Constructor
+ *
+ * @param uiDependencies
+ * {@link CommonUiDependencies}
+ */
+ public ProxyTargetValidator(final CommonUiDependencies uiDependencies) {
+ super(uiDependencies);
+ }
+
+ boolean isEntityValid(final ProxyTarget entity, final BooleanSupplier duplicateCheck) {
+ if (!StringUtils.hasText(entity.getControllerId())) {
+ displayValidationError("message.error.missing.controllerId");
+ return false;
+ }
+
+ if (duplicateCheck.getAsBoolean()) {
+ final String trimmedControllerId = StringUtils.trimWhitespace(entity.getControllerId());
+ displayValidationError("message.target.duplicate.check", trimmedControllerId);
+ return false;
+ }
+
+ return true;
+ }
+}
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 142147fbf..186e66640 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetails.java
@@ -21,7 +21,7 @@ import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.TargetTagManagement;
import org.eclipse.hawkbit.repository.model.DistributionSet;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.providers.TargetMetaDataDataProvider;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyKeyValueDetails;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyMetaData;
@@ -33,9 +33,6 @@ import org.eclipse.hawkbit.ui.common.detailslayout.MetadataDetailsGrid;
import org.eclipse.hawkbit.ui.common.tagdetails.TargetTagToken;
import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
@@ -59,12 +56,10 @@ public class TargetDetails extends AbstractGridDetailsLayout {
private final transient TargetMetaDataWindowBuilder targetMetaDataWindowBuilder;
- TargetDetails(final VaadinMessageSource i18n, final UIEventBus eventBus,
- final SpPermissionChecker permissionChecker, final UINotification uiNotification,
- final TargetTagManagement tagManagement, final TargetManagement targetManagement,
- final DeploymentManagement deploymentManagement,
+ TargetDetails(final CommonUiDependencies uiDependencies, final TargetTagManagement tagManagement,
+ final TargetManagement targetManagement, final DeploymentManagement deploymentManagement,
final TargetMetaDataWindowBuilder targetMetaDataWindowBuilder) {
- super(i18n);
+ super(uiDependencies.getI18n());
this.targetManagement = targetManagement;
this.deploymentManagement = deploymentManagement;
@@ -76,8 +71,7 @@ public class TargetDetails extends AbstractGridDetailsLayout {
this.installedDsDetails = buildInstalledDsDetails();
- this.targetTagToken = new TargetTagToken(permissionChecker, i18n, uiNotification, eventBus, tagManagement,
- targetManagement);
+ this.targetTagToken = new TargetTagToken(uiDependencies, tagManagement, targetManagement);
addDetailsComponents(Arrays.asList(new SimpleEntry<>(i18n.getMessage("caption.tab.details"), entityDetails),
new SimpleEntry<>(i18n.getMessage("caption.tab.description"), entityDescription),
@@ -87,8 +81,8 @@ public class TargetDetails extends AbstractGridDetailsLayout {
new SimpleEntry<>(i18n.getMessage("caption.tags.tab"), getTargetTagToken().getTagPanel()),
new SimpleEntry<>(i18n.getMessage("caption.logs.tab"), logDetails)));
- if (permissionChecker.hasReadRepositoryPermission()) {
- this.targetMetadataGrid = new MetadataDetailsGrid<>(i18n, eventBus,
+ if (uiDependencies.getPermChecker().hasReadRepositoryPermission()) {
+ this.targetMetadataGrid = new MetadataDetailsGrid<>(i18n, uiDependencies.getEventBus(),
UIComponentIdProvider.TARGET_TYPE_PREFIX, this::showMetadataDetails,
new TargetMetaDataDataProvider(targetManagement));
addDetailsComponent(new SimpleEntry<>(i18n.getMessage("caption.metadata"), targetMetadataGrid));
diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetailsHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetailsHeader.java
index cff290dde..ac125a6d8 100644
--- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetailsHeader.java
+++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetDetailsHeader.java
@@ -8,13 +8,10 @@
*/
package org.eclipse.hawkbit.ui.management.targettable;
-import org.eclipse.hawkbit.ui.SpPermissionChecker;
+import org.eclipse.hawkbit.ui.common.CommonUiDependencies;
import org.eclipse.hawkbit.ui.common.data.proxies.ProxyTarget;
import org.eclipse.hawkbit.ui.common.grid.header.AbstractDetailsHeader;
import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider;
-import org.eclipse.hawkbit.ui.utils.UINotification;
-import org.eclipse.hawkbit.ui.utils.VaadinMessageSource;
-import org.vaadin.spring.events.EventBus.UIEventBus;
import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
@@ -31,24 +28,16 @@ public class TargetDetailsHeader extends AbstractDetailsHeader