package org.ovirt.engine.ui.common.widget.table.column;
import org.ovirt.engine.core.common.businessentities.storage.Disk;
import org.ovirt.engine.core.common.utils.SizeConverter;
import org.ovirt.engine.ui.common.CommonApplicationConstants;
import org.ovirt.engine.ui.common.CommonApplicationMessages;
import org.ovirt.engine.ui.common.gin.AssetProvider;
import com.google.gwt.safehtml.shared.SafeHtml;
public class DiskUploadImageProgressColumn extends AbstractProgressBarColumn<Disk> {
private static final CommonApplicationConstants constants = AssetProvider.getConstants();
private static final CommonApplicationMessages messages = AssetProvider.getMessages();
private static final ProgressBarColors color = ProgressBarColors.GREEN;
public DiskUploadImageProgressColumn() {
}
@Override
protected Integer getProgressValue(Disk disk) {
if (disk.getImageTransferBytesSent() == null) {
return null;
}
switch (disk.getImageTransferPhase()) {
// Fall-through is intentional
case TRANSFERRING:
case RESUMING:
case PAUSED_SYSTEM:
case PAUSED_USER:
case FINALIZING_SUCCESS:
if (disk.getImageTransferBytesTotal() != null && disk.getImageTransferBytesTotal() > 0) {
return (int) (disk.getImageTransferBytesSent() * 100 / disk.getImageTransferBytesTotal());
}
// Without the total upload size, the disk size is the next best estimate
return Math.min(100, (int) (disk.getImageTransferBytesSent() * 100 / disk.getSize()));
}
return null;
}
@Override
public SafeHtml getValue(Disk object) {
return object.getImageTransferPhase() != null ? super.getValue(object) : null;
}
@Override
protected String getStyle() {
return "engine-progress-box-migration"; //$NON-NLS-1$
}
@Override
protected String getProgressText(Disk disk) {
if (disk.getImageTransferPhase() != null) {
switch (disk.getImageTransferPhase()) {
case UNKNOWN:
return constants.imageUploadUnknown();
case INITIALIZING:
return constants.imageUploadInitializing();
case RESUMING:
return constants.imageUploadResuming();
case TRANSFERRING:
if (disk.getImageTransferBytesTotal() == 0) {
return constants.imageTransferringViaAPI();
}
else if (disk.getImageTransferBytesSent() == null) {
return constants.imageUploadTransferring();
}
else if (disk.getImageTransferBytesTotal() == null
|| disk.getImageTransferBytesTotal() == 0) {
return messages.imageUploadProgress(
(int) (disk.getImageTransferBytesSent() / SizeConverter.BYTES_IN_MB));
}
else {
return messages.imageUploadProgressWithTotal(
(int) (disk.getImageTransferBytesSent() / SizeConverter.BYTES_IN_MB),
(int) (disk.getImageTransferBytesTotal() / SizeConverter.BYTES_IN_MB));
}
case PAUSED_SYSTEM:
return constants.imageUploadPausedSystem();
case PAUSED_USER:
return constants.imageUploadPausedUser();
case CANCELLED:
return constants.imageUploadCancelled();
case FINALIZING_SUCCESS:
return constants.imageUploadFinalizingSuccess();
case FINALIZING_FAILURE:
return constants.imageUploadFinalizingFailure();
case FINISHED_SUCCESS:
return constants.imageUploadFinishedSuccess();
case FINISHED_FAILURE:
return constants.imageUploadFinishedFailure();
}
}
return constants.imageUploadUnknown();
}
@Override
protected String getColorByProgress(int progress) {
return color.asCode();
}
}