From 8e57eb6d269df8ae980f951df04e8a68625ce904 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Thu, 23 Jun 2016 14:49:47 +0200 Subject: [PATCH] Add action column for action history table and remove context menu Signed-off-by: SirWayne --- .../hawkbit/ui/common/ConfirmationDialog.java | 1 + .../actionhistory/ActionHistoryTable.java | 262 ++++++++---------- .../ui/rollout/rollout/RolloutListGrid.java | 87 +++--- .../ui/utils/SPUIComponentIdProvider.java | 24 +- .../hawkbit/ui/utils/SPUIDefinitions.java | 5 + .../src/main/resources/messages.properties | 3 +- .../src/main/resources/messages_de.properties | 3 +- .../src/main/resources/messages_en.properties | 3 +- 8 files changed, 184 insertions(+), 204 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java index 5f20d942a..bd1f4cb9e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/ConfirmationDialog.java @@ -89,6 +89,7 @@ public class ConfirmationDialog implements Button.ClickListener { final Button cancelButton = SPUIComponentProvider.getButton(null, cancelLabel, "", null, false, null, SPUIButtonStyleTiny.class); cancelButton.addClickListener(this); + cancelButton.setId(SPUIComponentIdProvider.CANCEL_BUTTON); window.setModal(true); window.addStyleName(SPUIStyleDefinitions.CONFIRMBOX_WINDOW_SYLE); if (this.callback == null) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index e1581bea2..503ec83c7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -27,11 +27,11 @@ import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.ui.common.ConfirmationDialog; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; +import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.management.event.ManagementUIEvent; import org.eclipse.hawkbit.ui.management.event.PinUnpinEvent; import org.eclipse.hawkbit.ui.management.event.TargetTableEvent; import org.eclipse.hawkbit.ui.management.state.ManagementUIState; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; @@ -50,15 +50,14 @@ import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; -import com.google.common.collect.Lists; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.util.HierarchicalContainer; -import com.vaadin.event.Action.Handler; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; @@ -74,11 +73,13 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class ActionHistoryTable extends TreeTable implements Handler { +public class ActionHistoryTable extends TreeTable { + private static final long serialVersionUID = -1631514704696786653L; + private static final Logger LOG = LoggerFactory.getLogger(ActionHistoryTable.class); private static final String BUTTON_CANCEL = "button.cancel"; private static final String BUTTON_OK = "button.ok"; - private static final long serialVersionUID = -1631514704696786653L; + @Autowired private I18N i18n; @@ -95,14 +96,10 @@ public class ActionHistoryTable extends TreeTable implements Handler { private ManagementUIState managementUIState; private Container hierarchicalContainer; - private boolean alreadyHasMessages = false; + private boolean alreadyHasMessages; private Target target; - com.vaadin.event.Action actionCancel; - com.vaadin.event.Action actionForce; - com.vaadin.event.Action actionForceQuit; - private static final Logger LOG = LoggerFactory.getLogger(ActionHistoryTable.class); private static final String STATUS_ICON_GREEN = "statusIconGreen"; /** @@ -110,10 +107,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { */ @PostConstruct public void init() { - actionCancel = new com.vaadin.event.Action(i18n.get("message.cancel.action")); - actionForceQuit = new com.vaadin.event.Action(i18n.get("message.forcequit.action")); - actionForceQuit.setIcon(FontAwesome.WARNING); - actionForce = new com.vaadin.event.Action(i18n.get("message.force.action")); initializeTableSettings(); buildComponent(); restorePreviousState(); @@ -150,11 +143,12 @@ public class ActionHistoryTable extends TreeTable implements Handler { } private void setColumnExpandRatioForMinimisedTable() { - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.3f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.15f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.3f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.15f); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.3F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.15F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.3F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.15F); + setColumnExpandRatio(SPUIDefinitions.ACTIONS_COLUMN, 0.2F); } private void initializeTableSettings() { @@ -164,14 +158,15 @@ public class ActionHistoryTable extends TreeTable implements Handler { setMultiSelect(false); setSortEnabled(true); setColumnReorderingAllowed(true); - setHeight(100.0f, Unit.PERCENTAGE); - setWidth(100.0f, Unit.PERCENTAGE); + setHeight(100.0F, Unit.PERCENTAGE); + setWidth(100.0F, Unit.PERCENTAGE); setImmediate(true); setStyleName("sp-table"); addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); addStyleName(ValoTheme.TABLE_SMALL); setColumnAlignment(SPUIDefinitions.ACTION_HIS_TBL_FORCED, Align.CENTER); setColumnAlignment(SPUIDefinitions.ACTION_HIS_TBL_STATUS, Align.CENTER); + setColumnAlignment(SPUIDefinitions.ACTIONS_COLUMN, Align.CENTER); // listeners for child addExpandListener(event -> { expandParentActionRow(event.getItemId()); @@ -181,11 +176,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { collapseParentActionRow(event.getItemId()); managementUIState.getExpandParentActionRowId().remove(event.getItemId()); }); - /* - * Add the cancel action handler for active actions. To be used to - * cancel the action. - */ - addActionHandler(this); } /** @@ -204,6 +194,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { null); hierarchicalContainer.addContainerProperty(SPUIDefinitions.ACTION_HIS_TBL_MSGS_HIDDEN, List.class, null); hierarchicalContainer.addContainerProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, String.class, null); + } private List getVisbleColumns() { @@ -213,6 +204,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_DATETIME); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_STATUS); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_FORCED); + visibleColumnIds.add(SPUIDefinitions.ACTIONS_COLUMN); + if (managementUIState.isActionHistoryMaximized()) { visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME); visibleColumnIds.add(SPUIDefinitions.ACTION_HIS_TBL_MSGS); @@ -242,12 +235,12 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void getcontainerData() { hierarchicalContainer.removeAllItems(); - + if (target != null) { /* service method to create action history for target */ final List actionHistory = deploymentManagement - .findActionsWithStatusCountByTargetOrderByIdDesc(target); - + .findActionsWithStatusCountByTargetOrderByIdDesc(target); + addDetailsToContainer(actionHistory); } } @@ -300,23 +293,22 @@ public class ActionHistoryTable extends TreeTable implements Handler { * add distribution name to the item which will be displayed in the * table. The name should not exceed certain limit. */ - item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST).setValue(actionWithStatusCount.getDsName() + ":" + - actionWithStatusCount.getDsVersion()); + item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST) + .setValue(actionWithStatusCount.getDsName() + ":" + actionWithStatusCount.getDsVersion()); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).setValue(action); /* Default no child */ ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), false); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) - .setValue(SPDateTimeUtil.getFormattedDate((actionWithStatusCount.getAction().getLastModifiedAt() != null) - ? actionWithStatusCount.getAction().getLastModifiedAt() - : actionWithStatusCount.getAction().getLastModifiedAt())); + .setValue(SPDateTimeUtil.getFormattedDate(actionWithStatusCount.getAction().getLastModifiedAt())); item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME) .setValue(actionWithStatusCount.getRolloutName()); if (actionWithStatusCount.getActionStatusCount() > 0) { - ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), true); + ((Hierarchical) hierarchicalContainer).setChildrenAllowed(actionWithStatusCount.getAction().getId(), + true); } } } @@ -350,12 +342,18 @@ public class ActionHistoryTable extends TreeTable implements Handler { return getForcedColumn(itemId); } }); + + addGeneratedColumn(SPUIDefinitions.ACTIONS_COLUMN, new Table.ColumnGenerator() { + + private static final long serialVersionUID = 1L; + + @Override + public Component generateCell(final Table source, final Object itemId, final Object columnId) { + return createActionBarColumn(itemId); + } + }); } - /** - * @param itemId - * @return - */ private Component getForcedColumn(final Object itemId) { final Action actionWithActiveStatus = (Action) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).getValue(); @@ -372,10 +370,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { return actionLabel; } - /** - * @param itemId - * @return - */ private Component getActiveColumn(final Object itemId) { final Action.Status status = (Action.Status) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_STATUS_HIDDEN).getValue(); @@ -397,10 +391,43 @@ public class ActionHistoryTable extends TreeTable implements Handler { return activeStatusIcon; } - /** - * @param itemId - * @return - */ + private HorizontalLayout createActionBarColumn(final Object itemId) { + final HorizontalLayout actionBar = new HorizontalLayout(); + final Item item = hierarchicalContainer.getItem(itemId); + final Long actionId = (Long) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID_HIDDEN).getValue(); + final String activeValue = (String) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN) + .getValue(); + final Action actionWithActiveStatus = (Action) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED) + .getValue(); + + if (actionWithActiveStatus == null) { + return null; + } + final boolean isActionActive = target != null && SPUIDefinitions.ACTIVE.equals(activeValue); + + final Button actionCancel = SPUIComponentProvider.getButton( + SPUIComponentIdProvider.ACTION_HISTORY_TABLE_CANCEL_ID, "", i18n.get("message.cancel.action"), + ValoTheme.BUTTON_TINY, true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); + actionCancel.setEnabled(isActionActive && !actionWithActiveStatus.isCancelingOrCanceled()); + actionCancel.addClickListener(event -> confirmAndCancelAction(actionId)); + + final Button actionForce = SPUIComponentProvider.getButton( + SPUIComponentIdProvider.ACTION_HISTORY_TABLE_FORCE_ID, "", i18n.get("message.force.action"), + ValoTheme.BUTTON_TINY, true, FontAwesome.BOLT, SPUIButtonStyleSmallNoBorder.class); + actionForce.setEnabled(isActionActive && !actionWithActiveStatus.isForce()); + actionForce.addClickListener(event -> confirmAndForceAction(actionId)); + + final Button actionForceQuit = SPUIComponentProvider.getButton( + SPUIComponentIdProvider.ACTION_HISTORY_TABLE_FORCE_QUIT_ID, "", i18n.get("message.forcequit.action"), + ValoTheme.BUTTON_TINY + " redicon", true, FontAwesome.TIMES, SPUIButtonStyleSmallNoBorder.class); + actionForceQuit.setEnabled(isActionActive && actionWithActiveStatus.isCancelingOrCanceled()); + actionForceQuit.addClickListener(event -> confirmAndForceQuitAction(actionId)); + + actionBar.addComponents(actionCancel, actionForce, actionForceQuit); + + return actionBar; + } + private Component getStatusColumn(final Object itemId) { final Action.Status status = (Action.Status) hierarchicalContainer.getItem(itemId) .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_STATUS_HIDDEN).getValue(); @@ -427,11 +454,11 @@ public class ActionHistoryTable extends TreeTable implements Handler { final Pageable pageReq = new PageRequest(0, 1000, new Sort(Direction.DESC, ActionStatusFields.ID.getFieldName())); final Page actionStatusList; - if (managementUIState.isActionHistoryMaximized()) { - actionStatusList = deploymentManagement.findActionStatusByActionWithMessages(pageReq, action); - } else { - actionStatusList = deploymentManagement.findActionStatusByAction(pageReq, action); - } + if (managementUIState.isActionHistoryMaximized()) { + actionStatusList = deploymentManagement.findActionStatusByActionWithMessages(pageReq, action); + } else { + actionStatusList = deploymentManagement.findActionStatusByAction(pageReq, action); + } final List content = actionStatusList.getContent(); /* * Since the recent action status and messages are already @@ -449,9 +476,8 @@ public class ActionHistoryTable extends TreeTable implements Handler { */ childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN).setValue(""); - childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST) - .setValue(action.getDistributionSet().getName() + ":" - + action.getDistributionSet().getVersion()); + childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DIST).setValue( + action.getDistributionSet().getName() + ":" + action.getDistributionSet().getVersion()); childItem.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_DATETIME) .setValue(SPDateTimeUtil.getFormattedDate(actionStatus.getCreatedAt())); @@ -637,14 +663,15 @@ public class ActionHistoryTable extends TreeTable implements Handler { private void setColumnExpantRatioOnTableMaximize() { /* set messages column can expand the rest of the available space */ - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.2f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, 0.1f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_MSGS, 0.35f); - setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.15f); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_STATUS, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DIST, 0.2F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_FORCED, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_ROLLOUT_NAME, 0.1F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_MSGS, 0.35F); + setColumnExpandRatio(SPUIDefinitions.ACTION_HIS_TBL_DATETIME, 0.15F); + setColumnExpandRatio(SPUIDefinitions.ACTIONS_COLUMN, 0.2F); } /** @@ -706,46 +733,6 @@ public class ActionHistoryTable extends TreeTable implements Handler { setColumnExpandRatioForMinimisedTable(); } - @Override - public void handleAction(final com.vaadin.event.Action action, final Object sender, final Object target) { - /* Get the actionId details of the cancel item or row */ - final Item item = hierarchicalContainer.getItem(target); - final Long actionId = (Long) item.getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTION_ID_HIDDEN).getValue(); - if (action.equals(actionCancel)) { - if (actionId != null) { - confirmAndCancelAction(actionId); - } - } else if (action.equals(actionForce)) { - confirmAndForceAction(actionId); - } else if (action.equals(actionForceQuit)) { - confirmAndForceQuitAction(actionId); - } - } - - @Override - public com.vaadin.event.Action[] getActions(final Object target, final Object sender) { - final List actions = Lists.newArrayList(); - if (target != null) { - /* Check if the row or item belongs to active action */ - final String activeValue = (String) hierarchicalContainer.getItem(target) - .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_ACTIVE_HIDDEN).getValue(); - if (SPUIDefinitions.ACTIVE.equals(activeValue)) { - final Action actionWithActiveStatus = (Action) hierarchicalContainer.getItem(target) - .getItemProperty(SPUIDefinitions.ACTION_HIS_TBL_FORCED).getValue(); - if (!actionWithActiveStatus.isForce()) { - actions.add(actionForce); - } - if (!actionWithActiveStatus.isCancelingOrCanceled()) { - actions.add(actionCancel); - } else { - actions.add(actionForceQuit); - } - - } - } - return actions.toArray(new com.vaadin.event.Action[actions.size()]); - } - /** * Show confirmation window and if ok then only, force the action. * @@ -756,21 +743,15 @@ public class ActionHistoryTable extends TreeTable implements Handler { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.force.action.confirmbox"), i18n.get("message.force.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { - if (ok) { - /* cancel the action */ - deploymentManagement.forceTargetAction(actionId); - - /* - * Refresh the action history table to show latest - * change of the action cancellation and update the - * Target Details - */ - - populateAndupdateTargetDetails(target); - notification.displaySuccess(i18n.get("message.force.action.success")); + if (!ok) { + return; } + deploymentManagement.forceTargetAction(actionId); + populateAndupdateTargetDetails(target); + notification.displaySuccess(i18n.get("message.force.action.success")); }); UI.getCurrent().addWindow(confirmDialog.getWindow()); + confirmDialog.getWindow().bringToFront(); } @@ -778,22 +759,19 @@ public class ActionHistoryTable extends TreeTable implements Handler { /* Display the confirmation */ final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.forcequit.action.confirmbox"), i18n.get("message.forcequit.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { - if (ok) { - final boolean cancelResult = forceQuitActiveAction(actionId); - if (cancelResult) { - /* - * Refresh the action history table to show latest - * change of the action cancellation and update the - * Target Details - */ - populateAndupdateTargetDetails(target); - notification.displaySuccess(i18n.get("message.forcequit.action.success")); - } else { - notification.displayValidationError(i18n.get("message.forcequit.action.failed")); - } + if (!ok) { + return; } - } , FontAwesome.WARNING); + final boolean cancelResult = forceQuitActiveAction(actionId); + if (cancelResult) { + populateAndupdateTargetDetails(target); + notification.displaySuccess(i18n.get("message.forcequit.action.success")); + } else { + notification.displayValidationError(i18n.get("message.forcequit.action.failed")); + } + }, FontAwesome.WARNING); UI.getCurrent().addWindow(confirmDialog.getWindow()); + confirmDialog.getWindow().bringToFront(); } @@ -804,21 +782,21 @@ public class ActionHistoryTable extends TreeTable implements Handler { * as Id if the action needs to be cancelled. */ private void confirmAndCancelAction(final Long actionId) { + if (actionId == null) { + return; + } + final ConfirmationDialog confirmDialog = new ConfirmationDialog(i18n.get("caption.cancel.action.confirmbox"), i18n.get("message.cancel.action.confirm"), i18n.get(BUTTON_OK), i18n.get(BUTTON_CANCEL), ok -> { - if (ok) { - final boolean cancelResult = cancelActiveAction(actionId); - if (cancelResult) { - /* - * Refresh the action history table to show latest - * change of the action cancellation and update the - * Target Details - */ - populateAndupdateTargetDetails(target); - notification.displaySuccess(i18n.get("message.cancel.action.success")); - } else { - notification.displayValidationError(i18n.get("message.cancel.action.failed")); - } + if (!ok) { + return; + } + final boolean cancelResult = cancelActiveAction(actionId); + if (cancelResult) { + populateAndupdateTargetDetails(target); + notification.displaySuccess(i18n.get("message.cancel.action.success")); + } else { + notification.displayValidationError(i18n.get("message.cancel.action.failed")); } }); UI.getCurrent().addWindow(confirmDialog.getWindow()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index b8b3c5394..5859c2431 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -14,6 +14,7 @@ import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_CLOSE_TAG; import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.HTML_UL_OPEN_TAG; import java.util.ArrayList; +import java.util.Arrays; import java.util.EnumMap; import java.util.HashMap; import java.util.List; @@ -74,11 +75,9 @@ public class RolloutListGrid extends AbstractGrid { private static final String UPDATE_OPTION = "Update"; - private static final String RESUME_OPTION = "Resume"; - private static final String PAUSE_OPTION = "Pause"; - private static final String START_OPTION = "Start"; + private static final String RUN_OPTION = "Run"; private static final String DS_TYPE = "type"; @@ -193,14 +192,11 @@ public class RolloutListGrid extends AbstractGrid { rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, TotalTargetCountStatus.class, null, false, false); - rolloutGridContainer.addContainerProperty(START_OPTION, String.class, FontAwesome.PLAY.getHtml(), false, false); + rolloutGridContainer.addContainerProperty(RUN_OPTION, String.class, FontAwesome.PLAY.getHtml(), false, false); rolloutGridContainer.addContainerProperty(PAUSE_OPTION, String.class, FontAwesome.PAUSE.getHtml(), false, false); - rolloutGridContainer.addContainerProperty(RESUME_OPTION, String.class, FontAwesome.FORWARD.getHtml(), false, - false); - if (permissionChecker.hasRolloutUpdatePermission()) { rolloutGridContainer.addContainerProperty(UPDATE_OPTION, String.class, FontAwesome.EDIT.getHtml(), false, false); @@ -225,18 +221,15 @@ public class RolloutListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMinimumWidth(40); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMaximumWidth(100); - getColumn(START_OPTION).setMinimumWidth(35); - getColumn(START_OPTION).setMaximumWidth(35); + getColumn(RUN_OPTION).setMinimumWidth(25); + getColumn(RUN_OPTION).setMaximumWidth(25); - getColumn(PAUSE_OPTION).setMinimumWidth(35); - getColumn(PAUSE_OPTION).setMaximumWidth(35); - - getColumn(RESUME_OPTION).setMinimumWidth(35); - getColumn(RESUME_OPTION).setMaximumWidth(35); + getColumn(PAUSE_OPTION).setMinimumWidth(25); + getColumn(PAUSE_OPTION).setMaximumWidth(25); if (permissionChecker.hasRolloutUpdatePermission()) { - getColumn(UPDATE_OPTION).setMinimumWidth(35); - getColumn(UPDATE_OPTION).setMaximumWidth(35); + getColumn(UPDATE_OPTION).setMinimumWidth(25); + getColumn(UPDATE_OPTION).setMaximumWidth(25); } getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); @@ -262,16 +255,16 @@ public class RolloutListGrid extends AbstractGrid { .setHeaderCaption(i18n.get("header.detail.status")); getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); - getColumn(START_OPTION).setHeaderCaption(i18n.get("header.action.start")); + getColumn(RUN_OPTION).setHeaderCaption(i18n.get("header.action.run")); getColumn(PAUSE_OPTION).setHeaderCaption(i18n.get("header.action.pause")); - getColumn(RESUME_OPTION).setHeaderCaption(i18n.get("header.action.resume")); if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(UPDATE_OPTION).setHeaderCaption(i18n.get("header.action.update")); } - getDefaultHeaderRow().join(START_OPTION, PAUSE_OPTION, RESUME_OPTION, UPDATE_OPTION) - .setText(i18n.get("header.action")); + final HeaderCell join = getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION, UPDATE_OPTION); + join.setText(i18n.get("header.action")); + join.getComponent().addStyleName("centeralign"); } @Override @@ -292,9 +285,8 @@ public class RolloutListGrid extends AbstractGrid { columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); - columnList.add(START_OPTION); + columnList.add(RUN_OPTION); columnList.add(PAUSE_OPTION); - columnList.add(RESUME_OPTION); if (permissionChecker.hasRolloutUpdatePermission()) { columnList.add(UPDATE_OPTION); @@ -346,15 +338,12 @@ public class RolloutListGrid extends AbstractGrid { customObjectRenderer.addClickListener(this::onClickOfRolloutName); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); - getColumn(START_OPTION) - .setRenderer(new HtmlButtonRenderer(clickEvent -> startRolloutAsync((Long) clickEvent.getItemId()))); + getColumn(RUN_OPTION) + .setRenderer(new HtmlButtonRenderer(clickEvent -> startOrResumeRollout((Long) clickEvent.getItemId()))); getColumn(PAUSE_OPTION) .setRenderer(new HtmlButtonRenderer(clickEvent -> pauseRollout((Long) clickEvent.getItemId()))); - getColumn(RESUME_OPTION) - .setRenderer(new HtmlButtonRenderer(clickEvent -> resumeRollout((Long) clickEvent.getItemId()))); - if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(UPDATE_OPTION) .setRenderer(new HtmlButtonRenderer(clickEvent -> updateRollout((Long) clickEvent.getItemId()))); @@ -411,35 +400,24 @@ public class RolloutListGrid extends AbstractGrid { uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); } - private void resumeRollout(final Long rolloutId) { + private void startOrResumeRollout(final Long rolloutId) { final Item row = getContainerDataSource().getItem(rolloutId); final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) .getValue(); + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - if (!RolloutStatus.PAUSED.equals(rolloutStatus)) { + if (RolloutStatus.READY.equals(rolloutStatus)) { + rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); + uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); return; } - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - - rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(rolloutId)); - uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); - } - - private void startRolloutAsync(final Long rolloutId) { - final Item row = getContainerDataSource().getItem(rolloutId); - - final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) - .getValue(); - - if (!RolloutStatus.READY.equals(rolloutStatus)) { + if (RolloutStatus.PAUSED.equals(rolloutStatus)) { + rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(rolloutId)); + uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); return; } - - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); - uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); } private void updateRollout(final Long rolloutId) { @@ -518,9 +496,8 @@ public class RolloutListGrid extends AbstractGrid { private final Container.Indexed containerDataSource; static { - EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(START_OPTION, RolloutStatus.READY); + EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(RUN_OPTION, RolloutStatus.READY); EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(PAUSE_OPTION, RolloutStatus.RUNNING); - EXPECTED_ROLLOUT_STATUS_ENABLE_BUTTON.put(RESUME_OPTION, RolloutStatus.PAUSED); } /** @@ -548,9 +525,21 @@ public class RolloutListGrid extends AbstractGrid { return null; } + if (RUN_OPTION.equals(cellReference.getPropertyId())) { + return getStatus(cellReference, RolloutStatus.READY, RolloutStatus.PAUSED); + } + + if (PAUSE_OPTION.equals(cellReference.getPropertyId())) { + return getStatus(cellReference, RolloutStatus.RUNNING); + } + + return null; + } + + private String getStatus(final CellReference cellReference, final RolloutStatus... expectedRolloutStatus) { final RolloutStatus currentRolloutStatus = getRolloutStatus(cellReference.getItemId()); - if (expectedRolloutStatus.equals(currentRolloutStatus)) { + if (Arrays.asList(expectedRolloutStatus).contains(currentRolloutStatus)) { return null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java index 92a51d5c4..3a74f2781 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponentIdProvider.java @@ -289,6 +289,21 @@ public final class SPUIComponentIdProvider { */ public static final String ACTION_HISTORY_TABLE_ID = "action.history.tableId"; + /** + * Action history table cancel Id. + */ + public static final String ACTION_HISTORY_TABLE_CANCEL_ID = "action.history.table.action.cancel"; + + /** + * Action history table force Id. + */ + public static final String ACTION_HISTORY_TABLE_FORCE_ID = "action.history.table.action.force"; + + /** + * Action history table force quit Id. + */ + public static final String ACTION_HISTORY_TABLE_FORCE_QUIT_ID = "action.history.table.action.force.quit"; + /** * Target filter wrapper id. */ @@ -826,7 +841,7 @@ public final class SPUIComponentIdProvider { /** * Rollout start button id. */ - public static final String ROLLOUT_START_BUTTON_ID = ROLLOUT_ACTION_ID + ".9"; + public static final String ROLLOUT_RUN_BUTTON_ID = ROLLOUT_ACTION_ID + ".9"; /** * Rollout pause button id. @@ -836,12 +851,7 @@ public final class SPUIComponentIdProvider { /** * Rollout resume button id. */ - public static final String ROLLOUT_RESUME_BUTTON_ID = ROLLOUT_ACTION_ID + ".11"; - - /** - * Rollout resume button id. - */ - public static final String ROLLOUT_UPDATE_BUTTON_ID = ROLLOUT_ACTION_ID + ".12"; + public static final String ROLLOUT_UPDATE_BUTTON_ID = ROLLOUT_ACTION_ID + ".11"; /** * Rollout save or start option group id. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java index 1a6e8c163..d31bf91a2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIDefinitions.java @@ -87,6 +87,11 @@ public final class SPUIDefinitions { */ public static final String ACTION_HIS_TBL_STATUS = "Status"; + /** + * Actions column + */ + public static final String ACTIONS_COLUMN = "Actions"; + /** * Action history messages of particular action update. */ diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index 9a7133e35..1306e5c67 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -440,9 +440,8 @@ header.detail.status = Detail status header.total.targets = Total targets header.action=Actions -header.action.start=Start +header.action.run=Run header.action.pause=Pause -header.action.resume=Resume header.action.update=Edit distribution.details.header = Distribution set diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index 09f2b11c4..0ca4c811a 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -431,9 +431,8 @@ header.swmodules = SwModules header.migrations.step=IsRequiredMigrationStep header.action=Actions -header.action.start=Start +header.action.run=Run header.action.pause=Pause -header.action.resume=Resume header.action.update=Edit header.rolloutgroup.installed.percentage = % Finished diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 311d3175a..5369b7460 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -421,9 +421,8 @@ header.detail.status = Detail status header.total.targets = Total targets header.action=Actions -header.action.start=Start +header.action.run=Run header.action.pause=Pause -header.action.resume=Resume header.action.update=Edit header.rolloutgroup.installed.percentage = % Finished