I didnt go through your code :-), but you can create a new class that
implements
ColumnSortEvent.Handler and add it using addColumnSortHandler().
You can pass the columns to the class constructor and onColumnSort
you can check the column being sorted like so:
if (event.getColumn().equals(column1)) {
}
else if (event.getColumn().equals(column2)) {
}
and so on.
Hope this helps.


On Fri, Apr 22, 2011 at 1:36 PM, Celinio <[email protected]> wrote:

> Hi,
> I am using GWT 2.2 and the new CellTable sorting features, as described
> here :
>
> http://code.google.com/intl/fr-FR/webtoolkit/doc/latest/DevGuideUiCellTable.html
>
> There is a strange error (Umbrella exception, nothing else) when I use the
> columnSortHandler.setComparator(...) method.
> I commented it out.
>
> If i use the addColumnSortHandler(new ColumnSortEvent.Handler() {  ...}
> method, it works.
>
> However on one column only. I want to be able to sort the table, on
> whichever column i click on.
>
> So i'm stuck :
> either i figure out what's wrong with the setComparator(..) method
> or i use the addColumnSortHandler(...) and in that case i need to figure
> out how to retrieve the name of the column
> that is currently sorted.
> Does anyone know what could be wrong ?
> Thanks
>
> Here is the code :
> package
> com.francetelecom.voltage.gestion.presentation.client.mvp.view.impl;
>
> import java.util.ArrayList;
> import java.util.Collections;
> import java.util.Comparator;
> import java.util.List;
>
> import com.ft.v.g.presentation.client.GwtApplication;
> import com.ft.v.g.presentation.client.mvp.presenter.ListPresenter;
> import com.ft.v.g.presentation.client.mvp.view.ListView;
> import com.ft.v.g.presentation.client.ui.RecherchePanel;
> import com.ft.v.g.presentation.client.ui.SimpleHasFeedback;
> import com.ft.v.model.DemandeBean;
> import com.google.gwt.cell.client.ClickableTextCell;
> import com.google.gwt.cell.client.FieldUpdater;
> import com.google.gwt.core.client.GWT;
> import com.google.gwt.safehtml.shared.SafeHtml;
> import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
> import com.google.gwt.text.shared.AbstractSafeHtmlRenderer;
> import com.google.gwt.text.shared.SafeHtmlRenderer;
> import com.google.gwt.user.cellview.client.CellTable;
> import com.google.gwt.user.cellview.client.Column;
> import com.google.gwt.user.cellview.client.ColumnSortEvent;
> import com.google.gwt.user.cellview.client.SimplePager;
> import com.google.gwt.user.cellview.client.TextColumn;
> import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
> import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
> import com.google.gwt.user.client.ui.Composite;
> import com.google.gwt.user.client.ui.FlowPanel;
> import com.google.gwt.user.client.ui.HTML;
> import com.google.gwt.user.client.ui.Widget;
> import com.google.gwt.view.client.Range;
> import com.google.gwt.view.client.RangeChangeEvent;
> import com.google.gwt.view.client.RangeChangeEvent.Handler;
>
>
> public class DemandesListViewImpl extends Composite implements
> ListView<DemandeBean> {
>
>
>     private RecherchePanel rp = new RecherchePanel();
>
>     private final CellTable<DemandeBean> demandeTable;
>     private final SimplePager pager;
>     private final static int PAGE_SIZE = 7;
>     private List<DemandeBean> demandes;
>     private SimpleHasFeedback feedback;
>
>     private ListPresenter<DemandeBean> presenter;
>
>     public DemandesListViewImpl() {
>
>
>
>         feedback = new SimpleHasFeedback();
>         // Create a CellTable.
>         demandeTable = new CellTable<DemandeBean>();
>         demandeTable.getElement().setId("marketlist");
>         demandeTable.setPageSize(PAGE_SIZE);
>         demandeTable.setRowCount(0, true);
>
>         demandeTable.addRangeChangeHandler(new Handler() {
>
>             public void onRangeChange(RangeChangeEvent event) {
>
>                 Range range = demandeTable.getVisibleRange();
>                 int start = range.getStart();
>                 int length = range.getLength();
>                 List<DemandeBean> toSet = new
> ArrayList<DemandeBean>(length);
>                 for (int i = start; i < start + length && i <
> demandes.size(); i++)
>                     toSet.add(demandes.get(i));
>                 demandeTable.setRowData(start, toSet);
>
>             }
>         });
>
>         // Create a Pager to control the table.
>         SimplePager.Resources pagerResources = GWT
>                 .create(SimplePager.Resources.class);
>         pager = new SimplePager(TextLocation.CENTER, pagerResources, false,
> 0,
>                 true);
>         pager.setDisplay(demandeTable);
>
>         // Create id column.
>         TextColumn<DemandeBean> idColumn = new TextColumn<DemandeBean>() {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 //return demande.getId().toString();
>                 return String.valueOf(demande.getIdDemande());
>             }
>
>         };
>
>         // renderer for nameColumn
>         SafeHtmlRenderer<String> nameColumnRenderer = new
> AbstractSafeHtmlRenderer<String>() {
>
>             public SafeHtml render(String object) {
>
>                 SafeHtmlBuilder builder = new SafeHtmlBuilder();
>                 builder.appendHtmlConstant("<a>");
>                 builder.appendEscaped(object);
>                 builder.appendHtmlConstant("</a>");
>                 return builder.toSafeHtml();
>             }
>
>         };
>
>         // Create id column.
>         TextColumn<DemandeBean> etatColumn = new TextColumn<DemandeBean>()
> {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 return
> demande.getEtatDemande().getNomCourt().toString();
>             }
>
>         };
>
>
>         // Date réception
>         Column<DemandeBean, String> dateReceptionColumn = new
> Column<DemandeBean, String>(
>                 new ClickableTextCell(nameColumnRenderer)) {
>
>             @Override
>             public String getValue(DemandeBean demandeBean) {
>
>                 //String dateReception =
> demandeBean.getDateReception().toString();
>                 //Date converti =
> VoltageUtils.convertirFormatDate(dateReception);
>
>                 return demandeBean.getDateReception().toString();
>                 //return converti.toString();
>             }
>         };
>
>
> /*
>         // Create name column.
>         Column<DemandeBean, String> nameColumn = new Column<DemandeBean,
> String>(
>                 new ClickableTextCell(nameColumnRenderer)) {
>
>             @Override
>             public String getValue(DemandeBean demandeBean) {
>                 return demandeBean.getName();
>             }
>         };
>
>         nameColumn.setFieldUpdater(new FieldUpdater<DemandeBean, String>()
> {
>             public void update(int index, DemandeBean demandeBean, String
> value) {
>                 if (presenter != null) {
>                     presenter.onEditClicked(demandeBean);
>                 }
>             }
>         }
>
>         );
> */
>
>         // renderer for nameColumn
>         SafeHtmlRenderer<String> deleteColumnRenderer = new
> AbstractSafeHtmlRenderer<String>() {
>
>             public SafeHtml render(String object) {
>                 SafeHtmlBuilder builder = new SafeHtmlBuilder();
>
>                 builder.appendHtmlConstant("<a><img
> src=\"images/btnDelete.gif\"/></a>");
>                 return builder.toSafeHtml();
>             }
>
>         };
>
>         // delete column.
>         Column<DemandeBean, String> deleteColumn = new Column<DemandeBean,
> String>(
>                 new ClickableTextCell(deleteColumnRenderer)) {
>
>             @Override
>             public String getValue(DemandeBean demandeBean) {
>                 return GwtApplication.constantes.button_delete();
>             }
>         };
>
>         deleteColumn.setFieldUpdater(new FieldUpdater<DemandeBean,
> String>() {
>             public void update(int index, DemandeBean demandeBean, String
> value) {
>                 if (presenter != null) {
>                     presenter.onDeleteClicked(demandeBean);
>                 }
>             }
>         }
>
>         );
>
>         /*
>         // Create description column.
>         TextColumn<DemandeBean> descriptionColumn = new
> TextColumn<DemandeBean>() {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 //return demande.getDescription();
>                 return demande.getAutorite();
>             }
>         };
>         */
>
>
>
>         // Colonne TYPE
>         TextColumn<DemandeBean> typeColumn = new TextColumn<DemandeBean>()
> {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 return demande.getTypeDemande();
>             }
>         };
>
>         // Colonne MEDIA
>         TextColumn<DemandeBean> mediaColumn = new TextColumn<DemandeBean>()
> {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 return demande.getTypeMedia();
>             }
>         };
>         mediaColumn.setSortable(true);
>
>         // Colonne Autorite
>         TextColumn<DemandeBean> autoriteColumn = new
> TextColumn<DemandeBean>() {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 return demande.getAutorite();
>             }
>         };
>
>         autoriteColumn.setSortable(true);
>
>
>         /*
>
>           List<DemandeBean> newData = new
> ArrayList(demandeTable.getVisibleItems());
>
>         //ListHandler<DemandeBean> columnSortHandler = new
> ListHandler<DemandeBean>(demandes);
>           ListHandler<DemandeBean> columnSortHandler = new
> ListHandler<DemandeBean>(newData);
>           GWT.log("taille newData : " + newData.size());
>
>
>
>         columnSortHandler.setComparator(mediaColumn,  new
> Comparator<DemandeBean>() {
>             public int compare(DemandeBean o1, DemandeBean o2) {
>
>                 GWT.log("appel compare");
>                 if (o1 == o2) {
>                     return 0;
>                 }
>                 // Compare the name columns.
>                 if (o1 != null) {
>                     return (o2 != null) ?
> o1.getTypeMedia().compareTo(o2.getTypeMedia()) : 1;
>
>                     }
>                 return -1;
>                 }
>             });
>         demandeTable.addColumnSortHandler(columnSortHandler);
>
>         */
>
>
>         demandeTable.addColumnSortHandler(new ColumnSortEvent.Handler()
> {
>            public void onColumnSort(ColumnSortEvent event) {
>
>                // La colonne triée
>                Column a = event.getColumn();
>
>
>                 GWT.log("appel de onColumnSort");
>                  List<DemandeBean> newData = new
> ArrayList(demandeTable.getVisibleItems());
>
>                  if (event.isSortAscending()) {
>                         GWT.log("Ordre ascendant");
>                      Collections.sort(newData, new
> Comparator<DemandeBean>() {
>                             public int compare(DemandeBean o1, DemandeBean
> o2) {
>                                 if (o1 == o2) {
>                                     return 0;
>                                     }
>                                 if (o1 != null) {
>                                     return (o2 != null) ?
> o1.getAutorite().compareTo(o2.getAutorite()) : 1;
>                                     }
>                                 return -1;
>                                 }
>                             }
>                      );
>                  } else {
>                      GWT.log("Ordre descendant");
>                      Collections.sort(newData, new
> Comparator<DemandeBean>() {
>                             public int compare(DemandeBean o1, DemandeBean
> o2) {
>                                 if (o1 == o2) {
>                                     return 0;
>                                     }
>                                 if (o1 != null) {
>                                     return (o2 != null) ?
> o2.getAutorite().compareTo(o1.getAutorite()) : 1;
>                                     }
>                                 return -1;
>                                 }
>                             }
>                      );
>                  }
>                  Range range = demandeTable.getVisibleRange();
>                 int start = range.getStart();
>                  demandeTable.setRowData(start, newData);
>                }
>              });
>
>
>
>         // Colonne operateur
>         TextColumn<DemandeBean> operateurColumn = new
> TextColumn<DemandeBean>() {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 //return demande.getDescription();
>                 return demande.getOperateur();
>             }
>         };
>
>         // Colonne operateur
>         TextColumn<DemandeBean> urgenceColumn = new
> TextColumn<DemandeBean>() {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 //return demande.getDescription();
>                 return String.valueOf(demande.getNiveauUrgenceAutorite());
>             }
>         };
>
>         // Colonne operateur
>         TextColumn<DemandeBean> prestationColumn = new
> TextColumn<DemandeBean>() {
>
>             @Override
>             public String getValue(DemandeBean demande) {
>                 //return demande.getDescription();
>                 return String.valueOf(demande.getPrestation());
>             }
>         };
>
>         /*
>         demandeTable.addColumn(idColumn,
>                 GwtApplication.constantes.column_marketId());
>         demandeTable.addColumn(nameColumn,
>                 GwtApplication.constantes.column_marketName());
>         demandeTable.addColumn(descriptionColumn,
>                 GwtApplication.constantes.column_marketDescription());
>         demandeTable.addColumn(deleteColumn, "");
>         */
>
>         demandeTable.addColumn(deleteColumn, "");
>         demandeTable.addColumn(etatColumn, "Etat");
>         demandeTable.addColumn(idColumn, "N° demande");
>         demandeTable.addColumn(autoriteColumn,"Autorité");
>
>         demandeTable.getColumnSortList().push(autoriteColumn);
>
>
>         demandeTable.addColumn(typeColumn,"Type");
>         demandeTable.addColumn(prestationColumn,"Code");
>         demandeTable.addColumn(mediaColumn, "Media");
>         demandeTable.addColumn(urgenceColumn,"Urgence");
>
>         demandeTable.addColumn(dateReceptionColumn,"Date réception");
>         //demandeTable.addColumn(descriptionColumn,"ID_AUTORITE");
>
>         //demandeTable.addColumn(operateurColumn,"Opérateur");
>
>
>         initWidget(getDisplay());
>     }
>
>     private Widget getDisplay() {
>
>         // main panel is content panel
>
>         // content panel configuration
>
>         FlowPanel content = new FlowPanel();
>         content.getElement().setId("content");
>         content.add(new HTML("<center><h2>"
>                 + GwtApplication.constantes.corbeilleDemandes_title() +
> "</h2></center>"));
>
>         content.add(rp);
>
>         content.add(new HTML("<h4>"
>                 + GwtApplication.constantes.marketPage_result() +
> "</h4>"));
>         content.add(feedback);
>
>
>
>
>
>         content.add(demandeTable);
>         content.add(pager);
>
>
>         content.setWidth("100%");
>
>
>
>         /*
>         FlowPanel content = new FlowPanel();
>         PaginatedTable table = new PaginatedTable(new TableTestModel());
>         content.add(table);
>         */
>
>         return content;
>
>     }
>
>     public void setData(List<DemandeBean> demandes) {
>
>         if (null != demandes) {
>             GWT.log("setData : demandes pas nul");
>         } else {
>             GWT.log("setData : demandes est nul");
>         }
>         this.demandes = demandes;
>         demandeTable.setRowCount(demandes.size(), true);
>         demandeTable.setRowData(0, demandes);
>         demandeTable.setVisible(!this.demandes.isEmpty());
>         pager.setVisible(!this.demandes.isEmpty());
>     }
>
>     public void setPresenter(ListPresenter<DemandeBean> presenter) {
>         this.presenter = presenter;
>     }
>
>     public void reset() {
>         feedback.clear();
>     }
>
>     public void error() {
>         feedback.error(GwtApplication.constantes.error_internal());
>     }
>
>     public void noData() {
>         this.setData(new ArrayList<DemandeBean>());
>         feedback.info(GwtApplication.messages.list_counter_none());
>     }
>
>     public boolean confirmDeletion(DemandeBean demandeBean) {
>         return feedback.confirm(GwtApplication.messages
>
> .deleteMarketPage_confirm(String.valueOf(demandeBean.getId())));
>
>     }
>
> }
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google Web Toolkit" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to