package org.ovirt.engine.ui.webadmin.uicommon.model;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.core.compat.EventArgs;
import org.ovirt.engine.core.compat.IEventListener;
import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.webadmin.gin.ClientGinjector;
/**
* Default {@link SearchableTableModelProvider} implementation for use with tab controls.
*
* @param <T>
* List model item type.
* @param <M>
* List model type.
*/
public abstract class SearchableTabModelProvider<T, M extends SearchableListModel> extends DataBoundTabModelProvider<T, M> implements SearchableTableModelProvider<T, M> {
public SearchableTabModelProvider(ClientGinjector ginjector) {
super(ginjector);
}
@Override
protected void onCommonModelChange() {
super.onCommonModelChange();
// Add necessary property change handlers
getModel().getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
PropertyChangedEventArgs pcArgs = (PropertyChangedEventArgs) args;
// For EventListModel classes: update data whenever the last event changes
if ("LastEvent".equals(pcArgs.PropertyName)) {
updateData();
}
}
});
}
@Override
public void setSelectedItems(List<T> items) {
// Order is important
if (items.size() > 0) {
getModel().setSelectedItem(items.get(0));
} else {
getModel().setSelectedItem(null);
}
getModel().setSelectedItems(items);
}
@Override
public Object getKey(T item) {
if (item instanceof IVdcQueryable) {
return ((IVdcQueryable) item).getQueryableId();
}
return getDataProvider().getKey(item);
}
@Override
public boolean canGoForward() {
return getModel().getSearchNextPageCommand().getIsExecutionAllowed();
}
@Override
public boolean canGoBack() {
return getModel().getSearchPreviousPageCommand().getIsExecutionAllowed();
}
@Override
public void goForward() {
getModel().getSearchNextPageCommand().Execute();
}
@Override
public void goBack() {
getModel().getSearchPreviousPageCommand().Execute();
}
@Override
public void refresh() {
getModel().getForceRefreshCommand().Execute();
}
}