diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml
index e0baa172f..3c14b94ac 100644
--- a/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml
+++ b/hawkbit-dmf/hawkbit-dmf-amqp/pom.xml
@@ -70,6 +70,11 @@
org.slf4j
slf4j-api
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
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 6629cff3e..97f97df53 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
@@ -139,7 +139,7 @@ public class DeploymentView extends AbstractNotificationView implements BrowserW
if (permChecker.hasTargetReadPermission()) {
this.actionHistoryLayout = new ActionHistoryLayout(i18n, deploymentManagement, eventBus, uiNotification,
- managementUIState);
+ managementUIState, permChecker);
this.actionStatusLayout = new ActionStatusLayout(i18n, eventBus, managementUIState);
this.actionStatusMsgLayout = new ActionStatusMsgLayout(i18n, eventBus, managementUIState);
this.targetTagFilterLayout = new TargetTagFilterLayout(i18n, managementUIState,
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 20add3e1f..8377a1251 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
@@ -16,6 +16,7 @@ import org.eclipse.hawkbit.repository.exception.CancelActionNotAllowedException;
import org.eclipse.hawkbit.repository.model.Action;
import org.eclipse.hawkbit.repository.model.Action.ActionType;
import org.eclipse.hawkbit.repository.model.Target;
+import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.common.ConfirmationDialog;
import org.eclipse.hawkbit.ui.common.grid.AbstractGrid;
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
@@ -116,10 +117,12 @@ public class ActionHistoryGrid extends AbstractGrid {
* @param eventBus
* @param notification
* @param managementUIState
+ * @param permissionChecker
*/
protected ActionHistoryGrid(final VaadinMessageSource i18n, final DeploymentManagement deploymentManagement,
- final UIEventBus eventBus, final UINotification notification, final ManagementUIState managementUIState) {
- super(i18n, eventBus, null);
+ final UIEventBus eventBus, final UINotification notification, final ManagementUIState managementUIState,
+ final SpPermissionChecker permissionChecker) {
+ super(i18n, eventBus, permissionChecker);
this.deploymentManagement = deploymentManagement;
this.notification = notification;
this.managementUIState = managementUIState;
@@ -239,19 +242,22 @@ public class ActionHistoryGrid extends AbstractGrid {
}
private StatusFontIcon createCancelButtonMetadata(final Action action) {
- final boolean isDisabled = !action.isActive() || action.isCancelingOrCanceled();
+ final boolean isDisabled = !action.isActive() || action.isCancelingOrCanceled()
+ || !permissionChecker.hasUpdateTargetPermission();
return new StatusFontIcon(FontAwesome.TIMES, STATUS_ICON_NEUTRAL, i18n.getMessage("message.cancel.action"),
UIComponentIdProvider.ACTION_HISTORY_TABLE_CANCEL_ID, isDisabled);
}
private StatusFontIcon createForceButtonMetadata(final Action action) {
- final boolean isDisabled = !action.isActive() || action.isForce() || action.isCancelingOrCanceled();
+ final boolean isDisabled = !action.isActive() || action.isForce() || action.isCancelingOrCanceled()
+ || !permissionChecker.hasUpdateTargetPermission();
return new StatusFontIcon(FontAwesome.BOLT, STATUS_ICON_NEUTRAL, i18n.getMessage("message.force.action"),
UIComponentIdProvider.ACTION_HISTORY_TABLE_FORCE_ID, isDisabled);
}
private StatusFontIcon createForceQuitButtonMetadata(final Action action) {
- final boolean isDisabled = !action.isActive() || !action.isCancelingOrCanceled();
+ final boolean isDisabled = !action.isActive() || !action.isCancelingOrCanceled()
+ || !permissionChecker.hasUpdateTargetPermission();
return new StatusFontIcon(FontAwesome.TIMES, STATUS_ICON_RED, i18n.getMessage("message.forcequit.action"),
UIComponentIdProvider.ACTION_HISTORY_TABLE_FORCE_QUIT_ID, isDisabled);
}
@@ -313,7 +319,7 @@ public class ActionHistoryGrid extends AbstractGrid {
deploymentManagement.forceTargetAction(actionId);
populateAndUpdateTargetDetails(selectedTarget);
notification.displaySuccess(i18n.getMessage("message.force.action.success"));
- });
+ }, UIComponentIdProvider.CONFIRMATION_POPUP_ID);
UI.getCurrent().addWindow(confirmDialog.getWindow());
confirmDialog.getWindow().bringToFront();
@@ -341,7 +347,7 @@ public class ActionHistoryGrid extends AbstractGrid {
} else {
notification.displayValidationError(i18n.getMessage("message.forcequit.action.failed"));
}
- }, FontAwesome.WARNING);
+ }, FontAwesome.WARNING, UIComponentIdProvider.CONFIRMATION_POPUP_ID, null);
UI.getCurrent().addWindow(confirmDialog.getWindow());
confirmDialog.getWindow().bringToFront();
@@ -372,7 +378,7 @@ public class ActionHistoryGrid extends AbstractGrid {
} else {
notification.displayValidationError(i18n.getMessage("message.cancel.action.failed"));
}
- });
+ }, UIComponentIdProvider.CONFIRMATION_POPUP_ID);
UI.getCurrent().addWindow(confirmDialog.getWindow());
confirmDialog.getWindow().bringToFront();
}
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 ed4dedcc3..7c916660f 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
@@ -12,6 +12,7 @@ import java.util.Optional;
import org.eclipse.hawkbit.repository.DeploymentManagement;
import org.eclipse.hawkbit.repository.model.Target;
+import org.eclipse.hawkbit.ui.SpPermissionChecker;
import org.eclipse.hawkbit.ui.common.grid.AbstractGrid;
import org.eclipse.hawkbit.ui.common.grid.AbstractGridComponentLayout;
import org.eclipse.hawkbit.ui.common.grid.DefaultGridHeader;
@@ -47,6 +48,8 @@ public class ActionHistoryLayout extends AbstractGridComponentLayout {
private final String actionHistoryCaption;
+ private final SpPermissionChecker permChecker;
+
/**
* Constructor.
*
@@ -55,13 +58,16 @@ public class ActionHistoryLayout extends AbstractGridComponentLayout {
* @param eventBus
* @param notification
* @param managementUIState
+ * @param permChecker
*/
public ActionHistoryLayout(final VaadinMessageSource i18n, final DeploymentManagement deploymentManagement,
- final UIEventBus eventBus, final UINotification notification, final ManagementUIState managementUIState) {
+ final UIEventBus eventBus, final UINotification notification, final ManagementUIState managementUIState,
+ final SpPermissionChecker permChecker) {
super(i18n, eventBus);
this.deploymentManagement = deploymentManagement;
this.notification = notification;
this.managementUIState = managementUIState;
+ this.permChecker = permChecker;
actionHistoryCaption = getActionHistoryCaption();
init();
}
@@ -89,7 +95,8 @@ public class ActionHistoryLayout extends AbstractGridComponentLayout {
@Override
public ActionHistoryGrid createGrid() {
- return new ActionHistoryGrid(getI18n(), deploymentManagement, getEventBus(), notification, managementUIState);
+ return new ActionHistoryGrid(getI18n(), deploymentManagement, getEventBus(), notification, managementUIState,
+ permChecker);
}
@EventBusListenerMethod(scope = EventScope.UI)