package org.ovirt.engine.ui.common.widget.table.cell; import java.util.List; import org.ovirt.engine.ui.common.widget.table.HasStyleClass; import com.google.gwt.cell.client.HasCell; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; public class StatusCompositeCell<C> extends CompositeCell<C> { public interface StatusCompositeCellResources extends ClientBundle { @ClientBundle.Source("org/ovirt/engine/ui/common/css/StatusCompositeCell.css") StatusCompositeCellCss statusCompositeCellCss(); } public interface StatusCompositeCellCss extends CssResource { String divInlineBlock(); } public interface ContentTemplate extends SafeHtmlTemplates { @Template("<div id=\"{0}\">") SafeHtml id(String id); } private static final StatusCompositeCellResources RESOURCES = GWT.create(StatusCompositeCellResources.class); private final StatusCompositeCellCss style; private final List<HasCell<C, ?>> hasCells; private ContentTemplate template; public StatusCompositeCell(List<HasCell<C, ?>> hasCells) { super(hasCells); this.hasCells = hasCells; style = RESOURCES.statusCompositeCellCss(); style.ensureInjected(); } ContentTemplate getTemplate() { if (template == null) { template = GWT.create(ContentTemplate.class); } return template; } @Override public void render(Cell.Context context, C value, SafeHtmlBuilder sb, String id) { sb.append(getTemplate().id(id)); for (HasCell<C, ?> hasCell : hasCells) { render(context, value, sb, hasCell, id); } sb.appendHtmlConstant("</div>"); //$NON-NLS-1$ } @Override protected <T> void render(Cell.Context context, C value, SafeHtmlBuilder sb, HasCell<C, T> hasCell, String id) { com.google.gwt.cell.client.Cell<T> _cell = hasCell.getCell(); if (_cell instanceof Cell) { Cell<T> cell = (Cell<T>) _cell; // cast from GWT Cell to our Cell impl if (cell instanceof HasStyleClass) { ((HasStyleClass) cell).setStyleClass(style.divInlineBlock()); } cell.render(context, hasCell.getValue(value), sb, id); } else { throw new IllegalStateException("StatusCompositeCell cannot render Cells that do not implement " //$NON-NLS-1$ + Cell.class.getName()); } } @Override public boolean isEditing(Context context, Element parent, C value) { return false; } @Override public boolean resetFocus(Context context, Element parent, C value) { return false; } }