Refactor Rollout Overview and Action History (#569)

* Rollout actions has tooltip with information about action

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Fix code smells

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Remove columnOrder and use setColumns. Remove duplicate column "Name"

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* PR review

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* Use Status not the whole Rollout object for dis-/enable action buttons

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>

* PR review

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>
This commit is contained in:
Melanie Retter
2017-12-14 08:42:45 +01:00
committed by Kai Zimmermann
parent 4691340e6a
commit 5175fc9521
5 changed files with 218 additions and 254 deletions

View File

@@ -59,8 +59,8 @@ public class ActionHistoryGrid extends AbstractGrid<LazyQueryContainer> {
private static final Logger LOG = LoggerFactory.getLogger(ActionHistoryGrid.class); private static final Logger LOG = LoggerFactory.getLogger(ActionHistoryGrid.class);
private static final String BUTTON_CANCEL = "button.cancel"; private static final String BUTTON_CANCEL = "button.cancel";
private static final String BUTTON_OK = "button.ok"; private static final String BUTTON_OK = "button.ok";
private static final double FIXED_PIX_MIN = 29F; private static final double FIXED_PIX_MIN = 25;
private static final double FIXED_PIX_MAX = 32F; private static final double FIXED_PIX_MAX = 32;
private static final String STATUS_ICON_GREEN = "statusIconGreen"; private static final String STATUS_ICON_GREEN = "statusIconGreen";
private static final String STATUS_ICON_RED = "statusIconRed"; private static final String STATUS_ICON_RED = "statusIconRed";
@@ -72,7 +72,7 @@ public class ActionHistoryGrid extends AbstractGrid<LazyQueryContainer> {
private static final String VIRT_PROP_FORCED = "forced"; private static final String VIRT_PROP_FORCED = "forced";
private static final String VIRT_PROP_TIMEFORCED = "timeForced"; private static final String VIRT_PROP_TIMEFORCED = "timeForced";
private static final String VIRT_PROP_ACTION_CANCEL = "cancel-aciton"; private static final String VIRT_PROP_ACTION_CANCEL = "cancel-action";
private static final String VIRT_PROP_ACTION_FORCE = "force-action"; private static final String VIRT_PROP_ACTION_FORCE = "force-action";
private static final String VIRT_PROP_ACTION_FORCE_QUIT = "force-quit-action"; private static final String VIRT_PROP_ACTION_FORCE_QUIT = "force-quit-action";
@@ -208,7 +208,6 @@ public class ActionHistoryGrid extends AbstractGrid<LazyQueryContainer> {
rawCont.addContainerProperty(ProxyAction.PXY_ACTION_ID, Long.class, null, true, true); rawCont.addContainerProperty(ProxyAction.PXY_ACTION_ID, Long.class, null, true, true);
rawCont.addContainerProperty(ProxyAction.PXY_ACTION_ROLLOUT_NAME, String.class, null, true, true); rawCont.addContainerProperty(ProxyAction.PXY_ACTION_ROLLOUT_NAME, String.class, null, true, true);
} }
@Override @Override
@@ -392,7 +391,7 @@ public class ActionHistoryGrid extends AbstractGrid<LazyQueryContainer> {
* Pinning. * Pinning.
*/ */
private void updateDistributionTableStyle() { private void updateDistributionTableStyle() {
managementUIState.getDistributionTableFilters().getPinnedTarget().ifPresent((pinnedTarget) -> { managementUIState.getDistributionTableFilters().getPinnedTarget().ifPresent(pinnedTarget -> {
if (pinnedTarget.getTargetId().equals(selectedTarget.getId())) { if (pinnedTarget.getTargetId().equals(selectedTarget.getId())) {
eventBus.publish(this, PinUnpinEvent.PIN_TARGET); eventBus.publish(this, PinUnpinEvent.PIN_TARGET);
} }
@@ -633,20 +632,6 @@ public class ActionHistoryGrid extends AbstractGrid<LazyQueryContainer> {
} }
} }
/**
* Concrete html-label converter that handles Booleans. The converter needs
* an appropriate adapter that must be set via
* {@link AbstractHtmlLabelConverter#addAdapter()} to do the work.
*/
class HtmlBooleanLabelConverter extends AbstractHtmlLabelConverter<Boolean> {
private static final long serialVersionUID = 1L;
@Override
public Class<Boolean> getModelType() {
return Boolean.class;
}
}
/** /**
* Concrete html-label converter that handles Actions. * Concrete html-label converter that handles Actions.
*/ */
@@ -709,30 +694,6 @@ public class ActionHistoryGrid extends AbstractGrid<LazyQueryContainer> {
} }
} }
/**
* Generator class responsible to generate a button property value for the
* grid.
*/
class ButtonPropertyValueGenerator extends PropertyValueGenerator<String> {
private static final long serialVersionUID = 1L;
private final String buttonLabel;
public ButtonPropertyValueGenerator(final String buttonLabel) {
this.buttonLabel = buttonLabel;
}
@Override
public String getValue(final Item item, final Object itemId, final Object propertyId) {
return buttonLabel;
}
@Override
public Class<String> getType() {
return String.class;
}
}
/** /**
* Configuration that holds the styling properties for label- and * Configuration that holds the styling properties for label- and
* button-renderers that are included in grid-cells. * button-renderers that are included in grid-cells.

View File

@@ -10,13 +10,13 @@ package org.eclipse.hawkbit.ui.rollout.rollout;
import static org.eclipse.hawkbit.ui.rollout.DistributionBarHelper.getTooltip; import static org.eclipse.hawkbit.ui.rollout.DistributionBarHelper.getTooltip;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.QuotaManagement; import org.eclipse.hawkbit.repository.QuotaManagement;
@@ -34,7 +34,8 @@ import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
import org.eclipse.hawkbit.ui.common.ConfirmationDialog; import org.eclipse.hawkbit.ui.common.ConfirmationDialog;
import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid;
import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData;
import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.AbstractGridButtonConverter;
import org.eclipse.hawkbit.ui.customrenderers.renderers.GridButtonRenderer;
import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer;
import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.RolloutRenderer;
import org.eclipse.hawkbit.ui.push.RolloutChangeEventContainer; import org.eclipse.hawkbit.ui.push.RolloutChangeEventContainer;
@@ -58,8 +59,9 @@ import org.vaadin.spring.events.EventBus.UIEventBus;
import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.EventScope;
import org.vaadin.spring.events.annotation.EventBusListenerMethod; import org.vaadin.spring.events.annotation.EventBusListenerMethod;
import com.vaadin.data.Container;
import com.vaadin.data.Item; import com.vaadin.data.Item;
import com.vaadin.data.util.GeneratedPropertyContainer;
import com.vaadin.data.util.PropertyValueGenerator;
import com.vaadin.data.util.converter.Converter; import com.vaadin.data.util.converter.Converter;
import com.vaadin.server.FontAwesome; import com.vaadin.server.FontAwesome;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
@@ -73,19 +75,16 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static final String UPDATE_OPTION = "Update";
private static final String COPY_OPTION = "Copy";
private static final String PAUSE_OPTION = "Pause";
private static final String RUN_OPTION = "Run";
private static final String DELETE_OPTION = "Delete";
private static final String ROLLOUT_RENDERER_DATA = "rolloutRendererData"; private static final String ROLLOUT_RENDERER_DATA = "rolloutRendererData";
private static final String VIRT_PROP_RUN = "run";
private static final String VIRT_PROP_PAUSE = "pause";
private static final String VIRT_PROP_UPDATE = "update";
private static final String VIRT_PROP_COPY = "copy";
private static final String VIRT_PROP_DELETE = "delete";
private final transient RolloutManagement rolloutManagement; private final transient RolloutManagement rolloutManagement;
private final transient RolloutGroupManagement rolloutGroupManagement; private final transient RolloutGroupManagement rolloutGroupManagement;
private final AddUpdateRolloutWindowLayout addUpdateRolloutWindow; private final AddUpdateRolloutWindowLayout addUpdateRolloutWindow;
@@ -94,8 +93,25 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
private final RolloutUIState rolloutUIState; private final RolloutUIState rolloutUIState;
private static final List<RolloutStatus> DELETE_COPY_BUTTON_ENABLED = Arrays.asList(RolloutStatus.CREATING,
RolloutStatus.ERROR_CREATING, RolloutStatus.ERROR_STARTING, RolloutStatus.PAUSED, RolloutStatus.READY,
RolloutStatus.RUNNING, RolloutStatus.STARTING, RolloutStatus.STOPPED, RolloutStatus.FINISHED);
private static final List<RolloutStatus> UPDATE_BUTTON_ENABLED = Arrays.asList(RolloutStatus.CREATING,
RolloutStatus.ERROR_CREATING, RolloutStatus.ERROR_STARTING, RolloutStatus.PAUSED, RolloutStatus.READY,
RolloutStatus.RUNNING, RolloutStatus.STARTING, RolloutStatus.STOPPED);
private static final List<RolloutStatus> PAUSE_BUTTON_ENABLED = Arrays.asList(RolloutStatus.RUNNING);
private static final List<RolloutStatus> RUN_BUTTON_ENABLED = Arrays.asList(RolloutStatus.READY,
RolloutStatus.PAUSED);
private static final Map<RolloutStatus, StatusFontIcon> statusIconMap = new EnumMap<>(RolloutStatus.class); private static final Map<RolloutStatus, StatusFontIcon> statusIconMap = new EnumMap<>(RolloutStatus.class);
private static final List<Object> HIDDEN_COLUMNS = Arrays.asList(SPUILabelDefinitions.VAR_CREATED_DATE,
SPUILabelDefinitions.VAR_CREATED_USER, SPUILabelDefinitions.VAR_MODIFIED_DATE,
SPUILabelDefinitions.VAR_MODIFIED_BY, SPUILabelDefinitions.VAR_DESC);
static { static {
statusIconMap.put(RolloutStatus.FINISHED, statusIconMap.put(RolloutStatus.FINISHED,
new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN)); new StatusFontIcon(FontAwesome.CHECK_CIRCLE, SPUIStyleDefinitions.STATUS_ICON_GREEN));
@@ -115,11 +131,6 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
statusIconMap.put(RolloutStatus.DELETING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_RED)); statusIconMap.put(RolloutStatus.DELETING, new StatusFontIcon(null, SPUIStyleDefinitions.STATUS_SPINNER_RED));
} }
private static final List<Object> HIDDEN_COLUMNS = Arrays.asList(SPUILabelDefinitions.VAR_NAME,
SPUILabelDefinitions.VAR_CREATED_DATE, SPUILabelDefinitions.VAR_CREATED_USER,
SPUILabelDefinitions.VAR_MODIFIED_DATE, SPUILabelDefinitions.VAR_MODIFIED_BY,
SPUILabelDefinitions.VAR_DESC);
RolloutListGrid(final VaadinMessageSource i18n, final UIEventBus eventBus, RolloutListGrid(final VaadinMessageSource i18n, final UIEventBus eventBus,
final RolloutManagement rolloutManagement, final UINotification uiNotification, final RolloutManagement rolloutManagement, final UINotification uiNotification,
final RolloutUIState rolloutUIState, final SpPermissionChecker permissionChecker, final RolloutUIState rolloutUIState, final SpPermissionChecker permissionChecker,
@@ -135,7 +146,9 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
this.uiNotification = uiNotification; this.uiNotification = uiNotification;
this.rolloutUIState = rolloutUIState; this.rolloutUIState = rolloutUIState;
setGeneratedPropertySupport(new RolloutGeneratedPropertySupport());
init(); init();
hideColumnsDueToInsufficientPermissions();
} }
/** /**
@@ -188,13 +201,13 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
if (!rollout.isPresent()) { if (!rollout.isPresent()) {
return; return;
} }
final GeneratedPropertyContainer rolloutContainer = (GeneratedPropertyContainer) getContainerDataSource();
final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource();
final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId());
if (item == null) { if (item == null) {
refreshContainer(); refreshContainer();
return; return;
} }
updateItem(rollout.get(), item); updateItem(rollout.get(), item);
} }
@@ -228,8 +241,8 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
@Override @Override
protected void addContainerProperties() { protected void addContainerProperties() {
final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); final LazyQueryContainer rolloutGridContainer = getGeneratedPropertySupport().getRawContainer();
rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false);
rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false); rolloutGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, false);
rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false);
rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false,
@@ -252,19 +265,7 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS,
TotalTargetCountStatus.class, null, false, false); TotalTargetCountStatus.class, null, false, false);
rolloutGridContainer.addContainerProperty(RUN_OPTION, String.class, FontAwesome.PLAY.getHtml(), false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, true,
rolloutGridContainer.addContainerProperty(PAUSE_OPTION, String.class, FontAwesome.PAUSE.getHtml(), false,
false);
if (permissionChecker.hasRolloutUpdatePermission()) {
rolloutGridContainer.addContainerProperty(UPDATE_OPTION, String.class, FontAwesome.EDIT.getHtml(), false,
false);
}
if (permissionChecker.hasRolloutCreatePermission()) {
rolloutGridContainer.addContainerProperty(COPY_OPTION, String.class, FontAwesome.COPY.getHtml(), false,
false);
}
rolloutGridContainer.addContainerProperty(DELETE_OPTION, String.class, FontAwesome.TRASH_O.getHtml(), false,
false); false);
} }
@@ -286,24 +287,20 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMinimumWidth(40); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMinimumWidth(40);
getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMaximumWidth(60); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMaximumWidth(60);
getColumn(RUN_OPTION).setMinimumWidth(25); getColumn(VIRT_PROP_RUN).setMinimumWidth(25);
getColumn(RUN_OPTION).setMaximumWidth(25); getColumn(VIRT_PROP_RUN).setMaximumWidth(25);
getColumn(PAUSE_OPTION).setMinimumWidth(25); getColumn(VIRT_PROP_PAUSE).setMinimumWidth(25);
getColumn(PAUSE_OPTION).setMaximumWidth(25); getColumn(VIRT_PROP_PAUSE).setMaximumWidth(25);
if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(VIRT_PROP_UPDATE).setMinimumWidth(25);
getColumn(UPDATE_OPTION).setMinimumWidth(25); getColumn(VIRT_PROP_UPDATE).setMaximumWidth(25);
getColumn(UPDATE_OPTION).setMaximumWidth(25);
}
if (permissionChecker.hasRolloutCreatePermission()) { getColumn(VIRT_PROP_COPY).setMinimumWidth(25);
getColumn(COPY_OPTION).setMinimumWidth(25); getColumn(VIRT_PROP_COPY).setMaximumWidth(25);
getColumn(COPY_OPTION).setMaximumWidth(25);
}
getColumn(DELETE_OPTION).setMinimumWidth(25); getColumn(VIRT_PROP_DELETE).setMinimumWidth(25);
getColumn(DELETE_OPTION).setMaximumWidth(40); getColumn(VIRT_PROP_DELETE).setMaximumWidth(40);
getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280);
} }
@@ -324,33 +321,19 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
.setHeaderCaption(i18n.getMessage("header.detail.status")); .setHeaderCaption(i18n.getMessage("header.detail.status"));
getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.getMessage("header.status")); getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.getMessage("header.status"));
getColumn(RUN_OPTION).setHeaderCaption(i18n.getMessage("header.action.run")); getColumn(VIRT_PROP_RUN).setHeaderCaption(i18n.getMessage("header.action.run"));
getColumn(PAUSE_OPTION).setHeaderCaption(i18n.getMessage("header.action.pause")); getColumn(VIRT_PROP_PAUSE).setHeaderCaption(i18n.getMessage("header.action.pause"));
getColumn(VIRT_PROP_UPDATE).setHeaderCaption(i18n.getMessage("header.action.update"));
if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(VIRT_PROP_COPY).setHeaderCaption(i18n.getMessage("header.action.copy"));
getColumn(UPDATE_OPTION).setHeaderCaption(i18n.getMessage("header.action.update")); getColumn(VIRT_PROP_DELETE).setHeaderCaption(i18n.getMessage("header.action.delete"));
}
if (permissionChecker.hasRolloutCreatePermission()) {
getColumn(COPY_OPTION).setHeaderCaption(i18n.getMessage("header.action.copy"));
}
getColumn(DELETE_OPTION).setHeaderCaption(i18n.getMessage("header.action.delete"));
joinColumns().setText(i18n.getMessage("header.action")); joinColumns().setText(i18n.getMessage("header.action"));
} }
private HeaderCell joinColumns() { private HeaderCell joinColumns() {
if (permissionChecker.hasRolloutUpdatePermission() && permissionChecker.hasRolloutCreatePermission()) {
return getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION, UPDATE_OPTION, COPY_OPTION, DELETE_OPTION); return getDefaultHeaderRow().join(VIRT_PROP_RUN, VIRT_PROP_PAUSE, VIRT_PROP_UPDATE, VIRT_PROP_COPY,
} VIRT_PROP_DELETE);
if (permissionChecker.hasRolloutUpdatePermission()) {
return getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION, UPDATE_OPTION, DELETE_OPTION);
}
if (permissionChecker.hasRolloutCreatePermission()) {
return getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION, COPY_OPTION, DELETE_OPTION);
}
return getDefaultHeaderRow().join(RUN_OPTION, PAUSE_OPTION);
} }
@Override @Override
@@ -360,32 +343,16 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
@Override @Override
protected void setColumnProperties() { protected void setColumnProperties() {
final List<Object> columnList = new ArrayList<>();
columnList.add(ROLLOUT_RENDERER_DATA);
columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION);
columnList.add(SPUILabelDefinitions.VAR_STATUS);
columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS);
columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS);
columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS);
columnList.add(RUN_OPTION); final List<String> columnsToShowInOrder = Arrays.asList(ROLLOUT_RENDERER_DATA,
columnList.add(PAUSE_OPTION); SPUILabelDefinitions.VAR_DIST_NAME_VERSION, SPUILabelDefinitions.VAR_STATUS,
SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS,
SPUILabelDefinitions.VAR_TOTAL_TARGETS, VIRT_PROP_RUN, VIRT_PROP_PAUSE, VIRT_PROP_UPDATE,
VIRT_PROP_COPY, VIRT_PROP_DELETE, SPUILabelDefinitions.VAR_CREATED_DATE,
SPUILabelDefinitions.VAR_CREATED_USER, SPUILabelDefinitions.VAR_MODIFIED_DATE,
SPUILabelDefinitions.VAR_MODIFIED_BY, SPUILabelDefinitions.VAR_DESC);
if (permissionChecker.hasRolloutUpdatePermission()) { setColumns(columnsToShowInOrder.toArray());
columnList.add(UPDATE_OPTION);
}
if (permissionChecker.hasRolloutCreatePermission()) {
columnList.add(COPY_OPTION);
}
columnList.add(DELETE_OPTION);
columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE);
columnList.add(SPUILabelDefinitions.VAR_CREATED_USER);
columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE);
columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY);
columnList.add(SPUILabelDefinitions.VAR_DESC);
setColumnOrder(columnList.toArray());
alignColumns();
} }
@Override @Override
@@ -393,6 +360,12 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
for (final Object propertyId : HIDDEN_COLUMNS) { for (final Object propertyId : HIDDEN_COLUMNS) {
getColumn(propertyId).setHidden(true); getColumn(propertyId).setHidden(true);
} }
getColumn(VIRT_PROP_RUN).setHidable(false);
getColumn(VIRT_PROP_PAUSE).setHidable(false);
getColumn(VIRT_PROP_DELETE).setHidable(false);
getColumn(VIRT_PROP_UPDATE).setHidable(false);
getColumn(VIRT_PROP_COPY).setHidable(false);
} }
@Override @Override
@@ -413,28 +386,92 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
customObjectRenderer.addClickListener(this::onClickOfRolloutName); customObjectRenderer.addClickListener(this::onClickOfRolloutName);
getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer);
getColumn(RUN_OPTION) getColumn(VIRT_PROP_RUN).setRenderer(
.setRenderer(new HtmlButtonRenderer(clickEvent -> startOrResumeRollout((Long) clickEvent.getItemId()))); new GridButtonRenderer(clickEvent -> startOrResumeRollout((Long) clickEvent.getItemId())),
new RolloutGridButtonConverter(this::createRunButtonMetadata));
getColumn(PAUSE_OPTION) getColumn(VIRT_PROP_PAUSE).setRenderer(
.setRenderer(new HtmlButtonRenderer(clickEvent -> pauseRollout((Long) clickEvent.getItemId()))); new GridButtonRenderer(clickEvent -> pauseRollout((Long) clickEvent.getItemId())),
new RolloutGridButtonConverter(this::createPauseButtonMetadata));
if (permissionChecker.hasRolloutUpdatePermission()) { getColumn(VIRT_PROP_UPDATE).setRenderer(
getColumn(UPDATE_OPTION) new GridButtonRenderer(clickEvent -> updateRollout((Long) clickEvent.getItemId())),
.setRenderer(new HtmlButtonRenderer(clickEvent -> updateRollout((Long) clickEvent.getItemId()))); new RolloutGridButtonConverter(this::createUpdateButtonMetadata));
} getColumn(VIRT_PROP_COPY).setRenderer(
if (permissionChecker.hasRolloutCreatePermission()) { new GridButtonRenderer(clickEvent -> copyRollout((Long) clickEvent.getItemId())),
getColumn(COPY_OPTION) new RolloutGridButtonConverter(this::createCopyButtonMetadata));
.setRenderer(new HtmlButtonRenderer(clickEvent -> copyRollout((Long) clickEvent.getItemId()))); getColumn(VIRT_PROP_DELETE).setRenderer(
} new GridButtonRenderer(clickEvent -> deleteRollout((Long) clickEvent.getItemId())),
new RolloutGridButtonConverter(this::createDeleteButtonMetadata));
getColumn(DELETE_OPTION)
.setRenderer(new HtmlButtonRenderer(clickEvent -> deleteRollout((Long) clickEvent.getItemId())));
} }
private void alignColumns() { /**
setCellStyleGenerator(new RollouStatusCellStyleGenerator(getContainerDataSource())); * Generator class responsible to retrieve a Rollout from the grid data in
* order to generate a virtual property.
*/
class GenericPropertyValueGenerator extends PropertyValueGenerator<RolloutStatus> {
private static final long serialVersionUID = 1L;
@Override
public RolloutStatus getValue(final Item item, final Object itemId, final Object propertyId) {
return (RolloutStatus) item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue();
}
@Override
public Class<RolloutStatus> getType() {
return RolloutStatus.class;
}
}
/**
* Adds support for virtual properties (aka generated properties)
*/
class RolloutGeneratedPropertySupport extends AbstractGeneratedPropertySupport {
@Override
public GeneratedPropertyContainer getDecoratedContainer() {
return (GeneratedPropertyContainer) getContainerDataSource();
}
@Override
public LazyQueryContainer getRawContainer() {
return (LazyQueryContainer) (getDecoratedContainer()).getWrappedContainer();
}
@Override
protected GeneratedPropertyContainer addGeneratedContainerProperties() {
final GeneratedPropertyContainer decoratedContainer = getDecoratedContainer();
decoratedContainer.addGeneratedProperty(VIRT_PROP_RUN, new GenericPropertyValueGenerator());
decoratedContainer.addGeneratedProperty(VIRT_PROP_PAUSE, new GenericPropertyValueGenerator());
decoratedContainer.addGeneratedProperty(VIRT_PROP_UPDATE, new GenericPropertyValueGenerator());
decoratedContainer.addGeneratedProperty(VIRT_PROP_COPY, new GenericPropertyValueGenerator());
decoratedContainer.addGeneratedProperty(VIRT_PROP_DELETE, new GenericPropertyValueGenerator());
return decoratedContainer;
}
}
/**
* Concrete grid-button converter that handles Rollouts Status.
*/
class RolloutGridButtonConverter extends AbstractGridButtonConverter<RolloutStatus> {
private static final long serialVersionUID = 1L;
/**
* Constructor that sets the appropriate adapter.
*
* @param adapter
* adapts <code>RolloutStatus</code> to
* <code>StatusFontIcon</code>
*/
public RolloutGridButtonConverter(final GridButtonAdapter<RolloutStatus> adapter) {
addAdapter(adapter);
}
@Override
public Class<RolloutStatus> getModelType() {
return RolloutStatus.class;
}
} }
private void onClickOfRolloutName(final RendererClickEvent event) { private void onClickOfRolloutName(final RendererClickEvent event) {
@@ -554,79 +591,39 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
return description; return description;
} }
private static class RollouStatusCellStyleGenerator implements CellStyleGenerator { private static boolean hasToBeDisabled(final RolloutStatus currentRolloutStatus,
final List<RolloutStatus> expectedRolloutStatus) {
return !expectedRolloutStatus.contains(currentRolloutStatus);
}
private static final List<RolloutStatus> DELETE_COPY_BUTTON_ENABLED = Arrays.asList(RolloutStatus.CREATING, private StatusFontIcon createRunButtonMetadata(final RolloutStatus rolloutStatus) {
RolloutStatus.ERROR_CREATING, RolloutStatus.ERROR_STARTING, RolloutStatus.PAUSED, RolloutStatus.READY, final boolean isDisabled = hasToBeDisabled(rolloutStatus, RUN_BUTTON_ENABLED);
RolloutStatus.RUNNING, RolloutStatus.STARTING, RolloutStatus.STOPPED, RolloutStatus.FINISHED); return new StatusFontIcon(FontAwesome.PLAY, null, i18n.getMessage("tooltip.rollout.run"),
UIComponentIdProvider.ROLLOUT_RUN_BUTTON_ID, isDisabled);
}
private static final List<RolloutStatus> UPDATE_BUTTON_ENABLED = Arrays.asList(RolloutStatus.CREATING, private StatusFontIcon createPauseButtonMetadata(final RolloutStatus rolloutStatus) {
RolloutStatus.ERROR_CREATING, RolloutStatus.ERROR_STARTING, RolloutStatus.PAUSED, RolloutStatus.READY, final boolean isDisabled = hasToBeDisabled(rolloutStatus, PAUSE_BUTTON_ENABLED);
RolloutStatus.RUNNING, RolloutStatus.STARTING, RolloutStatus.STOPPED); return new StatusFontIcon(FontAwesome.PAUSE, null, i18n.getMessage("tooltip.rollout.pause"),
UIComponentIdProvider.ROLLOUT_PAUSE_BUTTON_ID, isDisabled);
}
private static final List<RolloutStatus> PAUSE_BUTTON_ENABLED = Arrays.asList(RolloutStatus.RUNNING); private StatusFontIcon createCopyButtonMetadata(final RolloutStatus rolloutStatus) {
final boolean isDisabled = hasToBeDisabled(rolloutStatus, DELETE_COPY_BUTTON_ENABLED);
return new StatusFontIcon(FontAwesome.COPY, null, i18n.getMessage("tooltip.rollout.copy"),
UIComponentIdProvider.ROLLOUT_COPY_BUTTON_ID, isDisabled);
}
private static final List<RolloutStatus> RUN_BUTTON_ENABLED = Arrays.asList(RolloutStatus.READY, private StatusFontIcon createUpdateButtonMetadata(final RolloutStatus rolloutStatus) {
RolloutStatus.PAUSED); final boolean isDisabled = hasToBeDisabled(rolloutStatus, UPDATE_BUTTON_ENABLED);
return new StatusFontIcon(FontAwesome.EDIT, null, i18n.getMessage("tooltip.rollout.update"),
UIComponentIdProvider.ROLLOUT_UPDATE_BUTTON_ID, isDisabled);
}
private static final long serialVersionUID = 1L; private StatusFontIcon createDeleteButtonMetadata(final RolloutStatus rolloutStatus) {
final boolean isDisabled = hasToBeDisabled(rolloutStatus, DELETE_COPY_BUTTON_ENABLED);
private final Container.Indexed containerDataSource; return new StatusFontIcon(FontAwesome.TRASH_O, null, i18n.getMessage("tooltip.rollout.delete"),
UIComponentIdProvider.ROLLOUT_DELETE_BUTTON_ID, isDisabled);
/**
* Constructor
*
* @param containerDataSource
* the container
*/
public RollouStatusCellStyleGenerator(final Container.Indexed containerDataSource) {
this.containerDataSource = containerDataSource;
}
@Override
public String getStyle(final CellReference cellReference) {
if (SPUILabelDefinitions.VAR_STATUS.equals(cellReference.getPropertyId())) {
return "centeralign";
}
return convertRolloutStatusToString(cellReference);
}
private String convertRolloutStatusToString(final CellReference cellReference) {
final String propertyId = (String) cellReference.getPropertyId();
if (RUN_OPTION.equals(propertyId)) {
return getStatus(cellReference, RUN_BUTTON_ENABLED);
}
if (PAUSE_OPTION.equals(propertyId)) {
return getStatus(cellReference, PAUSE_BUTTON_ENABLED);
}
if (UPDATE_OPTION.equals(propertyId)) {
return getStatus(cellReference, UPDATE_BUTTON_ENABLED);
}
if (DELETE_OPTION.equals(propertyId) || COPY_OPTION.equals(propertyId)) {
return getStatus(cellReference, DELETE_COPY_BUTTON_ENABLED);
}
return null;
}
private String getStatus(final CellReference cellReference, final List<RolloutStatus> expectedRolloutStatus) {
final RolloutStatus currentRolloutStatus = getRolloutStatus(cellReference.getItemId());
if (expectedRolloutStatus.contains(currentRolloutStatus)) {
return null;
}
return org.eclipse.hawkbit.ui.customrenderers.client.renderers.HtmlButtonRenderer.DISABLE_VALUE;
}
private RolloutStatus getRolloutStatus(final Object itemId) {
final Item row = containerDataSource.getItem(itemId);
return (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue();
}
} }
/** /**
@@ -636,7 +633,7 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
*/ */
class RolloutStatusConverter implements Converter<String, RolloutStatus> { class RolloutStatusConverter implements Converter<String, RolloutStatus> {
private static final long serialVersionUID = -1217685750825632678L; private static final long serialVersionUID = 1L;
@Override @Override
public RolloutStatus convertToModel(final String value, final Class<? extends RolloutStatus> targetType, public RolloutStatus convertToModel(final String value, final Class<? extends RolloutStatus> targetType,
@@ -737,4 +734,18 @@ public class RolloutListGrid extends AbstractGrid<LazyQueryContainer> {
} }
} }
private final void hideColumnsDueToInsufficientPermissions() {
final List<Object> modifiableColumnsList = getColumns().stream().map(Column::getPropertyId)
.collect(Collectors.toList());
if (!permissionChecker.hasRolloutUpdatePermission()) {
modifiableColumnsList.remove(VIRT_PROP_UPDATE);
}
if (!permissionChecker.hasRolloutCreatePermission()) {
modifiableColumnsList.remove(VIRT_PROP_COPY);
}
setColumns(modifiableColumnsList.toArray());
}
} }

View File

@@ -141,7 +141,6 @@ public class RolloutGroupListGrid extends AbstractGrid<LazyQueryContainer> {
@Override @Override
protected void addContainerProperties() { protected void addContainerProperties() {
final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource(); final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) getContainerDataSource();
rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false);
rolloutGroupGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false, rolloutGroupGridContainer.addContainerProperty(ROLLOUT_RENDERER_DATA, RolloutRendererData.class, null, false,
false); false);
@@ -221,20 +220,14 @@ public class RolloutGroupListGrid extends AbstractGrid<LazyQueryContainer> {
@Override @Override
protected void setColumnProperties() { protected void setColumnProperties() {
final List<Object> columnList = new ArrayList<>(); final Object[] columnsToShowInOrder = new Object[] { ROLLOUT_RENDERER_DATA, SPUILabelDefinitions.VAR_STATUS,
columnList.add(ROLLOUT_RENDERER_DATA); SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.VAR_TOTAL_TARGETS,
columnList.add(SPUILabelDefinitions.VAR_STATUS); SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE,
columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD,
columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); SPUILabelDefinitions.VAR_CREATED_DATE, SPUILabelDefinitions.VAR_CREATED_USER,
columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE); SPUILabelDefinitions.VAR_MODIFIED_DATE, SPUILabelDefinitions.VAR_MODIFIED_BY,
columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD); SPUILabelDefinitions.VAR_DESC };
columnList.add(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD); setColumns(columnsToShowInOrder);
columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE);
columnList.add(SPUILabelDefinitions.VAR_CREATED_USER);
columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE);
columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY);
columnList.add(SPUILabelDefinitions.VAR_DESC);
setColumnOrder(columnList.toArray());
alignColumns(); alignColumns();
} }
@@ -253,7 +246,6 @@ public class RolloutGroupListGrid extends AbstractGrid<LazyQueryContainer> {
@Override @Override
protected void setHiddenColumns() { protected void setHiddenColumns() {
final List<Object> columnsToBeHidden = new ArrayList<>(); final List<Object> columnsToBeHidden = new ArrayList<>();
columnsToBeHidden.add(SPUILabelDefinitions.VAR_NAME);
columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE);
columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER);
columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE);

View File

@@ -8,9 +8,7 @@
*/ */
package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets; package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets;
import java.util.ArrayList;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
@@ -164,15 +162,11 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid<LazyQueryContainer
@Override @Override
protected void setColumnProperties() { protected void setColumnProperties() {
final List<Object> columnList = new ArrayList<>(); final Object[] columnsToShowInOrder = new Object[] { SPUILabelDefinitions.VAR_NAME,
columnList.add(SPUILabelDefinitions.VAR_NAME); SPUILabelDefinitions.VAR_CREATED_DATE, SPUILabelDefinitions.VAR_CREATED_BY,
columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, SPUILabelDefinitions.VAR_LAST_MODIFIED_BY,
columnList.add(SPUILabelDefinitions.VAR_CREATED_BY); SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.VAR_DESC };
columnList.add(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE); setColumns(columnsToShowInOrder);
columnList.add(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY);
columnList.add(SPUILabelDefinitions.VAR_STATUS);
columnList.add(SPUILabelDefinitions.VAR_DESC);
setColumnOrder(columnList.toArray());
alignColumns(); alignColumns();
} }

View File

@@ -232,6 +232,12 @@ tooltip.check.for.mandatory=Check to make Mandatory
tooltip.artifact.icon=Show Artifact Details tooltip.artifact.icon=Show Artifact Details
tooltip.click.to.edit = Click to edit tooltip.click.to.edit = Click to edit
tooltip.metadata.icon = Manage Metadata tooltip.metadata.icon = Manage Metadata
#rollout action
tooltip.rollout.run = Run
tooltip.rollout.pause = Pause
tooltip.rollout.update = Update..
tooltip.rollout.copy = Copy..
tooltip.rollout.delete = Delete..
# Notification messages prefix with - message # Notification messages prefix with - message
message.save.success = {0} saved successfully message.save.success = {0} saved successfully