package org.appfuse.webapp.client.application.base.view;
import java.util.HashSet;
import java.util.Set;
import javax.validation.ConstraintViolation;
import org.appfuse.webapp.client.application.ApplicationResources;
import com.github.gwtbootstrap.client.ui.DataGrid;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.ColumnSortEvent.Handler;
import com.google.gwt.user.cellview.client.ColumnSortList;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.view.client.HasData;
import com.google.web.bindery.requestfactory.shared.BaseProxy;
import com.google.web.bindery.requestfactory.shared.EntityProxy;
/**
* Abstract implementation of ProxyListView.
*
* @param <P>
* the type of the proxy
*/
public abstract class AbstractProxySearchView<P extends EntityProxy, S> extends Composite implements ProxySearchView<P, S> {
public @UiField(provided = true) ApplicationResources i18n = GWT.create(ApplicationResources.class);
protected ProxySearchView.Delegate<P> delegate;
@UiField(provided = true)
public Integer pageSize = 25;
@UiField
public CellTable<P> table;
public Set<String> paths = new HashSet<String>();
protected abstract SimpleBeanEditorDriver<S, ?> getEditorDriver();
@Override
public S getSearchCriteria() {
return getEditorDriver() != null ? getEditorDriver().flush() : null;
}
@Override
public void setSearchCriteria(S searchCriteria) {
if (getEditorDriver() != null) {
getEditorDriver().edit(searchCriteria);
}
}
@Override
public boolean setConstraintViolations(Iterable<ConstraintViolation<S>> violations) {
return getEditorDriver() != null ?
getEditorDriver().setConstraintViolations((Set) violations) : false;
}
@Override
public HasData<P> asHasData() {
return table;
}
@Override
public ColumnSortList getColumnSortList() {
return table.getColumnSortList();
}
@Override
public void addColumnSortHandler(Handler clientSideSortHandler) {
table.addColumnSortHandler(clientSideSortHandler);
}
@Override
public String[] getPaths() {
return paths.toArray(new String[paths.size()]);
}
@Override
public AbstractProxySearchView<P, S> asWidget() {
return this;
}
@Override
public void setDelegate(final Delegate<P> delegate) {
this.delegate = delegate;
}
@Override
public void setPageSize(Integer pageSize) {
asHasData().setVisibleRange(asHasData().getVisibleRange().getStart(), pageSize);
}
}