package org.ovirt.engine.ui.webadmin.widget.table.cell; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.ui.common.widget.table.cell.AbstractCell; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.widget.table.column.VmStatusColumn; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.AbstractImagePrototype; public class VmStatusCell extends AbstractCell<VM> { private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationTemplates templates = AssetProvider.getTemplates(); @Override public void render(Context context, VM vm, SafeHtmlBuilder sb, String id) { // Nothing to render if no vm is provided: if (vm == null) { return; } // Find the image corresponding to the status of the vm: VMStatus status = vm.getStatus(); ImageResource statusImage; switch (status) { case Up: if (vm.isRunOnce()) { statusImage = resources.runOnceUpImage(); } else { statusImage = resources.vmStatusRunning(); } break; case SavingState: statusImage = resources.vmStatusWait(); break; case RestoringState: statusImage = resources.vmStatusWait(); break; case PoweringUp: statusImage = resources.vmStatusStarting(); break; case PoweringDown: statusImage = resources.vmStatusPoweringDown(); break; case RebootInProgress: statusImage = resources.rebootInProgress(); break; case WaitForLaunch: statusImage = resources.waitForLaunch(); break; case ImageLocked: statusImage = resources.vmStatusWait(); break; case MigratingFrom: case MigratingTo: statusImage = resources.migrationImage(); break; case Suspended: statusImage = resources.suspendedImage(); break; case Paused: statusImage = resources.pauseImage(); break; case Unknown: case Unassigned: statusImage = resources.questionMarkImage(); break; case NotResponding: statusImage = resources.questionMarkImage(); break; default: statusImage = resources.downStatusImage(); break; } // Generate the HTML for status image SafeHtml statusImageHtml = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(statusImage).getHTML()); if (vm.getLockInfo() != null && vm.getLockInfo().isExclusive()) { ImageResource lockImageResource = resources.vmLocked(); // Get the image html AbstractImagePrototype imagePrototype = AbstractImagePrototype.create(lockImageResource); SafeHtml lockImageHtml = SafeHtmlUtils.fromTrustedString(imagePrototype.getHTML()); statusImageHtml = templates.lockedStatusTemplate(lockImageHtml, statusImageHtml); } if (VmStatusColumn.needsAlert(vm)) { sb.append(templates.statusWithAlertTemplate(statusImageHtml, getAlertImageResource(vm), id, status.toString())); } else { sb.append(templates.statusTemplate(statusImageHtml, id, status.toString())); } } private static SafeHtml getAlertImageResource(VM vm) { ImageResource alertImageResource = resources.alertImage(); AbstractImagePrototype imagePrototype = AbstractImagePrototype.create(alertImageResource); String html = imagePrototype.getHTML(); return SafeHtmlUtils.fromTrustedString(html); } }