New file |
0,0 → 1,384 |
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.Publication; |
import org.tela_botanica.client.modeles.PublicationListe; |
import org.tela_botanica.client.modeles.ValeurListe; |
|
import com.extjs.gxt.ui.client.event.ButtonEvent; |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
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.InfoConfig; |
import com.extjs.gxt.ui.client.widget.button.Button; |
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.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.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; |
|
public class CollectionFormPublication extends FormulaireOnglet implements Rafraichissable { |
private ContentPanel panneauPrincipal = null; |
private ToolBar barreOutils = null; |
private Grid<Publication> grille; |
|
private PublicationListe publications = null; |
private PublicationListe publicationsAjoutees = null; |
private PublicationListe publicationsSupprimees = null; |
private ComboBox<Publication> publicationsSaisiesComboBox = null; |
private Button publicationsBoutonSupprimer = null; |
private Button publicationsBoutonModifier = null; |
|
private static final String ETAT_AJOUTE = "A"; |
private static final String ETAT_SUPPRIME = "S"; |
|
public CollectionFormPublication(Formulaire formulaireCourrant) { |
initialiserOnglet(formulaireCourrant); |
setId("publication"); |
setText(Mediateur.i18nC.collectionPublication()); |
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 |
publicationsAjoutees = new PublicationListe(); |
publicationsSupprimees = new PublicationListe(); |
|
// Actualisation de l'état des boutons de la barre d'outils |
actualiserEtatBoutonsBarreOutils(); |
} |
|
private ContentPanel creerPanneauContenantGrille() { |
ContentPanel panneau = new ContentPanel(); |
|
panneau.setHeading(i18nC.collectionPublicationTitre()); |
panneau.setIcon(Images.ICONES.table()); |
panneau.setLayout(new FitLayout()); |
panneau.setFrame(true); |
|
return panneau; |
} |
|
private ToolBar creerBarreOutilsGrille() { |
ToolBar barreOutils = new ToolBar(); |
|
Button ajouterBouton = creerBoutonAjouter(); |
barreOutils.add(ajouterBouton); |
|
barreOutils.add(new SeparatorToolItem()); |
|
publicationsBoutonModifier = creerBoutonModifier(); |
barreOutils.add(publicationsBoutonModifier); |
|
barreOutils.add(new SeparatorToolItem()); |
|
publicationsBoutonSupprimer = creerBoutonSupprimer(); |
barreOutils.add(publicationsBoutonSupprimer); |
|
barreOutils.add(new SeparatorToolItem()); |
|
Button rafraichirBouton = creerBoutonRafraichir(); |
barreOutils.add(rafraichirBouton); |
|
barreOutils.add(new SeparatorToolItem()); |
|
publicationsSaisiesComboBox = creerComboBoxPublicationsSaisis(); |
barreOutils.add(publicationsSaisiesComboBox); |
|
Button ajouterPublicationSaisieBouton = creerBoutonAjouterPublicationSaisi(); |
barreOutils.add(ajouterPublicationSaisieBouton); |
|
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) { |
PublicationForm formulairePublication = new PublicationForm(); |
//formulairePersonne.setHeaderVisible(false); |
//formulairePersonne.setTopComponent(null); |
// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale |
//formulairePersonne.setBottomComponent(null); |
|
final FenetreForm fenetre = new FenetreForm(i18nC.publicationTitreFormAjout()); |
fenetre.add(formulairePublication); |
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) { |
Publication publicationSaisieSelectionnee = grille.getSelectionModel().getSelectedItem(); |
|
if (publicationSaisieSelectionnee == null) { |
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication()); |
} else { |
PublicationForm formulairePublication = new PublicationForm(); |
//formulairePublication.setHeaderVisible(false); |
//formulairePublication.setTopComponent(null); |
// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modale |
//formulairePersonne.setBottomComponent(null); |
formulairePublication.rafraichir(publicationSaisieSelectionnee); |
|
final FenetreForm fenetre = new FenetreForm(i18nC.publicationTitreFormModif()); |
fenetre.add(formulairePublication); |
fenetre.show(); |
} |
} |
}); |
return bouton; |
} |
|
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) { |
Publication publicationSaisieSelectionnee = grille.getSelectionModel().getSelectedItem(); |
if (publicationSaisieSelectionnee == null) { |
Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication()); |
} else { |
supprimerDansGrille(publicationSaisieSelectionnee); |
} |
} |
}); |
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<Publication> creerComboBoxPublicationsSaisis() { |
ListStore<Publication> publicationsSaisiesStore = new ListStore<Publication>(); |
|
ComboBox<Publication> comboBox = new ComboBox<Publication>(); |
comboBox.setWidth(400); |
comboBox.setEmptyText(i18nC.chercherPublicationSaisi()); |
comboBox.setTriggerAction(TriggerAction.ALL); |
comboBox.setEditable(true); |
comboBox.setDisplayField("fmt_nom_complet"); |
comboBox.setStore(publicationsSaisiesStore); |
comboBox.addKeyListener(new KeyListener() { |
public void componentKeyUp(ComponentEvent ce) { |
ComboBox<Publication> comboBox = (ComboBox<Publication>) ce.getComponent(); |
if (!ce.isNavKeyPress() && comboBox.getRawValue() != null && comboBox.getRawValue().length() > 0) { |
obtenirPublicationsSaisies(comboBox.getRawValue()); |
} |
} |
}); |
return comboBox; |
} |
|
private Button creerBoutonAjouterPublicationSaisi() { |
Button bouton = new Button(i18nC.ajouter()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
Publication publicationSaisieSelectionne = publicationsSaisiesComboBox.getValue(); |
ajouterDansGrille(publicationSaisieSelectionne); |
} |
}); |
return bouton; |
} |
|
private void ajouterDansGrille(Publication publication) { |
if (publication != null) { |
// Ajout de la personne ajoutée à la liste |
if (publication.getId() != null && !publication.getId().equals("")) { |
publicationsAjoutees.put(publication.getId(), publication); |
} |
|
// Définition de l'état |
publication.set("etat", ETAT_AJOUTE); |
|
// Ajout à la grille |
grille.getStore().insert(publication, 0); |
} |
} |
|
private void supprimerDansGrille(Publication publication) { |
if (publication != null) { |
// Ajout de la personne supprimée à la liste |
if ((publication.get("etat") == null || !publication.get("etat").equals(ETAT_AJOUTE)) && publication.getId() != null && !publication.getId().equals("")) { |
publicationsSupprimees.put(publication.getId(), publication); |
} |
|
// Suppression de l'enregistrement de la grille |
grille.getStore().remove(publication); |
} |
} |
|
private Grid<Publication> creerGrille() { |
ListStore<Publication> storeGrille = new ListStore<Publication>(); |
storeGrille.addListener(Store.Add, new Listener<StoreEvent<Publication>>() { |
public void handleEvent(StoreEvent<Publication> ce) { |
actualiserEtatBoutonsBarreOutils(); |
} |
}); |
storeGrille.addListener(Store.Remove, new Listener<StoreEvent<Publication>>() { |
public void handleEvent(StoreEvent<Publication> ce) { |
actualiserEtatBoutonsBarreOutils(); |
} |
}); |
|
RowNumberer pluginLigneNumero = new RowNumberer(); |
|
GridCellRenderer<Publication> infoBulle = new GridCellRenderer<Publication>() { |
@Override |
public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) { |
String valeur = (String) model.get(property); |
return "<span title='"+valeur+"'>" + valeur + "</span>"; |
} |
}; |
|
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>(); |
colonnes.add(pluginLigneNumero); |
ColumnConfig fmtAuteurColonne = new ColumnConfig("fmt_auteur", i18nC.publicationAuteurs(), 150); |
fmtAuteurColonne.setRenderer(infoBulle); |
colonnes.add(fmtAuteurColonne); |
ColumnConfig titreColonne = new ColumnConfig("titre", i18nC.publicationTitre(), 150); |
titreColonne.setRenderer(infoBulle); |
colonnes.add(titreColonne); |
colonnes.add(new ColumnConfig("collection", i18nC.publicationRevueCollection(), 75)); |
colonnes.add(new ColumnConfig("editeur", i18nC.publicationEditeur(), 75)); |
colonnes.add(new ColumnConfig("date_parution", i18nC.publicationDateParution(), 75)); |
colonnes.add(new ColumnConfig("indication_nvt", i18nC.publicationNvt(), 75)); |
colonnes.add(new ColumnConfig("fascicule", i18nC.publicationFascicule(), 75)); |
colonnes.add(new ColumnConfig("truk_pages", i18nC.publicationPage(), 50)); |
|
GridSelectionModel<Publication> modeleDeSelection = new GridSelectionModel<Publication>(); |
|
ColumnModel modeleDeColonnes = new ColumnModel(colonnes); |
|
Grid<Publication> grillePublications = new Grid<Publication>(storeGrille, modeleDeColonnes); |
grillePublications.setHeight("100%"); |
grillePublications.setBorders(true); |
grillePublications.setSelectionModel(modeleDeSelection); |
grillePublications.addPlugin(pluginLigneNumero); |
grillePublications.getView().setForceFit(true); |
grillePublications.setAutoExpandColumn("titre"); |
grillePublications.setStripeRows(true); |
grillePublications.setTrackMouseOver(true); |
|
return grillePublications; |
} |
|
public void actualiserEtatBoutonsBarreOutils() { |
// Activation des boutons si la grille contient un élément |
if (grille.getStore().getCount() > 0) { |
publicationsBoutonSupprimer.enable(); |
publicationsBoutonModifier.enable(); |
} |
// Désactivation des boutons si la grille ne contient plus d'élément |
if (grille.getStore().getCount() == 0) { |
publicationsBoutonSupprimer.disable(); |
publicationsBoutonModifier.disable(); |
} |
} |
|
public void rafraichir(Object nouvellesDonnees) { |
if (nouvellesDonnees instanceof Information) { |
Information info = (Information) nouvellesDonnees; |
rafraichirInformation(info); |
} else if (nouvellesDonnees instanceof PublicationListe) { |
PublicationListe listePublications = (PublicationListe) nouvellesDonnees; |
rafraichirPublicationListe(listePublications); |
} else if (nouvellesDonnees instanceof ValeurListe) { |
ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees; |
rafraichirValeurListe(listeValeurs); |
} else { |
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null); |
} |
} |
|
private void rafraichirValeurListe(ValeurListe listeValeurs) { |
if (listeValeurs.getId().equals(config.getListeId(""))) { |
Formulaire.rafraichirComboBox(listeValeurs, null, null); |
} else { |
GWT.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!", null); |
} |
} |
|
private void rafraichirPublicationListe(PublicationListe listePublications) { |
List<Publication> liste = listePublications.toList(); |
|
publicationsSaisiesComboBox.getStore().removeAll(); |
publicationsSaisiesComboBox.getStore().add(liste); |
publicationsSaisiesComboBox.expand(); |
} |
|
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_collection_a_publication")) { |
if (info.getDonnee(0) != null) { |
initialiser(); |
// TODO : passer à la méthode peupler un objet CollectionAPublicationListe et modifier le type de publications |
//publications = (CollectionAPublicationListe) info.getDonnee(0); |
peupler(); |
} |
} |
} |
|
private void peupler() { |
layout(); |
Info.display(i18nC.chargementPublication(), i18nC.ok()); |
} |
|
private void obtenirPublicationsSaisies(String nom) { |
mediateur.selectionnerPublicationParNomComplet(this, null, nom+"%"); |
} |
} |