Rev 823 | 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.Publication;import org.tela_botanica.client.modeles.PublicationListe;import org.tela_botanica.client.modeles.ValeurListe;import com.extjs.gxt.ui.client.Style.HorizontalAlignment;import com.extjs.gxt.ui.client.core.XTemplate;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.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.FormPanel;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.RowExpander;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.shared.GwtEvent;import com.google.gwt.user.client.Event;import com.google.gwt.user.client.ui.Image;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 Button ajouterPublicationSaisieBouton = null;private FenetreForm fenetreFormulaire = 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 auteurspublicationsAjoutees = new PublicationListe();publicationsSupprimees = new PublicationListe();// Actualisation de l'état des boutons de la barre d'outilsactualiserEtatBoutonsBarreOutils();}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);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>() {@Overridepublic void componentSelected(ButtonEvent ce) {fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);fenetreFormulaire.show();}});return bouton;}private Button creerBoutonModifier() {Button bouton = new Button(i18nC.modifier());bouton.setIcon(Images.ICONES.vcardModifier());bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent ce) {Publication publicationSaisieSelectionnee = grille.getSelectionModel().getSelectedItem();if (publicationSaisieSelectionnee == null) {Info.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());} else {fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);fenetreFormulaire.show();}}});return bouton;}private FenetreForm creerFenetreModaleAvecFormulairePersonne(String mode) {String publicationId = null;if (mode.equals(Formulaire.MODE_MODIFIER)) {Publication publicationSaisiSelectionne = grille.getSelectionModel().getSelectedItem();publicationId = publicationSaisiSelectionne.getId();}final FenetreForm fenetre = new FenetreForm("");final PublicationForm formulaire = creerFormulairePublication(fenetre, publicationId);fenetre.add(formulaire);return fenetre;}private PublicationForm creerFormulairePublication(final FenetreForm fenetre, final String publicationId) {PublicationForm formulairePublication = new PublicationForm(mediateur, publicationId, this);FormPanel panneauFormulaire = formulairePublication.getFormulaire();fenetre.setHeading(panneauFormulaire.getHeading());panneauFormulaire.setHeaderVisible(false);panneauFormulaire.setTopComponent(null);// TODO : gérer la barre d'outil avec des évènements spécifique au contexte de fenêtre modaleSelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePublication(fenetre, formulairePublication);final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);panneauFormulaire.setBottomComponent(barreValidation);return formulairePublication;}private SelectionListener<ButtonEvent> creerEcouteurValidationFormulairePublication(final FenetreForm fenetre, final PublicationForm formulaire) {SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent ce) {String code = ((Button) ce.getComponent()).getData("code");if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {if (formulaire.soumettreFormulaire()) {fenetre.hide();}} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {formulaire.soumettreFormulaire();} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {fenetre.hide();} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {fenetreFormulaire.hide();fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(formulaire.mode);fenetreFormulaire.show();}}};return ecouteur;}private Button creerBoutonSupprimer() {Button bouton = new Button(i18nC.supprimer());bouton.setIcon(Images.ICONES.vcardSupprimer());bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic 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>() {@Overridepublic 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) {if (publicationsSaisiesComboBox.getRawValue() != null && publicationsSaisiesComboBox.getRawValue().length() > 0) {if (!ce.isNavKeyPress()) {obtenirPublicationsSaisies(publicationsSaisiesComboBox.getRawValue());}}}});comboBox.addListener(Events.Select, new Listener<BaseEvent>() {@Overridepublic void handleEvent(BaseEvent be) {if (publicationsSaisiesComboBox.getValue() instanceof Publication) {ajouterPublicationSaisieBouton.fireEvent(Events.Select);}}});return comboBox;}private Button creerBoutonAjouterPublicationSaisi() {Button bouton = new Button(i18nC.ajouter());bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent ce) {Publication publicationSaisieSelectionne = publicationsSaisiesComboBox.getValue();ajouterDansGrille(publicationSaisieSelectionne);publicationsSaisiesComboBox.setValue(null);}});return bouton;}private void ajouterDansGrille(Publication publication) {if (publication != null) {// Ajout de la personne ajoutée à la listeif (publication.getId() != null && !publication.getId().equals("")) {publicationsAjoutees.put(publication.getId(), publication);}// Définition de l'étatpublication.set("etat", ETAT_AJOUTE);// Ajout à la grillegrille.getStore().insert(publication, 0);grille.getSelectionModel().select(0, false);}}private void supprimerDansGrille(Publication publication) {if (publication != null) {// Ajout de la personne supprimée à la listeif ((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 grillegrille.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 numeroPlugin = new RowNumberer();numeroPlugin.setHeader("#");XTemplate infoTpl = XTemplate.create("<p>"+"<span style='font-weight:bold;'>"+i18nC.publicationAuteurs()+" :</span> {fmt_auteur}<br />"+"<span style='font-weight:bold;'>"+i18nC.publicationTitre()+" :</span> {titre}<br />"+"<span style='font-weight:bold;'>"+i18nC.publicationRevueCollection()+" :</span> {collection}<br />"+"<span style='font-weight:bold;'>"+i18nC.publicationEditeur()+" :</span> {_editeur_}"+"</p>");RowExpander expansionPlugin = new RowExpander();expansionPlugin.setTemplate(infoTpl);List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();colonnes.add(expansionPlugin);colonnes.add(numeroPlugin);colonnes.add(new ColumnConfig("fmt_auteur", i18nC.publicationAuteurs(), 150));colonnes.add(new ColumnConfig("titre", i18nC.publicationTitre(), 150));colonnes.add(new ColumnConfig("collection", i18nC.publicationRevueCollection(), 75));colonnes.add(PublicationListeVue.creerColonneEditeur());colonnes.add(PublicationListeVue.creerColonneAnneePublication());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);modeleDeColonnes.getColumn(0).setWidget(Images.ICONES.information().createImage(), "Info");Grid<Publication> grillePublications = new Grid<Publication>(storeGrille, modeleDeColonnes);grillePublications.setHeight("100%");grillePublications.setBorders(true);grillePublications.setSelectionModel(modeleDeSelection);grillePublications.addPlugin(expansionPlugin);grillePublications.addPlugin(numeroPlugin);grillePublications.getView().setForceFit(true);grillePublications.getView().setAutoFill(true);grillePublications.setAutoExpandColumn("titre");grillePublications.setStripeRows(true);grillePublications.setTrackMouseOver(true);return grillePublications;}public void actualiserEtatBoutonsBarreOutils() {// Activation des boutons si la grille contient un élémentif (grille.getStore().getCount() > 0) {publicationsBoutonSupprimer.enable();publicationsBoutonModifier.enable();}// Désactivation des boutons si la grille ne contient plus d'élémentif (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 {GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), 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();}} else if (type.equals("publication_modifiee")) {if (info.getDonnee(0) != null) {Publication publication = (Publication) info.getDonnee(0);Publication publicationDansGrille = grille.getStore().findModel("id_publication", publication.getId());int index = grille.getStore().indexOf(publicationDansGrille);grille.getStore().remove(publicationDansGrille);grille.getStore().insert(publication, index);grille.getStore().commitChanges();}} else if (type.equals("publication_ajoutee")) {if (info.getDonnee(0) != null) {Publication publication = (Publication) info.getDonnee(0);grille.getStore().add(publication);grille.getStore().commitChanges();}} else {GWT.log(Mediateur.i18nM.erreurRafraichir(info.getClass(), this.getClass()), null);}}private void peupler() {layout();Info.display(i18nC.chargementPublication(), i18nC.ok());}private void obtenirPublicationsSaisies(String nom) {mediateur.selectionnerPublicationParNomComplet(this, null, nom+"%");}}