Wednesday, August 28, 2013

Re: CellTable sorting : sorting several columns ?

Hello Celinio,

I have a similar problem, getting umbrella exception. 

I followed initializing the List type object to new Array List as shown below

 private static List<CommunicationActivityItemViewBean> comList = new ArrayList<CommunicationActivityItemViewBean>();

followed the standard steps provided inthe link http://www.gwtproject.org/doc/latest/DevGuideUiCellTable.html

Is there anything else which you fixed. Could you share the stuff which you have implemented as said by SVR

Thanks,
Hakkin

On Friday, April 22, 2011 12:36:27 PM UTC-5, Celinio Fernandes 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 unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment