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; |
} |
|