package org.ovirt.engine.ui.webadmin.widget.table.column; import java.io.Serializable; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.utils.SizeConverter; import org.ovirt.engine.core.common.utils.SizeConverter.SizeUnit; import org.ovirt.engine.ui.common.widget.table.cell.AbstractCell; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.EnumTranslator; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationMessages; import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; public abstract class GlusterCapacityCell<P extends Serializable> extends AbstractCell<P>{ protected ApplicationTemplates templates = AssetProvider.getTemplates(); protected ApplicationMessages messages = AssetProvider.getMessages(); protected ApplicationConstants constants = AssetProvider.getConstants(); private Double freeSize; private Double totalSize; private Double usedSize; private SizeUnit inUnit; protected String getSizeString(Double size, SizeUnit inUnit) { if(size == null) { return constants.notAvailableLabel(); } else { Pair<SizeUnit, Double> sizeWithUnits = SizeConverter.autoConvert(size.longValue(), inUnit); return ConstantsManager.getInstance().getMessages().sizeUnitString(formatSize(sizeWithUnits.getSecond()), EnumTranslator.getInstance().translate(sizeWithUnits.getFirst())); } } private String formatSize(double size) { return NumberFormat.getFormat("#.##").format(size);//$NON-NLS-1$ } protected String getProgressText(Double freeSize, Double totalSize) { if(freeSize == null || totalSize == null) { return "?";//$NON-NLS-1$ } else { return (int) getPercentageUsage(freeSize, totalSize) + "%";//$NON-NLS-1$ } } protected int getProgressValue(Double freeSize, Double totalSize) { if(freeSize == null || totalSize == null) { return 0; } return (int) Math.round(getPercentageUsage(freeSize, totalSize)); } private double getPercentageUsage(Double freeSize, Double totalSize) { return ((totalSize - freeSize) * 100 )/totalSize; } protected void setFreeSize(Double freeSize) { this.freeSize = freeSize; } protected void setTotalSize(Double totalSize) { this.totalSize = totalSize; } protected void setInUnit(SizeUnit inUnit) { this.inUnit = inUnit; } protected void setUsedSize(Double usedSize) { this.usedSize = usedSize; } public void clearAll() { setFreeSize(null); setTotalSize(null); setUsedSize(null); setInUnit(null); } @Override public void render(Context context, Serializable value, SafeHtmlBuilder sb, String id) { if(value == null) { clearAll(); } int progress = getProgressValue(freeSize, totalSize); String sizeString = getProgressText(freeSize, totalSize); String color = progress < 70 ? "#669966" : progress < 95 ? "#FF9900" : "#FF0000"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String toolTip = messages.glusterCapacityInfo(getSizeString(freeSize, inUnit), getSizeString(usedSize, inUnit), getSizeString(totalSize, inUnit)); SafeHtml safeHtml = templates.glusterCapcityProgressBar(progress, sizeString, color, toolTip, id); sb.append(safeHtml); } }