Rev 1882 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.publication;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.composants.ChampFiltreRecherche;import org.tela_botanica.client.composants.InfoLogger;import org.tela_botanica.client.i18n.Constantes;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.Utilisateur;import org.tela_botanica.client.modeles.publication.Publication;import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;import org.tela_botanica.client.modeles.publication.PublicationListe;import org.tela_botanica.client.modeles.structure.StructureListe;import org.tela_botanica.client.util.Debug;import org.tela_botanica.client.vues.BarrePaginationVue;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.Style.SortDir;import com.extjs.gxt.ui.client.event.BaseEvent;import com.extjs.gxt.ui.client.event.ButtonEvent;import com.extjs.gxt.ui.client.event.Events;import com.extjs.gxt.ui.client.event.Listener;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.button.Button;import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;import com.extjs.gxt.ui.client.widget.grid.ColumnData;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.GridCellRenderer;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.ToolBar;import com.google.gwt.core.client.GWT;import com.google.gwt.user.client.Window;public class PublicationListeVue extends ContentPanel implements Rafraichissable {private Mediateur mediateur = null;private Constantes i18nC = null;private Grid<Publication> grille = null;private ListStore<Publication> store = null;private ColumnModel modeleDesColonnes = null;private Button ajouter;private Button modifier;private Button supprimer;private Button importer;private ChampFiltreRecherche champFiltreRecherche = null;private BarrePaginationVue pagination = null;private int indexElementSelectionne = 0;private Publication publicationSelectionnee = null;public PublicationListeVue(Mediateur mediateurCourant) {mediateur = mediateurCourant;i18nC = Mediateur.i18nC;setLayout(new FitLayout());setHeaderVisible(false);// Gestion de la barre d'outilToolBar toolBar = new ToolBar();ajouter = new Button(i18nC.ajouter());ajouter.setIcon(Images.ICONES.ajouter());ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent be) {mediateur.clicAjouterPublication();}});ajouter.setToolTip(i18nC.indicationCreerUneFiche()+" "+i18nC.publicationSingulier());toolBar.add(ajouter);modifier = new Button(i18nC.modifier());modifier.setIcon(Images.ICONES.formModifier());modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent be) {mediateur.clicModifierPublication(grille.getSelectionModel().getSelectedItems());}});modifier.setToolTip(i18nC.indicationModifierUneFiche());toolBar.add(modifier);supprimer = new Button(i18nC.supprimer());supprimer.setIcon(Images.ICONES.supprimer());supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent be) {mediateur.clicSupprimerPublication(grille.getSelectionModel().getSelectedItems());}});supprimer.setToolTip(i18nC.indicationSupprimerUneFiche());toolBar.add(supprimer);setTopComponent(toolBar);// Gestion de la grilleList<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();// ATTENTION : les noms des colonnes doivent correspondre aux noms variables de la classe utilisée dans la listecolonnes.add(new ColumnConfig("fmt_auteur", i18nC.publicationAuteurs(), 200));colonnes.add(new ColumnConfig("titre", i18nC.publicationTitre(), 150));colonnes.add(new ColumnConfig("collection", i18nC.publicationRevueCollection(), 110));colonnes.add(creerColonneEditeur());colonnes.add(creerColonneAnneePublication());colonnes.add(new ColumnConfig("indication_nvt", i18nC.publicationNvt(), 35));colonnes.add(new ColumnConfig("fascicule", i18nC.publicationFascicule(), 35));colonnes.add(new ColumnConfig("truk_pages", i18nC.publicationPage(), 35));modeleDesColonnes = new ColumnModel(colonnes);GridSelectionModel<Publication> modeleDeSelection = new GridSelectionModel<Publication>();modeleDeSelection.addSelectionChangedListener(new SelectionChangedListener<Publication>() {public void selectionChanged(SelectionChangedEvent<Publication> event) {publicationSelectionnee = (Publication) event.getSelectedItem();indexElementSelectionne = store.indexOf(publicationSelectionnee);clicListe(publicationSelectionnee);}});store = new ListStore<Publication>();store.sort("titre", SortDir.ASC);grille = new Grid<Publication>(store, modeleDesColonnes);grille.setWidth("100%");grille.setAutoExpandColumn("titre");grille.getView().setAutoFill(true);grille.getView().setForceFit(true);grille.setSelectionModel(modeleDeSelection);grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {public void handleEvent(BaseEvent be) {grille.getSelectionModel().select(0, false);}});grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){public void handleEvent(BaseEvent be) {modifier.fireEvent(Events.Select);}});add(grille);PublicationListe publicationListe = new PublicationListe();champFiltreRecherche = new ChampFiltreRecherche(mediateurCourant, toolBar, publicationListe);importer = new Button(i18nC.importer());importer.setIcon(Images.ICONES.importerCsv());importer.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent be) {if(mediateur.getUtilisateur().isIdentifie()) {mediateur.clicImporterPublication(PublicationListeVue.this);} else {Window.alert(i18nC.identificationNecessaire());}}});importer.setToolTip(i18nC.indicationImporterUnePubli());toolBar.add(importer);// Définition de la barre de paginationpagination = new BarrePaginationVue(publicationListe, mediateur, champFiltreRecherche);setBottomComponent(pagination);}private ColumnConfig creerColonneEditeur() {GridCellRenderer<Publication> editeurRendu = new GridCellRenderer<Publication>() {public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {String editeur = model.getNomEditeur();model.set("_editeur_", editeur);return editeur;}};ColumnConfig editeurColonne = new ColumnConfig("_editeur_", i18nC.publicationEditeur(), 135);editeurColonne.setRenderer(editeurRendu);return editeurColonne;}private ColumnConfig creerColonneAnneePublication() {GridCellRenderer<Publication> datePublicationRendu = new GridCellRenderer<Publication>() {public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {String annee = model.getAnneeParution();model.set("_annee_", annee);return annee;}};ColumnConfig datePublicationColonne = new ColumnConfig("_annee_", i18nC.publicationDateParution(), 75);datePublicationColonne.setRenderer(datePublicationRendu);return datePublicationColonne;}private void clicListe(Publication publication) {if (publication != null && store.getCount() > 0) {mediateur.clicListePublication(publication);}}private void gererEtatActivationBouton() {int nbreElementDuMagazin = store.getCount();ajouter.enable();if (nbreElementDuMagazin <= 0) {supprimer.disable();modifier.disable();} else if (nbreElementDuMagazin > 0) {modifier.enable();if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {supprimer.enable();}}}public void rafraichir(Object nouvellesDonnees) {if (nouvellesDonnees instanceof PublicationListe) {PublicationListe publications = (PublicationListe) nouvellesDonnees;champFiltreRecherche.setListePaginable(publications);pagination.setlistePaginable(publications);pagination.rafraichir(publications.getPageTable());if (publications != null) {List<Publication> liste = publications.toList();store.removeAll();store.add(liste);mediateur.actualiserPanneauCentral();}} else if (nouvellesDonnees instanceof Information) {Information info = (Information) nouvellesDonnees;if (info.getType().equals("maj_utilisateur")) {gererEtatActivationBouton();} else if (info.getType().equals("publication_modifiee")) {if(publicationSelectionnee != null) {store.remove(indexElementSelectionne);publicationSelectionnee = null;}Publication publiModifee = (Publication)info.getDonnee(0);// au cas ou le bouton appliquer aurait été cliqué avant de validerstore.remove(publiModifee);store.insert(publiModifee, indexElementSelectionne);publicationSelectionnee = publiModifee;int indexElementSelectionne = store.indexOf(publicationSelectionnee);grille.getSelectionModel().select(indexElementSelectionne, false);grille.getView().focusRow(indexElementSelectionne);clicListe(publicationSelectionnee);} else if (info.getType().equals("suppression_publication")) {InfoLogger.display(i18nC.publicationTitreSuppression(), info.getMessages().toString());supprimerPublicationsSelectionnees();gererEtatActivationBouton();}} else {GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);}layout();}private void supprimerPublicationsSelectionnees() {List<Publication> publicationsSelectionnees = grille.getSelectionModel().getSelectedItems();Iterator<Publication> it = publicationsSelectionnees.iterator();while (it.hasNext()) {grille.getStore().remove(it.next());}layout(true);}public void afficherDernierePage() {pagination.allerALaDernierePage();}}