Subversion Repositories eFlore/Applications.coel

Rev

Rev 562 | Rev 566 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.Personne;
import org.tela_botanica.client.modeles.PersonneListe;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.PagingModelMemoryProxy;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.Dictionary;

public class PersonneListeVue extends ContentPanel implements Rafraichissable {
        
        private Mediateur mediateur = null ;
        
        private Grid<Personne> grille = null;
        private Personne personneSelectionnee = null;
        private PagingToolBar pagination;
        private ColumnModel modeleColonnes;
        private final int nbElementsPage = Integer.valueOf(((Dictionary) Dictionary.getDictionary("configuration")).get("nbElementsPage"));
        
        public PersonneListeVue() {
                mediateur = Registry.get(RegistreId.MEDIATEUR);
                
                
                //Définition de la barre d'outil
                ToolBar toolBar = new ToolBar();
                Button ajouter = new Button(mediateur.i18nC.ajouter());
                ajouter.setIcon(Images.ICONES.ajouter());
                ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
                        public void componentSelected(ButtonEvent ce) {  
                                mediateur.clicAjouterPersonne();
                        }  
                });
                toolBar.add(ajouter);
                final Rafraichissable r = this ;

                final Button modifier = new Button(mediateur.i18nC.modifier());
                modifier.setIcon(Images.ICONES.formModifier());
                modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
                        public void componentSelected(ButtonEvent ce) {  
                                mediateur.clicModifierPersonne(personneSelectionnee);
                        }  
                });
                toolBar.add(modifier);
                
                final Button supprimer = new Button(mediateur.i18nC.supprimer());
                supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
                        public void componentSelected(ButtonEvent ce) {  
                                mediateur.clicSupprimerPersonne(r, grille.getSelectionModel().getSelectedItems());
                        }  
                });
                
                supprimer.setIcon(Images.ICONES.supprimer());
                toolBar.add(supprimer);
                setTopComponent(toolBar);
                
                List<ColumnConfig> lstColumns = new ArrayList<ColumnConfig>();
                
                // Définition des colomnes de la grille:
                ColumnConfig ccId = new ColumnConfig();
                ccId.setId("id_personne");
                ccId.setHeader("Id");
                ccId.setWidth(45);
                lstColumns.add(ccId);
                
                ColumnConfig ccFmtNomComplet = new ColumnConfig();
                ccFmtNomComplet.setId("fmt_nom_complet");
                ccFmtNomComplet.setHeader("Nom Complet");
                ccFmtNomComplet.setWidth(200);
                lstColumns.add(ccFmtNomComplet);
                
                ColumnConfig ccCodePostal = new ColumnConfig();
                ccCodePostal.setId("code_postal");
                ccCodePostal.setHeader("Code postal");
                ccCodePostal.setWidth(100);
                lstColumns.add(ccCodePostal);
                
                ColumnConfig ccVille = new ColumnConfig();
                ccVille.setId("ville");
                ccVille.setHeader("Ville");
                ccVille.setWidth(100);
                lstColumns.add(ccVille);
                
                ColumnConfig ccCourriel = new ColumnConfig();
                ccCourriel.setId("courriel_princ");
                ccCourriel.setHeader("Courriel");
                ccCourriel.setWidth(200);
                lstColumns.add(ccCourriel);
                
                ColumnConfig ccNom = new ColumnConfig();
                ccNom.setId("nom");
                ccNom.setHeader("Nom");
                ccNom.setWidth(100);
                ccNom.setHidden(true);
                lstColumns.add(ccNom);
                
                ColumnConfig ccPrenom = new ColumnConfig();
                ccPrenom.setId("prenom");
                ccPrenom.setHeader("Prénom");
                ccPrenom.setWidth(100);
                ccPrenom.setHidden(true);
                lstColumns.add(ccPrenom);
                
                modeleColonnes = new ColumnModel(lstColumns);
                grille = new Grid<Personne>( new ListStore<Personne>(), modeleColonnes);
                GridSelectionModel<Personne> gsmSelectionGrille = new GridSelectionModel<Personne>();
                gsmSelectionGrille.addSelectionChangedListener(new SelectionChangedListener<Personne>() {
                        public void selectionChanged(SelectionChangedEvent<Personne> event) {
                                Personne p = (Personne) event.getSelectedItem();
                                personneSelectionnee = p;
                                clicListe(p);
                        }
                });
                
                grille.setSelectionModel(gsmSelectionGrille);
                grille.setAutoExpandColumn("fmt_nom_complet");
                add(grille);
                
                pagination = new PagingToolBar(nbElementsPage);
                setBottomComponent(pagination);
                
                setLayout(new FitLayout());
        }

        private void clicListe(Personne personne) {
                mediateur.clicListePersonne(personne);
        }

        public void rafraichir(Object nouvellesDonnees) {
                
                if (nouvellesDonnees instanceof PersonneListe) {
                        
                        setHeading(mediateur.i18nC.personneListeLabel());
                        PersonneListe listePersonnes = (PersonneListe) nouvellesDonnees;
                        
                        List<Personne> liste = new ArrayList<Personne>();
                        for (Iterator<String> it = listePersonnes.keySet().iterator(); it.hasNext();) {
                                liste.add(listePersonnes.get(it.next()));
                        }
                        
                        PagingModelMemoryProxy proxy = new PagingModelMemoryProxy(liste);  
                        PagingLoader<PagingLoadResult<ModelData>> loader = new BasePagingLoader<PagingLoadResult<ModelData>>(proxy);
                    loader.setRemoteSort(true); 
                    pagination.bind(loader);
                    loader.load(0, nbElementsPage);
                        
                        ListStore<Personne> store = new ListStore<Personne>(loader);
                        grille.reconfigure(store, modeleColonnes);
                        
                        mediateur.actualiserPanneauCentral();
                        
                        store.sort("fmt_nom_complet", SortDir.ASC);
                        if (store.getCount() > 0) {
                                //FIXME : la selection d'une ligne ne mets pas le style voulu (ligne sélectionnée)
                                grille.getSelectionModel().select(store.getAt(0), true);        
                        }
                        
                } else if (nouvellesDonnees instanceof Information)     {
                        
                        Information info = (Information) nouvellesDonnees;
                        if (info.getType().equals("suppression_personne"))      {
                                
                                Info.display("Suppression de personne", info.getMessages().toString()); 
                        
                                        List<Personne> selectionPersonnes = grille.getSelectionModel().getSelectedItems();
                                        final int taille = selectionPersonnes.size();
                                        for (int i = 0; i < taille; i++) {
                                                grille.getStore().remove(selectionPersonnes.get(i));
                                        }
                        } else  {
                                Info.display("Erreur", info.getMessages().toString());
                        }
                        
                } else {
                        GWT.log(mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
                }
                layout();
        }
}