Subversion Repositories eFlore/Applications.coel

Compare Revisions

Ignore whitespace Rev 1321 → Rev 1322

/trunk/src/org/tela_botanica/client/vues/publication/PublicationForm.java
11,7 → 11,6
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.MenuApplicationId;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.personne.Personne;
import org.tela_botanica.client.modeles.personne.PersonneListe;
22,7 → 21,7
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
import org.tela_botanica.client.modeles.structure.Structure;
import org.tela_botanica.client.modeles.structure.StructureListe;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Pattern;
import org.tela_botanica.client.util.UtilArray;
import org.tela_botanica.client.util.UtilString;
33,7 → 32,6
 
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.Style.SortDir;
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;
44,7 → 42,6
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.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.MessageBox;
58,16 → 55,10
import com.extjs.gxt.ui.client.widget.form.TextField;
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.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
77,22 → 68,23
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 PublicationForm extends Formulaire implements Rafraichissable {
//Variables de classe:
// Relatives à la publication
private Publication publication;
// Relatives aux auteurs
private LayoutContainer auteursFieldset = null;
private PersonneListe auteursInitialListe = null;
private static boolean publicationAPersonneListeChargementOk = false;
private PersonneListe auteursAjoutes = null;
private PersonneListe auteursSupprimes = null;
private LayoutContainer auteursFieldset = null;
private ComboBox<Projet> projetsCombo = null;
private ArrayList<ComboBox<Personne>> auteurComboboxListe = null;
private ListStore<Personne> auteursStorePartage = null;
private static boolean auteurStorePartageChargementOk = false;
private FieldSet generalitesFieldset = null;
private TextField<String> titreChp = null;
101,35 → 93,22
private FieldSet editionFieldset = null;
private ComboBox<Structure> editeurCombobox = null;
private static boolean editeursOk = false;
private TextField<String> datePublicationChp = null;
private TextField<String> tomeChp = null;
private TextField<String> fasciculeChp = null;
private TextField<String> pagesChp = null;
boolean auteursAffiches = false;
private static boolean formulaireValideOk = false;
private static boolean publicationValideOk = false;
private static boolean auteursValideOk = false;
private static boolean publicationOk = false;
private static boolean attenteAjoutAuteursOk = true;
private static boolean attenteSuppressionAuteursOk = true;
private LayoutContainer zoneHaut, zoneBas;
private static int idGenere = 1;
private ToolBar barreOutils = null;
private EditorGrid<Personne> grille;
private PersonneListe personnesAjoutees = null;
private PersonneListe personnesSupprimees = null;
private ComboBox<Personne> personnesSaisiesComboBox = null;
private Button personnesBoutonSupprimer = null;
private Button personnesBoutonModifier = null;
private ComboBox<Valeur> typeRelationCombo = null;
private List<Valeur> roles = null;
private PersonneListe listePersonne = new PersonneListe();
private FenetreForm fenetreFormulaire = null;
private Sequenceur sequenceur;
public PublicationForm(Mediateur mediateurCourrant, String publicationId) {
initialiserPublicationForm(mediateurCourrant, publicationId);
141,21 → 120,19
}
private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
auteursInitialListe = new PersonneListe();
initialiserValidation();
initialiserAffichageAuteurs();
sequenceur = new Sequenceur();
publication = new Publication();
publication.setId(publicationId);
auteursInitialListe = new PersonneListe();
initialiserAuteurs(); // Crée les listes d'auteurs ajoutés et supprimés
String modeDeCreation = (UtilString.isEmpty(publication.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
String modeDeCreation = (UtilString.isEmpty(publicationId) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
panneauFormulaire.setLayout(new RowLayout());
panneauFormulaire.setStyleAttribute("padding", "0");
zoneHaut = new LayoutContainer(new FitLayout());
zoneBas = new LayoutContainer(new FlowLayout());
panneauFormulaire.add(zoneHaut, new RowData(1, 0.3));
panneauFormulaire.add(zoneBas, new RowData(1, 0.5));
panneauFormulaire.setScrollMode(Scroll.AUTO);
171,8 → 148,9
zoneBas.add(editionFieldset);
if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
mediateurCourrant.selectionnerPublication(this, publicationId);
mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR);
mediateurCourrant.selectionnerPublication(this, publicationId, sequenceur);
mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR, sequenceur);
sequenceur.empilerRafraichissement(this, new Information("chargement_modifier_ok"));
}
}
482,7 → 460,7
if (mode.equals(Formulaire.MODE_MODIFIER)) {
titre = i18nC.publicationTitreFormModif();
if (publication != null) {
titre += " - "+i18nC.id()+": "+publication.getId()+" - "+publication.getObjetDeLaPublication();
titre += " - "+i18nC.id()+": "+publication.getId()+" - "+publication.getTitre();
}
}
panneauFormulaire.setHeading(titre);
507,46 → 485,6
auteursFieldset.layout();
}
public void creerChampAuteurEtBoutonSupprimer(Personne auteur) {
/*final HorizontalPanel panneauHorizontal = new HorizontalPanel();
 
LayoutContainer panneauChampTxt = new LayoutContainer();
panneauChampTxt.setLayout(new FormLayout());
 
final ComboBox<Personne> auteursSaisisComboBox = creerComboBoxAuteursSaisis();
if (auteur != null) {
auteursSaisisComboBox.setValue(auteur);
auteursSaisisComboBox.validate();
}
auteurComboboxListe.add(auteursSaisisComboBox);
auteursSaisisComboBox.setFieldLabel(i18nC.publicationAuteurSingulier()+" "+auteurComboboxListe.size());
panneauChampTxt.add(auteursSaisisComboBox, new FormData(300, 0));
panneauHorizontal.add(panneauChampTxt);
Button supprimerAuteurBouton = new Button();
supprimerAuteurBouton.setIcon(Images.ICONES.supprimer());
supprimerAuteurBouton.setToolTip(i18nC.supprimer());
supprimerAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent be) {
auteurComboboxListe.remove(auteursSaisisComboBox);
conteneurChamps.remove(panneauHorizontal);
int numeroAuteurs = 1;
for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) {
it.next().setFieldLabel(i18nC.publicationAuteurSingulier()+" "+numeroAuteurs);
numeroAuteurs++;
}
 
auteursFieldset.layout();
}
});
panneauHorizontal.add(supprimerAuteurBouton);
 
conteneurChamps.add(panneauHorizontal);
auteursFieldset.layout();*/
}
private ComboBox<Personne> creerComboBoxAuteursSaisis() {
ListStore<Personne> auteursStore = new ListStore<Personne>();
auteursStore.add(auteursStorePartage.getModels());
600,7 → 538,7
projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
projetsCombo.addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
generalitesFieldset.add(projetsCombo, new FormData(450, 0));
mediateur.selectionnerProjet(this, null);
mediateur.selectionnerProjet(this, null, null);
titreChp = new TextField<String>();
titreChp.setName("cpu");
664,7 → 602,8
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof Publication) {
// Si on a reçu les details d'une publication
rafraichirPublication((Publication) nouvellesDonnees);
publication = (Publication) nouvellesDonnees;
//rafraichirPublication((Publication) nouvellesDonnees);
} else if (nouvellesDonnees instanceof StructureListe) {
// Si on a reçu une liste des editeurs
rafraichirListeEditeurs((StructureListe) nouvellesDonnees);
679,39 → 618,10
} else {
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
}
synchronisation();
}
private void synchronisation() {
// Respecter l'ordre et faire attention à la réinitialisation des jetons
// 1. gestion des auteurs (Modif ou Ajout)
// 2. peupler le formulaire (Modif)
// 3. initialisation de la gestion des auteurs ajoutés/supprimés (Modif)
// 4. valider le formulaire (Modif ou Ajout)
if (etrePretAAfficherAuteurs()) {
afficherAuteurs();
initialiserAffichageAuteurs();
}
if (etrePretAPeupler()) {
peuplerFormulaire();
genererTitreFormulaire();
initialiserPeupler();
}
if (avoirAuteursMiseAJourCorrectement()) {
miseAJourAuteursInitialListe();
initialiserAuteurs();
auteursValideOk = true;
}
if (etreValide()) {
initialiserValidation();
repandreRafraichissement();
controlerFermeture();
}
}
private void miseAJourAuteursInitialListe() {
728,13 → 638,7
}
}
private void rafraichirPublication(Publication publi) {
publicationOk = true;
publication = publi;
}
private void rafraichirListeEditeurs(StructureListe editeurs) {
editeursOk = true;
editeurCombobox.getStore().removeAll();
editeurCombobox.getStore().add((List<Structure>) editeurs.toList());
}
748,45 → 652,31
grille.getStore().removeAll();
grille.getStore().add(auteursInitialListe.toList());
publicationAPersonneListeChargementOk = true;
layout();
}
private void rafraichirInformation(Information info) {
private void rafraichirInformation(Information info) {
String type = info.getType();
if (type.equals("ajout_publication") || type.equals("modif_publication")) {
// On vient de soumettre le formulaire, on doit passer à l'étape suivante:
// Validation des auteurs ou fermeture du formulaire
publicationValideOk = true;
if (mode.equals(Formulaire.MODE_AJOUTER)) {
if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
String publicationId = (String) info.getDonnee(0);
if (publicationId.matches("[0-9]+")) {
publication.setId(publicationId);
}
}
attenteAjoutAuteursOk = true;
}
if (type.equals("publication_enregistree")) {
// la publication vien d'etre enregistrée, on soumet les auteurs
soumettreAuteurs();
//System.out.println("pub enregistrée");
} else if (type.equals("auteurs_enregistres")) {
miseAJourAuteursInitialListe();
initialiserAuteurs();
repandreRafraichissement();
controlerFermeture();
} else if (type.equals("chargement_modifier_ok")) {
peuplerFormulaire();
genererTitreFormulaire();
}
if (info.getType().equals("liste_personne")) {
PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0);
/*List<Personne> liste = listePersonneAuteur.toList();
auteursStorePartage.removeAll();
auteursStorePartage.add(liste);
auteurStorePartageChargementOk = true;*/
ListStore store = personnesSaisiesComboBox.getStore();
store.removeAll();
store.add(listePersonneAuteur.toList());
} else if (info.getType().equals("ajout_publication_a_personne")) {
attenteAjoutAuteursOk = false;
} else if (info.getType().equals("suppression_publication_a_personne")) {
attenteSuppressionAuteursOk = false;
} else if (info.getType().equals("modif_publication")) {
InfoLogger.display("Modification d'une publication", info.toString());
} else if (info.getType().equals("ajout_publication")) {
799,75 → 689,9
}
}
private boolean avoirAuteursMiseAJourCorrectement() {
boolean ok = false;
if (attenteAjoutAuteursOk == false && attenteSuppressionAuteursOk == false) {
ok = true;
}
return ok;
}
private void afficherAuteurs() {
if (mode.equals(Formulaire.MODE_AJOUTER)) {
creerChampAuteurEtBoutonSupprimer(null);
} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
Iterator<String> itap = auteursInitialListe.keySet().iterator();
while (itap.hasNext()) {
creerChampAuteurEtBoutonSupprimer(auteursInitialListe.get(itap.next()));
}
}
auteursAffiches = true;
}
 
private void initialiserAffichageAuteurs() {
auteurStorePartageChargementOk = false;
publicationAPersonneListeChargementOk = false;
}
private void initialiserPeupler() {
publicationOk = false;
editeursOk = false;
auteursAffiches = false;
}
 
private boolean etrePretAAfficherAuteurs() {
boolean ok = false;
if (auteurStorePartageChargementOk
&& ((mode.equals(Formulaire.MODE_MODIFIER) && publicationOk && publicationAPersonneListeChargementOk)
|| (mode.equals(Formulaire.MODE_AJOUTER)))) {
ok = true;
}
return ok;
}
private boolean etrePretAPeupler() {
boolean ok = false;
if (mode.equals(Formulaire.MODE_MODIFIER) && publicationOk && editeursOk) {
ok = true;
}
return ok;
}
private Boolean etreValide() {
Boolean valide = false;
if (formulaireValideOk && auteursValideOk) {
valide = true;
}
return valide;
}
private void initialiserValidation() {
formulaireValideOk = false;
publicationValideOk = false;
initialiserAuteurs();
auteursValideOk = false;
}
private void initialiserAuteurs() {
attenteAjoutAuteursOk = true;
auteursAjoutes = new PersonneListe();
attenteSuppressionAuteursOk = true;
auteursSupprimes = new PersonneListe();
}
884,29 → 708,37
}
public boolean soumettreFormulaire() {
formulaireValideOk = verifierFormulaire();
boolean formulaireValideOk = verifierFormulaire();
if (formulaireValideOk) {
soumettrePublication();
//Les auteurs seront mis à jour lors du rafraichissement
}
return formulaireValideOk;
}
 
private void soumettrePublication() {
Publication publicationCollectee = collecterPublication();
if (publicationCollectee != null) {
// Pour l'enregistrement des collections, on utilise le séquenceur
// Il doit attendre le retour de l'enregistrement pour poursuivre
sequenceur = new Sequenceur();
int seqId = sequenceur.lancerRequeteSynchrone(this);
if (mode.equals(Formulaire.MODE_AJOUTER)) {
mediateur.ajouterPublication(this, publicationCollectee);
mediateur.ajouterPublication(sequenceur, publicationCollectee, seqId);
} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
mediateur.modifierPublication(this, publicationCollectee);
mediateur.modifierPublication(sequenceur, publicationCollectee, seqId);
}
sequenceur.empilerRafraichissement(this, new Information("publication_enregistree"));
}
}
private void soumettreAuteurs() {
attenteAjoutAuteursOk = false;
attenteSuppressionAuteursOk = false;
//attenteAjoutAuteursOk = false;
//attenteSuppressionAuteursOk = false;
//1) Auteurs ajoutés :
// - Créer une PublicationAAuteurListe
PublicationAPersonneListe listeDesAuteurs = new PublicationAPersonneListe();
921,8 → 753,9
// - envoyer au mediateur SSI personnes à ajouter
if (listeDesAuteurs.size() > 0) {
mediateur.ajouterPublicationAPersonne(this, publication.getId(), listeDesAuteurs, PublicationAPersonne.ROLE_AUTEUR);
attenteAjoutAuteursOk = true;
int seqId = sequenceur.lancerRequeteSynchrone(this);
mediateur.ajouterPublicationAPersonne(sequenceur, publication.getId(), listeDesAuteurs, PublicationAPersonne.ROLE_AUTEUR, seqId);
//attenteAjoutAuteursOk = true;
}
//2) Auteurs supprimés :
939,74 → 772,12
// - Envoyer au médiateur SSI personnes à supprimer
if (listeDesAuteurs.size() > 0) {
// Pour une suppression des auteurs, on a pas besoin d'attendre le retour
mediateur.supprimerPublicationAPersonne(this, listeDesAuteurs);
attenteSuppressionAuteursOk = true;
//attenteSuppressionAuteursOk = true;
}
/*
attenteAjoutAuteursOk = false;
attenteSuppressionAuteursOk = false;
PersonneListe personnesInitiales = auteursInitialListe;
PersonneListe personnesActuelles = new PersonneListe();
if (auteurComboboxListe != null) {
Iterator<ComboBox<Personne>> itcp = auteurComboboxListe.iterator();
while (itcp.hasNext()) {
ComboBox<Personne> combobox = itcp.next();
Personne personne = combobox.getValue();
if (personne != null) {
personnesActuelles.put(personne.getId(), personne);
} else {
Debug.log("Etre valide :"+combobox.isValid()+" - "+combobox.getRawValue());
}
}
}
// Auteurs ajoutés
Iterator<String> clesActuelles = personnesActuelles.keySet().iterator();
while (clesActuelles.hasNext()) {
String idActuel = clesActuelles.next();
if (personnesInitiales.size() == 0 || personnesInitiales.get(idActuel) == null) {
Personne personne = personnesActuelles.get(idActuel);
PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
if (mode.equals(Formulaire.MODE_MODIFIER)) {
publicationAAuteur.setIdPublication(publication.getId());
}
publicationAAuteur.setPersonne(personne);
publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
//FIXME : auteursAjoutes.put(publicationAAuteur.getId(), publicationAAuteur);
attenteAjoutAuteursOk = true;
}
}
 
// Auteurs supprimés
if (mode.equals(Formulaire.MODE_MODIFIER)) {
Iterator<String> clesInitiales = personnesInitiales.keySet().iterator();
while (clesInitiales.hasNext()) {
String idInitial = clesInitiales.next();
if (personnesActuelles.size() == 0 || personnesActuelles.get(idInitial) == null) {
Personne personne = personnesInitiales.get(idInitial);
PublicationAPersonne publicationAAuteur = new PublicationAPersonne();
publicationAAuteur.setIdPublication(publication.getId());
publicationAAuteur.setPersonne(personne);
publicationAAuteur.setIdRole(PublicationAPersonne.ROLE_AUTEUR);
//FIXME : auteursSupprimes.put(publicationAAuteur.getId(), publicationAAuteur);
attenteSuppressionAuteursOk = true;
}
}
}
// Execution de les mise à jour pour le mode MODIFICATION
if (mode.equals(Formulaire.MODE_MODIFIER)) {
if (auteursAjoutes != null && auteursAjoutes.size() != 0) {
//FIXME : mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
}
if (auteursSupprimes != null && auteursSupprimes.size() != 0) {
//FIXME : mediateur.supprimerPublicationAPersonne(this, auteursSupprimes);
}
}*/
sequenceur.empilerRafraichissement(this, new Information("auteurs_enregistres"));
}
public boolean verifierFormulaire() {
1140,18 → 911,6
intituleAuteur+=", ";
}
}
/*
* TO DELETE:int auteursNombre = auteurComboboxListe.size();
*
for (int i = 0; i < auteursNombre; i++) {
if (auteurComboboxListe.get(i).getValue() != null) {
Personne auteur = auteurComboboxListe.get(i).getValue();
inituleAuteur += auteur.getNom().toUpperCase()+ " "+auteur.getPrenom();
if (i != (auteursNombre - 1)) {
inituleAuteur += ", ";
}
}
}*/
return intituleAuteur;
}