Rev 1383 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.personne;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.tela_botanica.client.ComposantClass;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
import org.tela_botanica.client.composants.GrillePaginable;
import org.tela_botanica.client.composants.InfoLogger;
import org.tela_botanica.client.composants.pagination.ProxyCollectionAPublication;
import org.tela_botanica.client.composants.pagination.ProxyPublications;
import org.tela_botanica.client.composants.pagination.ProxyPublicationsAPersonne;
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.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.collection.CollectionAPersonne;
import org.tela_botanica.client.modeles.personne.Personne;
import org.tela_botanica.client.modeles.publication.Publication;
import org.tela_botanica.client.modeles.publication.PublicationAPersonne;
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
import org.tela_botanica.client.modeles.publication.PublicationListe;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilString;
import org.tela_botanica.client.vues.FenetreForm;
import org.tela_botanica.client.vues.Formulaire;
import org.tela_botanica.client.vues.FormulaireBarreValidation;
import org.tela_botanica.client.vues.FormulaireOnglet;
import org.tela_botanica.client.vues.publication.PublicationForm;
import com.extjs.gxt.ui.client.core.XTemplate;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelType;
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.Text;
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.Field;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.Validator;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
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.EditorGrid;
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.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.user.client.Window;
public class PersonneFormPublication extends FormulaireOnglet implements Rafraichissable {
private Personne personneSelectionnee = null;
private static int idGenere = 1;
private ContentPanel panneauPrincipal = null;
private ToolBar barreOutils = null;
private GrillePaginable<ModelData> grille;
private PublicationAPersonneListe publicationsAjoutees = null;
private PublicationAPersonneListe publicationsSupprimees = null;
private ChampComboBoxRechercheTempsReelPaginable publicationsSaisiesComboBox = null;
private Button publicationsBoutonSupprimer = null;
private Button publicationsBoutonModifier = null;
private ComboBox<Valeur> typeRelationCombo = null;
private List<Valeur> roles = null;
private PublicationAPersonneListe listePublicationsLiees = new PublicationAPersonneListe();
private FenetreForm fenetreFormulaire = null;
public PersonneFormPublication(Formulaire formulaireCourrant) {
initialiserOnglet(formulaireCourrant);
setId("publication");
setText(Mediateur.i18nC.personneOngletPublication());
setStyleAttribute("padding", "0");
initialiser();
panneauPrincipal = creerPanneauContenantGrille();
setLayout(new FitLayout());
barreOutils = creerBarreOutilsGrille();
panneauPrincipal.setTopComponent(barreOutils);
panneauPrincipal.setLayout(new FitLayout());
grille = creerGrille();
panneauPrincipal.add(grille);
add(panneauPrincipal);
}
private void initialiser() {
// Remise à zéro des modification dans la liste des auteurs
idGenere = 1;
publicationsAjoutees = new PublicationAPersonneListe();
publicationsSupprimees = new PublicationAPersonneListe();
}
public void mettreAJourPersonne() {
personneSelectionnee = ((PersonneForm) formulaire).personneSelectionnee;
//Boucle sur les role pour trouver les publication à personne
// FIXME !
//-------------------
// Author : Cyprien
//-------------------
// J'ai rajouté le test (toString()!="") parce que bien que l'objet personneSelectionne soit vide, (personneSelectionnee!=null) retournait
// tout de meme VRAI
// Mais le vrai problème, c'est que personneSelectionne puisse être nul ! personneSelectionne devrait toujours etre affecté à quelqu'un.
// De plus, il y a un étrange comportement lorsque l'on clique sur "modifier" une personne : je ne sais pas pourquoi mais les opérations
// s'effectuent deux fois au lieu d'une, c-a-d que le formulaire lance deux fois l'operation rafraichir au lieu d'une ... et l'opération
// rafraichir lance à son tour de nombreuses opérations qui en conséquence sont effectuées deux fois au lieu d'une
if ((roles != null) && (personneSelectionnee!=null) && (!personneSelectionnee.toString().equals(""))) {
mediateur.selectionnerPublicationAPersonne(this, null, personneSelectionnee.getId(), roles, null);
}
}
private ContentPanel creerPanneauContenantGrille() {
ContentPanel panneau = new ContentPanel();
panneau.setHeading(i18nC.personneOngletPublication()+" " + i18nC.personnePublication());
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 Text(" ou "));
publicationsSaisiesComboBox = creerComboBoxPublicationsSaisis();
barreOutils.add(publicationsSaisiesComboBox);
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);
return barreOutils;
}
private Button creerBoutonAjouter() {
Button bouton = new Button(i18nC.ajouter());
bouton.setIcon(Images.ICONES.vcardAjouter());
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
public 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>() {
public void componentSelected(ButtonEvent ce) {
ModelData publicationSaisieSelectionnee = grille.getGrille().getSelectionModel().getSelectedItem();
if (publicationSaisieSelectionnee == null) {
InfoLogger.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)) {
PublicationAPersonne publicationSaisiSelectionne = new PublicationAPersonne(grille.getGrille().getSelectionModel().getSelectedItem(), false);
publicationId = publicationSaisiSelectionne.getIdPublication();
}
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);
// FIXME : avec GXT-2.1.0 la redéfinition du bottom component ne marche plus. Nous le cachons et en créeons un dans la fenêtre.
panneauFormulaire.getBottomComponent().hide();
SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePublication(fenetre, formulairePublication);
final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
fenetre.setBottomComponent(barreValidation);
return formulairePublication;
}
private SelectionListener<ButtonEvent> creerEcouteurValidationFormulairePublication(final FenetreForm fenetre, final PublicationForm formulaire) {
SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
public 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>() {
public void componentSelected(ButtonEvent ce) {
PublicationAPersonne publicationSaisieSelectionnee = new PublicationAPersonne(grille.getGrille().getSelectionModel().getSelectedItem(), false);
if (publicationSaisieSelectionnee == null) {
InfoLogger.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>() {
public void componentSelected(ButtonEvent ce) {
actualiserGrille();
}
});
return bouton;
}
private void actualiserGrille() {
if (mode.equals(Formulaire.MODE_MODIFIER)) {
mediateur.selectionnerPublicationAPersonne(this, null, personneSelectionnee.getId(), "%", null);
} else {
grille.getStore().removeAll();
layout();
}
}
private ChampComboBoxRechercheTempsReelPaginable creerComboBoxPublicationsSaisis() {
ModelType modelTypePublications = new ModelType();
modelTypePublications.setRoot("publications");
modelTypePublications.setTotalName("nbElements");
modelTypePublications.addField("ccapu_id_personne");
modelTypePublications.addField("ccapu_id_publication");
modelTypePublications.addField("cpu_id_publication");
modelTypePublications.addField("cpu_fmt_nom_complet");
modelTypePublications.addField("cpu_titre");
modelTypePublications.addField("cpu_nom");
modelTypePublications.addField("cpu_fmt_auteur");
modelTypePublications.addField("cpu_indication_nvt");
modelTypePublications.addField("cpu_truk_pages");
modelTypePublications.addField("cpu_fascicule");
modelTypePublications.addField("cpu_date_parution");
modelTypePublications.addField("cpu_ce_truk_editeur");
modelTypePublications.addField("cpu_ce_projet");
modelTypePublications.addField("cpu_collection");
String displayNamePublications = "cpu_fmt_nom_complet";
ProxyPublications<ModelData> proxyPublications= new ProxyPublications<ModelData>(null);
final ChampComboBoxRechercheTempsReelPaginable publicationsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyPublications, modelTypePublications, displayNamePublications);
publicationsCombo.getCombo().setTabIndex(tabIndex++);
publicationsCombo.getCombo().setForceSelection(true);
publicationsCombo.getCombo().setValidator(new Validator() {
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (publicationsCombo.getStore().findModel("cpu_fmt_nom_complet", field.getRawValue()) == null) {
String contenuBrut = field.getRawValue();
field.setValue(null);
field.setRawValue(contenuBrut);
retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
}
return retour;
}
});
publicationsCombo.getCombo().addListener(Events.Select, new Listener<BaseEvent>() {
public void handleEvent(BaseEvent be) {
if (publicationsSaisiesComboBox.getValeur() instanceof ModelData) {
Debug.log("modeldata = "+publicationsSaisiesComboBox.getValeur().getProperties().toString());
Publication publicationSaisieSelectionne = new Publication(publicationsSaisiesComboBox.getValeur(), false);
Debug.log("publicationSaisieSelectionne="+publicationSaisieSelectionne.toString());
ajouterDansGrille(publicationSaisieSelectionne);
publicationsSaisiesComboBox.getCombo().setValue(null);
}
}
});
return publicationsCombo;
}
private void ajouterDansGrille(Publication publication) {
ajouterDansGrille(publication, 0);
}
private void ajouterDansGrille(Publication publication, int index) {
if (publication != null) {
if (!listePublicationsLiees.containsKey(publication.getId())) {
PublicationAPersonne publicationLiee = new PublicationAPersonne(false);
publicationLiee.setPersonne(personneSelectionnee);
publicationLiee.setPublicationLiee(publication);
publicationLiee.setIdPublication(publication.getId());
publicationLiee.set("_etat_", aDonnee.ETAT_AJOUTE);
listePublicationsLiees.put(publication.getId(), publicationLiee);
Debug.log("insertion de : "+publicationLiee.toString());
// Ajout à la grille
grille.getGrille().stopEditing();
grille.getGrille().getStore().insert(publicationLiee, 0);
grille.getGrille().startEditing(index, 0);
grille.getGrille().getSelectionModel().select(index, false);
} else {
InfoLogger.display("Information", "La publication choisie existe déjà dans la liste.");
}
}
}
/**
* Met à jour la grille avec les informations contenus dans la variable listePublicationsLiees
*/
private void mettreAJourGrille() {
grille.getStore().removeAll();
grille.getStore().add(listePublicationsLiees.toList());
}
private void supprimerDansGrille(PublicationAPersonne publicationLiee) {
if (publicationLiee != null) {
// Ajout de la personne supprimée à la liste
if ((publicationLiee.get("_etat_").equals("") || !publicationLiee.get("_etat_").equals(aDonnee.ETAT_AJOUTE))
&& publicationLiee.getId() != null
&& !publicationLiee.getId().equals("")) {
publicationsSupprimees.put("id"+idGenere++, publicationLiee);
}
// Suppression de l'enregistrement de la grille
grille.getStore().remove(publicationLiee);
}
}
private GrillePaginable<ModelData> creerGrille() {
GrillePaginable<ModelData> grillePublications = null;
// ModelType
ModelType modelTypePublicationAPersonne = new ModelType();
modelTypePublicationAPersonne.setRoot("publicationsAPersonne");
modelTypePublicationAPersonne.setTotalName("nbElements");
modelTypePublicationAPersonne.addField("cpuap_id_personne");
modelTypePublicationAPersonne.addField("cpuap_id_publication");
modelTypePublicationAPersonne.addField("cpuap_id_role");
modelTypePublicationAPersonne.addField("cpu_id_publication");
modelTypePublicationAPersonne.addField("cpu_fmt_auteur");
modelTypePublicationAPersonne.addField("cpu_titre");
modelTypePublicationAPersonne.addField("cpu_collection");
modelTypePublicationAPersonne.addField("cpu_ce_truk_editeur");
modelTypePublicationAPersonne.addField("cpu_date_parution");
modelTypePublicationAPersonne.addField("cpu_fascicule");
modelTypePublicationAPersonne.addField("cpu_truk_pages");
modelTypePublicationAPersonne.addField("cpu_indication_nvt");
// Proxy
ProxyPublicationsAPersonne<ModelData> proxyPublicationsAPersonne = new ProxyPublicationsAPersonne<ModelData>(null, null);
// Colonnes
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
RowNumberer numeroPlugin = new RowNumberer();
numeroPlugin.setHeader("#");
XTemplate infoTpl = XTemplate.create("<p>"+
"<span style='font-weight:bold;'>"+i18nC.publicationAuteurs()+" :</span> {cpu_fmt_auteur}<br />"+
"<span style='font-weight:bold;'>"+i18nC.publicationTitre()+" :</span> {cpu_titre}<br />"+
"<span style='font-weight:bold;'>"+i18nC.publicationRevueCollection()+" :</span> {cpu_collection}<br />"+
"<span style='font-weight:bold;'>"+i18nC.publicationEditeur()+" :</span> {_editeur_}"+
"</p>");
RowExpander expansionPlugin = new RowExpander();
expansionPlugin.setTemplate(infoTpl);
colonnes.add(expansionPlugin);
colonnes.add(numeroPlugin);
colonnes.add(creerColonneTypeRelation());
colonnes.add(new ColumnConfig("cpu_fmt_auteur", i18nC.publicationAuteurs(), 150));
colonnes.add(new ColumnConfig("cpu_titre", i18nC.publicationTitre(), 150));
colonnes.add(new ColumnConfig("cpu_collection", i18nC.publicationRevueCollection(), 75));
colonnes.add(creerColonneEditeur());
colonnes.add(creerColonneAnneePublication());
colonnes.add(new ColumnConfig("cpu_indication_nvt", i18nC.publicationNvt(), 75));
colonnes.add(new ColumnConfig("cpu_fascicule", i18nC.publicationFascicule(), 75));
colonnes.add(new ColumnConfig("cpu_truk_pages", i18nC.publicationPage(), 50));
HashMap<String, String> virtualFields = new HashMap<String, String>();
virtualFields.put("_editeur_", "cpu_ce_truk_editeur");
virtualFields.put("_annee_", "cpu_date_parution");
virtualFields.put("_role_", "cpuap_id_role");
virtualFields.put("_etat_", "");
// Modele de selection
GridSelectionModel<ModelData> modeleDeSelection = new GridSelectionModel<ModelData>();
ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
modeleDeColonnes.getColumn(0).setWidget(Images.ICONES.information().createImage(), "Info");
// Grille
grillePublications = new GrillePaginable<ModelData>(modelTypePublicationAPersonne, virtualFields, proxyPublicationsAPersonne, colonnes, modeleDeColonnes);
grillePublications.getGrille().setBorders(true);
grillePublications.getGrille().setSelectionModel(modeleDeSelection);
grillePublications.getGrille().addPlugin(expansionPlugin);
grillePublications.getGrille().addPlugin(numeroPlugin);
grillePublications.getGrille().getView().setForceFit(true);
grillePublications.getGrille().setAutoExpandColumn("titre");
grillePublications.getGrille().setStripeRows(true);
grillePublications.getGrille().setTrackMouseOver(true);
// Rajouter des écouteurs
grillePublications.getStore().addListener(Store.Add, new Listener<StoreEvent<ModelData>>() {
public void handleEvent(StoreEvent<ModelData> ce) {
actualiserEtatBoutonsBarreOutils();
}
});
grillePublications.getStore().addListener(Store.Remove, new Listener<StoreEvent<ModelData>>() {
public void handleEvent(StoreEvent<ModelData> ce) {
actualiserEtatBoutonsBarreOutils();
}
});
grillePublications.getStore().addListener(Store.Update, new Listener<StoreEvent<ModelData>>() {
public void handleEvent(StoreEvent<ModelData> ce) {
if (ce.getModel().get("_role_") != null && ce.getRecord().isModified("_role_") && ce.getModel().get("_etat_") != null && !ce.getModel().get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
ce.getModel().set("_etat_", aDonnee.ETAT_MODIFIE);
}
}
});
return grillePublications;
}
private ColumnConfig creerColonneEditeur() {
GridCellRenderer<ModelData> editeurRendu = new GridCellRenderer<ModelData>() {
public String render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ModelData> store, Grid<ModelData> grid) {
PublicationAPersonne pap = new PublicationAPersonne(model, true);
String editeur = pap.getPublicationLiee().getNomEditeur();
model.set("_editeur_", editeur);
return editeur;
}
};
ColumnConfig editeurColonne = new ColumnConfig("_editeur_", Mediateur.i18nC.publicationEditeur(), 135);
editeurColonne.setRenderer(editeurRendu);
return editeurColonne;
}
private ColumnConfig creerColonneAnneePublication() {
GridCellRenderer<ModelData> datePublicationRendu = new GridCellRenderer<ModelData>() {
public String render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ModelData> store, Grid<ModelData> grid) {
PublicationAPersonne pap = new PublicationAPersonne(model, true);
String annee = pap.getPublicationLiee().getAnneeParution();
model.set("_annee_", annee);
return annee;
}
};
ColumnConfig datePublicationColonne = new ColumnConfig("_annee_", Mediateur.i18nC.publicationDateParution(), 75);
datePublicationColonne.setRenderer(datePublicationRendu);
return datePublicationColonne;
}
private ColumnConfig creerColonneTypeRelation() {
typeRelationCombo = new ComboBox<Valeur>();
typeRelationCombo.setForceSelection(true);
typeRelationCombo.setTriggerAction(TriggerAction.ALL);
typeRelationCombo.setDisplayField("nom");
typeRelationCombo.setStore(new ListStore<Valeur>());
typeRelationCombo.setEditable(false);
typeRelationCombo.addStyleName(ComposantClass.OBLIGATOIRE);
typeRelationCombo.addListener(Events.Select, Formulaire.creerEcouteurChampObligatoire());
CellEditor editeurRelation = new CellEditor(typeRelationCombo) {
public Object preProcessValue(Object valeur) {
Valeur retour = null;
if (valeur != null ) {
if (typeRelationCombo.getStore().findModel("nom", valeur.toString()) != null) {
retour = typeRelationCombo.getStore().findModel("nom", valeur.toString());
} else if (typeRelationCombo.getStore().findModel("abr", valeur.toString()) != null) {
retour = typeRelationCombo.getStore().findModel("abr", valeur.toString());
} else if (typeRelationCombo.getStore().findModel("id_valeur", valeur.toString()) != null) {
retour = typeRelationCombo.getStore().findModel("id_valeur", valeur.toString());
}
}
return retour;
}
public Object postProcessValue(Object valeur) {
String retour = null;
if (valeur != null ) {
if (valeur instanceof Valeur) {
Valeur valeurOntologie = (Valeur) valeur;
retour = valeurOntologie.getId();
}
}
return retour;
}
};
GridCellRenderer<ModelData> relationRendu = new GridCellRenderer<ModelData>() {
public String render(ModelData modele, String property, ColumnData config, int rowIndex, int colIndex, ListStore<ModelData> store, Grid<ModelData> grille) {
// Gestion du texte afficher dans la cellule
String role = modele.get("_role_");
String roleNom = "";
if (typeRelationCombo.getStore() != null && role!=null && role.matches("[0-9]+")) {
roleNom = typeRelationCombo.getStore().findModel("id_valeur", role).getNom();
role = typeRelationCombo.getStore().findModel("id_valeur", role).getId();
}
modele.set("_role_", role);
return roleNom;
}
};
ColumnConfig typeRelationColonne = new ColumnConfig("_role_", i18nC.typeRelationPersonne(), 75);
typeRelationColonne.setEditor(editeurRelation);
typeRelationColonne.setRenderer(relationRendu);
return typeRelationColonne;
}
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 ValeurListe)
{
ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
if (listeValeurs.getId().equals(config.getListeId("relationPersonnePublication"))) {
Formulaire.rafraichirComboBox(listeValeurs, typeRelationCombo);
roles = listeValeurs.toList();
mettreAJourPersonne();
}
}
else if (nouvellesDonnees instanceof PublicationListe)
{
/*PublicationListe listePublications = (PublicationListe) nouvellesDonnees;
rafraichirPublicationListe(listePublications);*/
}
else if (nouvellesDonnees instanceof PublicationAPersonneListe)
{
PublicationAPersonneListe papl = (PublicationAPersonneListe) nouvellesDonnees;
List<PublicationAPersonne> paplListe = papl.toList();
if (paplListe.size()>0){
Iterator<PublicationAPersonne> it = paplListe.iterator();
while (it.hasNext()) {
PublicationAPersonne pap = it.next();
listePublicationsLiees.put(pap.getPublicationLiee().getId(), pap);
}
mettreAJourGrille();
}
}
else
{
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
}
}
/*
private void rafraichirPublicationListe(PublicationListe listePublications) {
publicationsSaisiesComboBox.getStore().removeAll();
publicationsSaisiesComboBox.getStore().add(listePublications.toList());
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("personne")) {
mettreAJourPersonne();
((ProxyPublicationsAPersonne)grille.getProxy()).setPersonneId(personneSelectionnee.getId());
grille.reload();
} else if (type.equals("publication_liees")) {
if (info.getDonnee(0) != null) {
initialiser();
personneSelectionnee.setPublicationsLiees((PublicationAPersonneListe) info.getDonnee(0));
peupler();
}
} else if (type.equals("publication_modifiee")) {
if (info.getDonnee(0) != null) {
Publication publication = (Publication) info.getDonnee(0);
ModelData publicationDansGrille = grille.getStore().findModel("cpu_id_publication", publication.getId());
int index = grille.getStore().indexOf(publicationDansGrille);
grille.getStore().remove(publicationDansGrille);
ajouterDansGrille(publication, index);
}
} else if (type.equals("publication_ajoutee")) {
if (info.getDonnee(0) != null) {
Publication publication = (Publication) info.getDonnee(0);
ajouterDansGrille(publication);
}
} else if (type.equals("ajout_publication_a_personne")) {
InfoLogger.display("Ajout publication à personne", info.getDonnees().toString());
} else if (type.equals("suppression_publication_a_personne")) {
InfoLogger.display("Suppression publication à personne", info.getMessages().toString());
} else {
GWT.log(Mediateur.i18nM.erreurRafraichir(info.getClass(), this.getClass()), null);
}
}
public void peupler() {
grille.getStore().removeAll();
grille.getStore().add(personneSelectionnee.getPublicationsLiees().toList());
layout();
InfoLogger.display(i18nC.chargementPublication(), i18nC.ok());
}
public void collecter() {
if (etreAccede()) {
int nbrePublication = grille.getStore().getCount();
for (int i = 0; i < nbrePublication; i++) {
ModelData publicationLiee = grille.getStore().getAt(i);
PublicationAPersonne pap = new PublicationAPersonne(publicationLiee, false);
if (publicationLiee.get("_etat_") != null) {
if (publicationLiee.get("_etat_").equals(aDonnee.ETAT_MODIFIE)) {
// Comme il est impossible de modifier les relations nous supprimons l'ancien enregistrement et ajoutons un nouveau avec le nouveau id_role
publicationsSupprimees.put("id"+idGenere++, pap);
PublicationAPersonne relationAAjouter = pap;
publicationsAjoutees.put("id"+idGenere++, relationAAjouter);
}
if (publicationLiee.get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
publicationsAjoutees.put("id"+idGenere++, pap);
}
// Initialisation de la grille
publicationLiee.set("_etat_", "");
}
}
grille.getStore().commitChanges();
}
}
public List verifier() {
List lstMessageErreur = new LinkedList<String>();
//Vérifier les roles
List<ModelData> listePublis = grille.getStore().getModels();
Iterator<ModelData> itPublis = listePublis.iterator();
while (itPublis.hasNext()) {
ModelData publi = itPublis.next();
if (UtilString.isEmpty((String) publi.get("_role_"))) {
lstMessageErreur.add("Vous devez choisir le rôle de la relation " + (grille.getStore().indexOf(publi) + 1));
}
}
return lstMessageErreur;
}
public void soumettre() {
if (mode.equals(Formulaire.MODE_MODIFIER)) {
if (publicationsAjoutees.size() == 0 && publicationsSupprimees.size() == 0) {
InfoLogger.display("Modification des publications liées", "Rien n'a été enregistré car le formulaire n'a pas été modifié.");
} else {
// Ajout des relations PublicationAPersonne
if (publicationsAjoutees.size() != 0) {
//TODO : utiliser le role d'une liste déroulante
mediateur.ajouterPublicationAPersonne(this, publicationsAjoutees, personneSelectionnee.getId(), null, null);
}
// Suppression des relations PublicationAPersonne
if (publicationsSupprimees.size() != 0) {
mediateur.supprimerPublicationAPersonne(this, publicationsSupprimees);
}
}
}
}
private void obtenirPublicationsSaisies(String nom) {
mediateur.selectionnerPublicationParNomComplet(this, null, "%"+nom+"%");
}
}