I finally got it working.
The problem was that my "demandes" variable, which contains the list of data
that i want to use to populate the celltable, was not initialized ...

Thanks to SVR for pointing it out in the first place !

On Mon, Apr 25, 2011 at 3:40 PM, SVR <svr...@gmail.com> wrote:

> 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 <cel...@gmail.com> 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 google-web-toolkit@googlegroups.com.
>> To unsubscribe from this group, send email to
>> google-web-toolkit+unsubscr...@googlegroups.com.
>> 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 google-web-toolkit@googlegroups.com.
> To unsubscribe from this group, send email to
> google-web-toolkit+unsubscr...@googlegroups.com.
> 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 google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to