package org.ovirt.engine.ui.userportal.widget.table.column; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.ui.common.widget.ImageWithDecorator; import org.ovirt.engine.ui.common.widget.table.column.AbstractDecoratedImageColumn; import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel; import org.ovirt.engine.ui.userportal.ApplicationConstants; import org.ovirt.engine.ui.userportal.ApplicationResources; import org.ovirt.engine.ui.userportal.gin.AssetProvider; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlUtils; /** * Column for showing VM status in UserPortal. Supports tooltips. */ public class VmStatusColumn extends AbstractDecoratedImageColumn<UserPortalItemModel> { private static final int DECORATOR_POSITION_LEFT = 16; private static final int DECORATOR_POSITION_TOP = -9; private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Override public ImageWithDecorator getValue(UserPortalItemModel item) { VM vm = item.getVM(); ImageResource changesImage = null; final String vmStatus; if (vm != null) { if (vm.isNextRunConfigurationExists()) { changesImage = resources.vmDelta(); } vmStatus = vm.getStatus().toString(); } else { vmStatus = ""; } return new ImageWithDecorator(getMainImage(item), changesImage, DECORATOR_POSITION_LEFT, DECORATOR_POSITION_TOP, vmStatus); } @Override public SafeHtml getTooltip(UserPortalItemModel item) { VM vm = item.getVM(); if (vm != null) { String tooltip = getTooltipText(vm.getStatus()); if (tooltip != null) { return SafeHtmlUtils.fromSafeConstant(tooltip); } } return null; } private String getTooltipText(VMStatus status) { switch (status) { case Up: return constants.Up(); case Down: return constants.Down(); case SavingState: return constants.SavingState(); case RestoringState: return constants.RestoringState(); case PoweringUp: return constants.PoweringUp(); case PoweringDown: return constants.PoweringDown(); case RebootInProgress: return constants.RebootInProgress(); case WaitForLaunch: return constants.WaitForLaunch(); case ImageLocked: return constants.ImageLocked(); case MigratingFrom: return constants.MigratingFrom(); case MigratingTo: return constants.MigratingTo(); case Suspended: return constants.Suspended(); case Paused: return constants.Paused(); case Unknown: return constants.Unknown(); case Unassigned: return constants.Unassigned(); case NotResponding: return constants.NotResponding(); default: break; } return null; } private ImageResource getMainImage(UserPortalItemModel item) { switch (item.getStatus()) { case Up: VM vm = item.getVM(); if (vm == null) { return resources.vmStatusRunning(); } if (vm.isRunOnce()) { return resources.runOnceUpImage(); } else { return resources.vmStatusRunning(); } case MigratingFrom: case MigratingTo: return resources.migrationImage(); case WaitForLaunch: return resources.waitforlaunch(); case ImageLocked: case SavingState: return resources.vmStatusWaiting(); case PoweringUp: return resources.vmStatusStarting(); case RebootInProgress: return resources.rebooting(); case RestoringState: return resources.vmStatusWaiting(); case Paused: return resources.vmStatusPaused(); case Suspended: return resources.vmStatusSuspended(); case NotResponding: case Unassigned: case Unknown: return resources.vmStatusUnknown(); case ImageIllegal: case Down: return resources.vmStatusStopped(); case PoweringDown: return resources.vmStatusStopping(); default: return resources.vmStatusUnknown(); } } }