package org.ovirt.engine.ui.common.widget.table.cell; import java.util.HashSet; import java.util.Set; import org.ovirt.engine.ui.uicommonweb.UICommand; 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.EventTarget; import com.google.gwt.dom.client.NativeEvent; /** * Cell that renders ActionButtonDefinition-like buttons. Supports tooltips. * * @param <T> * The data type of the cell (the model) */ public abstract class AbstractButtonCell<T> extends AbstractCell<T> { /** * Events to sink. */ @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, T value, NativeEvent event, ValueUpdater<T> valueUpdater) { super.onBrowserEvent(context, parent, value, event, valueUpdater); EventTarget eventTarget = event.getEventTarget(); if (!Element.is(eventTarget)) { return; } if (BrowserEvents.CLICK.equals(event.getType()) && isEnabled(value)) { UICommand command = resolveCommand(value); if (command != null) { command.execute(); } } } /** * Check if the button is enabled. */ protected boolean isEnabled(T value) { UICommand command = resolveCommand(value); return command != null ? command.getIsExecutionAllowed() : true; } protected abstract UICommand resolveCommand(T value); }