package org.ovirt.engine.ui.webadmin.widget.table.column; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.ui.common.widget.table.column.AbstractSafeHtmlColumn; import org.ovirt.engine.ui.webadmin.ApplicationMessages; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; 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; /** * Displays number of VMs along with number of migrations: * <pre> * I. For newer hosts which report incoming/outgoing migrations separately * 1. No migrations * VMs * * 2. Only incoming migrations * (IN_VMs ->) VMs * * 3. Only outgoing migrations * VMs (OUT_VMs ->) * * 4. Incoming and Outgoing migrations * (IN_VMs ->) VMs (OUT_VMs ->) * * II. For older hosts which reports only total number of migrations * VMs (TOTAL_MIGRATIONS <->) * </pre> */ public class VmCountColumn extends AbstractSafeHtmlColumn<VDS> { private static final ApplicationTemplates templates = AssetProvider.getTemplates(); private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationMessages messages = AssetProvider.getMessages(); private static SafeHtml rightArrowImageHtml = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.rightArrowImage()).getHTML()); private static SafeHtml doubleArrowImageHtml = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.doubleArrowImage()).getHTML()); @Override public SafeHtml getValue(VDS object) { String vmCountStr = String.valueOf(object.getVmCount()); int incomingMigrations = object.getIncomingMigrations(); int outgoingMigrations = object.getOutgoingMigrations(); int totalMigrations = object.getVmMigrating() != null ? object.getVmMigrating() : 0; if (incomingMigrations == 0 && outgoingMigrations == 0 || totalMigrations == 0) { // no migrations, just display number of VMs return new SafeHtmlBuilder().appendEscaped(vmCountStr).toSafeHtml(); } // TODO remove whole if in 4.x when all hosts will report in/out migrations separately if (!areInOutMigrationsSeparated(incomingMigrations, outgoingMigrations)) { String migrationStr = String.valueOf(totalMigrations); return templates.vmCountWithMigrations( messages.vmsWithTotalMigrations( vmCountStr, migrationStr), createInOutMigrationsTemplate(0, doubleArrowImageHtml), vmCountStr, createInOutMigrationsTemplate(totalMigrations, doubleArrowImageHtml)); } return templates.vmCountWithMigrations( messages.vmsWithInOutMigrations( vmCountStr, String.valueOf(incomingMigrations), String.valueOf(outgoingMigrations)), createInOutMigrationsTemplate(incomingMigrations, rightArrowImageHtml), vmCountStr, createInOutMigrationsTemplate(outgoingMigrations, rightArrowImageHtml)); } protected boolean areInOutMigrationsSeparated(int incomingMigrations, int outgoingMigrations) { return incomingMigrations != -1 && outgoingMigrations != -1; } protected SafeHtml createInOutMigrationsTemplate(int migrations, SafeHtml arrowImage) { String prefix; String postfix; String migrationsStr; SafeHtml image; if (migrations > 0) { prefix = "("; //$NON-NLS-1$ migrationsStr = String.valueOf(migrations); image = arrowImage; postfix = ")"; //$NON-NLS-1$ } else { prefix = "\u00a0"; //$NON-NLS-1$ migrationsStr = "\u00a0"; //$NON-NLS-1$ image = SafeHtmlUtils.EMPTY_SAFE_HTML; postfix = "\u00a0"; //$NON-NLS-1$ } return templates.vmCountInOutMigrations( prefix, migrationsStr, image, postfix); } }