/**
*
*/
package org.appfuse.webapp.client.ui.users.search;
import java.util.List;
import org.appfuse.webapp.client.application.Application;
import org.appfuse.webapp.client.application.base.activity.AbstractProxySearchActivity;
import org.appfuse.webapp.client.application.utils.tables.CustomColumn;
import org.appfuse.webapp.client.application.utils.tables.LocalColumnSortHandler;
import org.appfuse.webapp.client.proxies.UserProxy;
import org.appfuse.webapp.client.proxies.UsersSearchCriteriaProxy;
import org.appfuse.webapp.client.requests.UserRequest;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.cellview.client.ColumnSortEvent.Handler;
import com.google.gwt.user.cellview.client.ColumnSortList;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.Range;
import com.google.inject.Inject;
import com.google.web.bindery.requestfactory.shared.Request;
import com.google.web.bindery.requestfactory.shared.RequestContext;
/**
* @author ivangsa
*
*/
public class UsersSearchActivity extends AbstractProxySearchActivity<UserProxy, UsersSearchCriteriaProxy> {
private final UsersSearchView view;
private Handler sortHandler;
@Inject
public UsersSearchActivity(final Application application, final UsersSearchView view) {
super(application, view, UsersSearchCriteriaProxy.class);
this.view = view;
setTitle(i18n.userList_title());
}
@Override
public void start(final AcceptsOneWidget panel, final EventBus eventBus) {
view.setDelegate(this);
// Configure local/remote sorting
// sortHandler = createLocalColumnSortHandler(view.asHasData());
sortHandler = new ColumnSortEvent.AsyncHandler(view.asHasData());
view.addColumnSortHandler(sortHandler);
super.start(panel, eventBus);
}
/**
* @param hasData
*/
private Handler createLocalColumnSortHandler(final HasData hasData) {
return new LocalColumnSortHandler<UserProxy>(hasData) {
@Override
public List<UserProxy> getList() {
return (List<UserProxy>) hasData.getVisibleItems();
}
};
}
private String getPropertyNameForColumn(final Column column) {
if(column instanceof CustomColumn) {
return ((CustomColumn) column).getPropertyName();
}
return null;
}
@Override
protected RequestContext createRequestContext() {
return requests.userRequest();
}
@Override
protected Request<Long> createCountRequest(final RequestContext requestContext, final UsersSearchCriteriaProxy searchCriteria) {
return ((UserRequest) requestContext).countUsers(searchCriteria);
}
@Override
protected Request<List<UserProxy>> createSearchRequest(
final RequestContext requestContext, final UsersSearchCriteriaProxy searchCriteria,
final Range range, final ColumnSortList columnSortList) {
String sortProperty = null;
boolean ascending = true;
if(columnSortList.size() > 0) {
final Column sortColumn = columnSortList.get(0).getColumn();
sortProperty = getPropertyNameForColumn(sortColumn);
ascending = columnSortList.get(0).isAscending();
}
return ((UserRequest) requestContext).searchUsers(searchCriteria,
range.getStart(), range.getLength(),
sortProperty, ascending);
}
@Override
public void onStop() {
//XXX view.removeColumnSortHandler(sortHandle);
sortHandler = null;
super.onStop();
}
}