package org.ovirt.engine.ui.webadmin.widget.table.cell;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterTaskSupport;
import org.ovirt.engine.ui.common.widget.table.cell.CompositeCell;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.HasCell;
import com.google.gwt.dom.client.Element;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.Column;
public class VolumeActivityCompositeCell<T extends GlusterTaskSupport> extends CompositeCell<T> {
private final List<HasCell<T, ?>> hasCells;
public VolumeActivityCompositeCell(List<HasCell<T, ?>> hasCells) {
super(hasCells);
this.hasCells = hasCells;
}
@Override
public Set<String> getConsumedEvents() {
Set<String> set = new HashSet<>(super.getConsumedEvents());
if (hasCells == null) {
return set;
}
for(HasCell<T, ?> currentHasCell : hasCells) {
if(currentHasCell instanceof Column) {
Set<String> consumedEvents = ((Column) currentHasCell).getCell().getConsumedEvents();
if(consumedEvents != null) {
set.addAll(consumedEvents);
}
}
if(currentHasCell instanceof Cell) {
set.addAll(((Cell)currentHasCell).getConsumedEvents());
}
}
return set;
}
@Override
public void render(Context context, T value, SafeHtmlBuilder sb, String id) {
sb.appendHtmlConstant("<table id=\"" + id + "\" style=\"margin:0 auto\"><tr>"); //$NON-NLS-1$ //$NON-NLS-2$
Iterator<HasCell<T, ?>> iterator = hasCells.iterator();
while (iterator.hasNext()) {
render(context, value, sb, iterator.next(), id);
}
sb.appendHtmlConstant("</tr></table>"); //$NON-NLS-1$
}
@Override
protected <X> void render(Context context,
T value,
SafeHtmlBuilder sb,
HasCell<T, X> hasCell, String id) {
Cell<X> cell = hasCell.getCell();
sb.appendHtmlConstant("<td>"); //$NON-NLS-1$
cell.render(context, hasCell.getValue(value), sb);
sb.appendHtmlConstant("</td>"); //$NON-NLS-1$
}
@Override
protected Element getContainerElement(Element parent) {
return super.getContainerElement(parent)
.getFirstChildElement()
.getFirstChildElement()
.getFirstChildElement();
}
}