package org.ovirt.engine.ui.webadmin.widget.table.cell;
import java.util.HashSet;
import java.util.Set;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
import org.ovirt.engine.ui.common.widget.table.cell.AbstractCell;
import org.ovirt.engine.ui.frontend.utils.GlusterVolumeUtils;
import org.ovirt.engine.ui.frontend.utils.GlusterVolumeUtils.VolumeStatus;
import org.ovirt.engine.ui.uicommonweb.UICommand;
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.cell.client.ValueUpdater;
import com.google.gwt.dom.client.BrowserEvents;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
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 VolumeStatusCell extends AbstractCell<GlusterVolumeEntity> {
private static final ApplicationTemplates templates = AssetProvider.getTemplates();
private static final ApplicationResources resources = AssetProvider.getResources();
private UICommand onClickCommand = null;
protected ImageResource downImage = resources.downImage();
protected ImageResource upImage = resources.upImage();
protected ImageResource allBricksDownImage = resources.volumeAllBricksDownWarning();
protected ImageResource volumeSomeBricksDownImage = resources.volumeBricksDownWarning();
public VolumeStatusCell() {
}
public VolumeStatusCell(UICommand onClickCommand) {
this.onClickCommand = onClickCommand;
}
@Override
public Set<String> getConsumedEvents() {
Set<String> set = new HashSet<>(super.getConsumedEvents());
set.add(BrowserEvents.CLICK);
return set;
}
@Override
public void onBrowserEvent(Context context,
Element parent,
GlusterVolumeEntity volume,
NativeEvent event, ValueUpdater<GlusterVolumeEntity> valueUpdater) {
super.onBrowserEvent(context, parent, volume, event, valueUpdater);
VolumeStatus status = GlusterVolumeUtils.getVolumeStatus(volume);
if (BrowserEvents.CLICK.equals(event.getType()) && onClickCommand != null && (status == VolumeStatus.ALL_BRICKS_DOWN || status == VolumeStatus.SOME_BRICKS_DOWN)) {
onClickCommand.execute();
}
}
protected ImageResource getStatusImage(VolumeStatus vStatus) {
// Find the image corresponding to the status of the volume:
ImageResource statusImage = null;
switch (vStatus) {
case DOWN:
return downImage;
case UP :
return upImage;
case ALL_BRICKS_DOWN :
return allBricksDownImage;
case SOME_BRICKS_DOWN :
return volumeSomeBricksDownImage;
}
return statusImage;
}
@Override
public void render(Context context, GlusterVolumeEntity volume, SafeHtmlBuilder sb, String id) {
// Nothing to render if no volume is provided:
if (volume == null) {
return;
}
VolumeStatus status = GlusterVolumeUtils.getVolumeStatus(volume);
ImageResource statusImage = getStatusImage(status);
// Generate the HTML for the image:
SafeHtml statusImageHtml =
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(statusImage).getHTML());
if (status == VolumeStatus.ALL_BRICKS_DOWN || status == VolumeStatus.SOME_BRICKS_DOWN
|| GlusterVolumeUtils.isHealingRequired(volume)) {
SafeHtml alertImageHtml = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.alertImage()).getHTML());
sb.append(templates.statusWithAlertTemplate(statusImageHtml, alertImageHtml, id, status.toString()));
} else {
sb.append(templates.statusTemplate(statusImageHtml, id, status.toString()));
}
}
}