Rev 800 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;
import java.util.ArrayList;
import java.util.List;
import org.tela_botanica.client.Mediateur;
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 org.tela_botanica.client.modeles.ValeurListe;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.EventType;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.KeyListener;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.StoreEvent;
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.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
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.grid.HeaderGroupConfig;
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.KeyCodes;
public class CollectionFormAuteur extends FormulaireOnglet implements Rafraichissable {
private ContentPanel panneauPrincipal = null;
private ToolBar barreOutils = null;
private Grid<Personne> grille;
private PersonneListe auteurs = null;
private PersonneListe auteursAjoutes = null;
private PersonneListe auteursSupprimes = null;
private ComboBox<Personne> auteursSaisisComboBox = null;
private Button auteursBoutonSupprimer = null;
private Button auteursBoutonModifier = null;
private Button ajouterAuteurSaisiBouton = null;
private static final String ETAT_AJOUTE = "A";
private static final String ETAT_SUPPRIME = "S";
public CollectionFormAuteur(Formulaire formulaireCourrant) {
initialiserOnglet(formulaireCourrant);
setId("auteur");
setText(Mediateur.i18nC.collectionAuteur());
setStyleAttribute("padding", "0");
panneauPrincipal = creerPanneauContenantGrille();
barreOutils = creerBarreOutilsGrille();
panneauPrincipal.setTopComponent(barreOutils);
grille = creerGrille();
panneauPrincipal.add(grille);
add(panneauPrincipal);
initialiser();
}
private void initialiser() {
// Remise à zéro des modification dans la liste des auteurs
auteursAjoutes = new PersonneListe();
auteursSupprimes = new PersonneListe();
// Actualisation de l'état des boutons de la barre d'outils
actualiserEtatBoutonsBarreOutils();
}
private ContentPanel creerPanneauContenantGrille() {
ContentPanel panneau = new ContentPanel();
panneau.setHeading(i18nC.collectionAuteurTitre());
panneau.setIcon(Images.ICONES.table());
panneau.setLayout(new FitLayout());
panneau.setFrame(true);
return panneau;
}
private ToolBar creerBarreOutilsGrille() {
ToolBar barreOutils = new ToolBar();
Button ajouterPersonneBouton = creerBoutonAjouter();
barreOutils.add(ajouterPersonneBouton);
barreOutils.add(new SeparatorToolItem());
auteursBoutonModifier = creerBoutonModifier();
barreOutils.add(auteursBoutonModifier);
barreOutils.add(new SeparatorToolItem());
auteursBoutonSupprimer = creerBoutonSupprimer();
barreOutils.add(auteursBoutonSupprimer);
barreOutils.add(new SeparatorToolItem());
Button rafraichirPersonneBouton = creerBoutonRafraichir();
barreOutils.add(rafraichirPersonneBouton);
barreOutils.add(new SeparatorToolItem());
auteursSaisisComboBox = creerComboBoxAuteursSaisis();
barreOutils.add(auteursSaisisComboBox);
ajouterAuteurSaisiBouton = creerBoutonAjouterAuteurSaisi();
barreOutils.add(ajouterAuteurSaisiBouton);
return barreOutils;
}
private Button creerBoutonAjouter() {
Button bouton = new Button(i18nC.ajouter());
bouton.setIcon(Images.ICONES.vcardAjouter());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
FenetreForm fenetre = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);
fenetre.show();
}
});
return bouton;
}
private Button creerBoutonModifier() {
Button bouton = new Button(i18nC.modifier());
bouton.setIcon(Images.ICONES.vcardModifier());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
if (auteurSaisiSelectionne == null) {
Info.display("Info", "Veuillez selectionner un auteur");
} else {
FenetreForm fenetre = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);
fenetre.show();
}
}
});
return bouton;
}
private FenetreForm creerFenetreModaleAvecFormulairePersonne(String mode) {
final FenetreForm fenetre = new FenetreForm("");
final PersonneForm formulaire = creerFormulairePersonne(fenetre);
fenetre.add(formulaire);
return fenetre;
}
private PersonneForm creerFormulairePersonne(final FenetreForm fenetre) {
PersonneForm formulaire = new PersonneForm(mode);
fenetre.setHeading(formulaire.getHeading());
formulaire.setHeaderVisible(false);
formulaire.setTopComponent(null);
// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale
SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePersonne(fenetre, formulaire);
final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
formulaire.setBottomComponent(barreValidation);
if (mode.equals(Formulaire.MODE_MODIFIER)) {
// TODO : simplifier la gestion de l'ajout des données d'une Personne au form pour la modification... (pas besoin de passer par une liste).
Information info = new Information("liste_personne");
PersonneListe personnes = new PersonneListe();
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
personnes.put(auteurSaisiSelectionne.getId(), auteurSaisiSelectionne);
info.setDonnee(0, personnes);
formulaire.rafraichir(info);
}
return formulaire;
}
private SelectionListener<ButtonEvent> creerEcouteurValidationFormulairePersonne(final FenetreForm fenetre, final PersonneForm formulaire) {
SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
String code = ((Button) ce.getComponent()).getData("code");
if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
Boolean ok = formulaire.enregistrer();
if (ok == true) {
// Fermer fenêtre et ajouter/modifier l'élément dans la liste
}
fenetre.hide();
} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
Boolean ok = formulaire.enregistrer();
if (ok == true) {
// Fermer fenêtre et ajouter/modifier l'élément dans la liste
}
} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
fenetre.hide();
} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
formulaire.reinitialiser();
}
}
};
return ecouteur;
}
private Button creerBoutonSupprimer() {
Button bouton = new Button(i18nC.supprimer());
bouton.setIcon(Images.ICONES.vcardSupprimer());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
Personne auteurSaisiSelectionne = grille.getSelectionModel().getSelectedItem();
if (auteurSaisiSelectionne == null) {
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerAuteur());
} else {
supprimerDansGrille(auteurSaisiSelectionne);
}
}
});
return bouton;
}
private Button creerBoutonRafraichir() {
Button bouton = new Button(i18nC.rafraichir());
bouton.setIcon(Images.ICONES.rafraichir());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
// TODO : mettre en place le rafraichissement de la liste
}
});
return bouton;
}
private ComboBox<Personne> creerComboBoxAuteursSaisis() {
ListStore<Personne> personnesSaisiesStore = new ListStore<Personne>();
personnesSaisiesStore.add(new ArrayList<Personne>());
ComboBox<Personne> comboBox = new ComboBox<Personne>();
comboBox.setWidth(200);
comboBox.setEmptyText(i18nC.chercherAuteurSaisi());
comboBox.setTriggerAction(TriggerAction.ALL);
comboBox.setEditable(true);
comboBox.setDisplayField("fmt_nom_complet");
comboBox.setStore(personnesSaisiesStore);
comboBox.addKeyListener(new KeyListener() {
public void componentKeyUp(ComponentEvent ce) {
if (auteursSaisisComboBox.getRawValue() != null && auteursSaisisComboBox.getRawValue().length() > 0) {
if (!ce.isNavKeyPress()) {
obtenirAuteursSaisis(auteursSaisisComboBox.getRawValue());
}
}
}
});
comboBox.addListener(Events.Select, new Listener<BaseEvent>() {
@Override
public void handleEvent(BaseEvent be) {
if (auteursSaisisComboBox.getValue() instanceof Personne) {
ajouterAuteurSaisiBouton.fireEvent(Events.Select);
}
}
});
return comboBox;
}
private Button creerBoutonAjouterAuteurSaisi() {
Button bouton = new Button(i18nC.ajouter());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
Personne auteurSaisiSelectionne = auteursSaisisComboBox.getValue();
ajouterDansGrille(auteurSaisiSelectionne);
auteursSaisisComboBox.setValue(null);
}
});
return bouton;
}
private void ajouterDansGrille(Personne auteur) {
if (auteur != null) {
// Ajout de la personne ajoutée à la liste
if (auteur.getId() != null && !auteur.getId().equals("")) {
auteursAjoutes.put(auteur.getId(), auteur);
}
// Définition de l'état
auteur.set("etat", ETAT_AJOUTE);
// Ajout à la grille
grille.getStore().insert(auteur, 0);
grille.getSelectionModel().select(0, false);
}
}
private void supprimerDansGrille(Personne auteur) {
if (auteur != null) {
// Ajout de la personne supprimée à la liste
if ((auteur.get("etat") == null || !auteur.get("etat").equals(ETAT_AJOUTE)) && auteur.getId() != null && !auteur.getId().equals("")) {
auteursSupprimes.put(auteur.getId(), auteur);
}
// Suppression de l'enregistrement de la grille
grille.getStore().remove(auteur);
}
}
private Grid<Personne> creerGrille() {
ListStore<Personne> storeGrille = new ListStore<Personne>();
storeGrille.addListener(Store.Add, new Listener<StoreEvent<Personne>>() {
public void handleEvent(StoreEvent<Personne> ce) {
actualiserEtatBoutonsBarreOutils();
}
});
storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Personne>>() {
public void handleEvent(StoreEvent<Personne> ce) {
actualiserEtatBoutonsBarreOutils();
}
});
RowNumberer pluginLigneNumero = new RowNumberer();
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
colonnes.add(pluginLigneNumero);
colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150));
colonnes.add(new ColumnConfig("nom", i18nC.personneNom(), 75));
colonnes.add(new ColumnConfig("prenom", i18nC.personnePrenom(), 75));
colonnes.add(new ColumnConfig("prefixe", i18nC.personnePrefixe(), 50));
//colonnes.add(new ColumnConfig("truk_nom_autre", i18nC.personneNomAutre(), 200));
colonnes.add(new ColumnConfig("naissance_date", i18nC.date(), 75));
colonnes.add(new ColumnConfig("naissance_lieu", i18nC.lieu(), 100));
colonnes.add(new ColumnConfig("ce_deces", i18nC.personneDecedeeInterogation(), 50));
colonnes.add(new ColumnConfig("deces_date", i18nC.date(), 75));
colonnes.add(new ColumnConfig("deces_lieu", i18nC.lieu(), 100));
GridSelectionModel<Personne> modeleDeSelection = new GridSelectionModel<Personne>();
ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
modeleDeColonnes.addHeaderGroup(0, 1, new HeaderGroupConfig(i18nC.personneIdentite(), 1, 4));
modeleDeColonnes.addHeaderGroup(0, 5, new HeaderGroupConfig(i18nC.personneNaissance(), 1, 2));
modeleDeColonnes.addHeaderGroup(0, 7, new HeaderGroupConfig(i18nC.personneDeces(), 1, 3));
Grid<Personne> grillePersonne = new Grid<Personne>(storeGrille, modeleDeColonnes);
grillePersonne.setHeight("100%");
grillePersonne.setBorders(true);
grillePersonne.setSelectionModel(modeleDeSelection);
grillePersonne.addPlugin(pluginLigneNumero);
grillePersonne.getView().setForceFit(true);
grillePersonne.setAutoExpandColumn("fmt_nom_complet");
grillePersonne.setStripeRows(true);
grillePersonne.setTrackMouseOver(true);
return grillePersonne;
}
public void actualiserEtatBoutonsBarreOutils() {
// Activation des boutons si la grille contient un élément
if (grille.getStore().getCount() > 0) {
auteursBoutonSupprimer.enable();
auteursBoutonModifier.enable();
}
// Désactivation des boutons si la grille ne contient plus d'élément
if (grille.getStore().getCount() == 0) {
auteursBoutonSupprimer.disable();
auteursBoutonModifier.disable();
}
}
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof Information) {
Information info = (Information) nouvellesDonnees;
rafraichirInformation(info);
} else {
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
}
}
public void rafraichirInformation(Information info) {
if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {
GWT.log("MESSAGES:\n"+info.getMessages().toString(), null);
}
String type = info.getType();
if (type.equals("liste_personne")) {
if (info.getDonnee(0) != null) {
PersonneListe personnes = (PersonneListe) info.getDonnee(0);
List<Personne> liste = personnes.toList();
auteursSaisisComboBox.getStore().removeAll();
auteursSaisisComboBox.getStore().add(liste);
auteursSaisisComboBox.expand();
}
} else if (type.equals("liste_collection_a_personne")) {
if (info.getDonnee(0) != null) {
initialiser();
// TODO : passer à la méthode peupler un objet CollectionAPersonneListe et modifier le type de auteurs
//auteurs = (CollectionAPersonneListe) info.getDonnee(0);
peupler();
}
}
}
private void peupler() {
layout();
Info.display(i18nC.chargementAuteur(), i18nC.ok());
}
private void obtenirAuteursSaisis(String nom) {
mediateur.selectionnerPersonneParNomComplet(this, null, nom+"%");
}
}