3,10 → 3,9 |
import java.util.ArrayList; |
import java.util.Iterator; |
import java.util.List; |
import java.util.Set; |
|
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
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.MenuApplicationId; |
15,20 → 14,12 |
import org.tela_botanica.client.modeles.Publication; |
import org.tela_botanica.client.modeles.PublicationAPersonne; |
import org.tela_botanica.client.modeles.PublicationAPersonneListe; |
import org.tela_botanica.client.modeles.PublicationListe; |
import org.tela_botanica.client.modeles.Structure; |
import org.tela_botanica.client.modeles.StructureListe; |
import org.tela_botanica.client.util.Pattern; |
import org.tela_botanica.client.util.UtilArray; |
|
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.Style.HorizontalAlignment; |
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.widget.HorizontalPanel; |
36,35 → 27,25 |
import com.extjs.gxt.ui.client.widget.MessageBox; |
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.DateField; |
import com.extjs.gxt.ui.client.widget.form.FieldSet; |
import com.extjs.gxt.ui.client.widget.form.FormPanel; |
import com.extjs.gxt.ui.client.widget.form.Radio; |
import com.extjs.gxt.ui.client.widget.form.TextField; |
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.Grid; |
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; |
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; |
import com.extjs.gxt.ui.client.widget.layout.FormLayout; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.Label; |
|
public class PublicationForm extends Formulaire implements Rafraichissable { |
|
private Publication publication; |
private PublicationAPersonneListe publicationAPersonneListe = null; |
private boolean publicationAPersonneListeChargementOk = false; |
|
private FieldSet auteursFieldset = null; |
private ArrayList<ComboBox<Personne>> auteurComboboxListe = null; |
private PersonneListe listePersonneAuteur = null; |
private LayoutContainer conteneurChamps; |
private ListStore<Personne> auteursStorePartage = null; |
private boolean auteurStorePartageChargementOk = false; |
|
private FieldSet generalitesFieldset = null; |
private TextField<String> titreChp = null; |
80,35 → 61,32 |
|
private String idStructureEdition = ""; |
private String idAuteurs = ""; |
|
protected boolean listePersonneAuteurInitialisee = false; |
protected boolean listeAuteurPublicationInitialisee = false; |
|
private boolean formValide = false; |
private boolean validationPublication = false; |
private boolean validationAuteurs = false; |
private boolean formulaireValideOk = false; |
private boolean publicationValideOk = false; |
private boolean auteursValideOk = false; |
|
private Rafraichissable vueExterneARafraichirApresValidation = null; |
|
|
public PublicationForm(Mediateur mediateurCourrant, String publicationId) { |
initialiserPublicationForm(mediateurCourrant, publicationId); |
} |
|
public PublicationForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) { |
vueExterneARafraichirApresValidation = vueARafraichirApresValidation; |
initialiserPublicationForm(mediateurCourrant, publicationId); |
vueExterneARafraichirApresValidation = vueARafraichirApresValidation; |
} |
|
private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) { |
String modeDeCreation = Formulaire.MODE_AJOUTER; |
publication = new Publication(); |
if (publicationId != null) { |
modeDeCreation = Formulaire.MODE_MODIFIER; |
} |
publication.setId(publicationId); |
|
String modeDeCreation = (publication.getId().isEmpty() ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER); |
initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION); |
|
panneauFormulaire.setLayout(new FlowLayout()); |
String titre = (modeDeCreation.equals(Formulaire.MODE_AJOUTER) ? "Ajout d'une publication" : "Modification d'une publication"); |
String titre = genererTitreFormulaire(); |
panneauFormulaire.setHeading(titre); |
|
creerZoneAuteurs(); |
119,11 → 97,21 |
|
creerZoneEdition(); |
panneauFormulaire.add(editionFieldset); |
|
mediateurCourrant.selectionnerPublication(this, publicationId); |
mediateurCourrant.selectionnerAuteurAPublication(this, publicationId); |
|
if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) { |
mediateurCourrant.selectionnerPublication(this, publicationId); |
mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR); |
} |
} |
|
private String genererTitreFormulaire() { |
String titre = "Ajout d'une publication"; |
if (mode.equals(Formulaire.MODE_MODIFIER)) { |
titre = "Modification d'une publication - "+i18nC.id()+": "+publication.getId(); |
} |
return titre; |
} |
|
private void creerZoneAuteurs() { |
FormLayout layout = new FormLayout(); |
layout.setLabelWidth(200); |
138,42 → 126,33 |
auteursStorePartage = new ListStore<Personne>(); |
mediateur.clicObtenirListeAuteurs(this); |
|
genererChampsAuteur(false); |
creerChampsAuteur(); |
} |
|
private void genererChampsAuteur(boolean vider) { |
private void creerChampsAuteur() { |
auteursFieldset.removeAll(); |
|
conteneurChamps = new LayoutContainer(); |
|
Button ajoutAuteurBtn = new Button("Ajouter un auteur"); |
ajoutAuteurBtn.addSelectionListener(new SelectionListener<ButtonEvent>() { |
Button ajouterAuteurBouton = new Button("Ajouter un auteur"); |
ajouterAuteurBouton.setIcon(Images.ICONES.ajouter()); |
ajouterAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent be) { |
creerTextFieldEtBouton(null); |
|
int nbAuteurs = 0; |
for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) { |
if (auteurComboboxListe.size() > 1) { |
it.next().setFieldLabel("Auteur "+nbAuteurs); |
nbAuteurs++; |
} |
} |
|
auteursFieldset.layout(true); |
creerChampAuteurEtBoutonSupprimer(null); |
} |
}); |
|
auteursFieldset.add(conteneurChamps); |
auteursFieldset.add(ajoutAuteurBtn); |
auteursFieldset.add(ajouterAuteurBouton); |
auteursFieldset.layout(true); |
|
if (!vider) { |
creerTextFieldEtBouton(null); |
if (mode.equals(Formulaire.MODE_AJOUTER)) { |
creerChampAuteurEtBoutonSupprimer(null); |
} |
} |
|
public void creerTextFieldEtBouton(Personne auteur) { |
public void creerChampAuteurEtBoutonSupprimer(Personne auteur) { |
final HorizontalPanel panneauHorizontal = new HorizontalPanel(); |
panneauHorizontal.setLayout(new FormLayout()); |
|
183,30 → 162,33 |
auteursSaisisComboBox.setValue(auteursStorePartage.findModel("id_personne", auteur.getId())); |
} |
auteurComboboxListe.add(auteursSaisisComboBox); |
auteursSaisisComboBox.setFieldLabel("Auteur "+auteurComboboxListe.size()); |
|
LayoutContainer lc = new LayoutContainer(); |
lc.setLayout(new FormLayout()); |
lc.add(auteursSaisisComboBox, new FormData(300, 0)); |
LayoutContainer panneauChampTxtEtBouton = new LayoutContainer(); |
panneauChampTxtEtBouton.setLayout(new FormLayout()); |
panneauChampTxtEtBouton.add(auteursSaisisComboBox, new FormData(300, 0)); |
panneauHorizontal.add(panneauChampTxtEtBouton); |
|
Button supp = new Button("-"); |
supp.addSelectionListener(new SelectionListener<ButtonEvent>() { |
Button supprimerAuteurBouton = new Button(); |
supprimerAuteurBouton.setIcon(Images.ICONES.supprimer()); |
supprimerAuteurBouton.setToolTip(i18nC.supprimer()); |
supprimerAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent be) { |
int nbAuteurs = 0; |
if (auteurComboboxListe.size() != 1) { |
for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) { |
it.next().setFieldLabel("Auteur "+nbAuteurs); |
nbAuteurs++; |
} |
} |
auteurComboboxListe.remove(auteursSaisisComboBox); |
conteneurChamps.remove(panneauHorizontal); |
|
int numeroAuteurs = 1; |
for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) { |
it.next().setFieldLabel("Auteur "+numeroAuteurs); |
numeroAuteurs++; |
} |
|
auteursFieldset.layout(true); |
} |
|
}); |
panneauHorizontal.add(lc); |
panneauHorizontal.add(supp); |
panneauHorizontal.add(supprimerAuteurBouton); |
|
conteneurChamps.add(panneauHorizontal); |
auteursFieldset.layout(true); |
} |
303,8 → 285,12 |
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null); |
} |
|
if (etrePretAAfficherAuteurs()) { |
afficherAuteurs(); |
} |
|
if (etreValide()) { |
reinitialiserValidation(); |
initialiserValidation(); |
repandreRafraichissement(); |
controlerFermetureApresRafraichissement(); |
} |
312,22 → 298,7 |
|
private void rafraichirPublication(Publication publi) { |
publication = publi; |
|
genererChampsAuteur(true); |
titreChp.setValue(publication.getTitre()); |
collectionChp.setValue(publication.getCollection()); |
uriChp.setValue(publication.getURI()); |
datePublicationChp.setRawValue(reduireDateParAnnee(publication.getDateParution())); |
tomeChp.setValue(publication.getIndicationNvt()); |
fasciculeChp.setValue(publication.getFascicule()); |
pagesChp.setValue(publication.getPages()); |
|
if (publication.getEditeur().matches("^[0-9]+$")) { |
editeurCombobox.setValue(editeurCombobox.getStore().findModel("id_structure", publication.getEditeur())); |
idStructureEdition = publication.getEditeur(); |
} else { |
editeurCombobox.setRawValue(publication.getEditeur()); |
} |
peuplerFormulaire(); |
} |
|
private void rafraichirListeEditeurs(StructureListe editeurs) { |
342,57 → 313,66 |
|
private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) { |
publicationAPersonneListe = auteurs; |
|
if (listePersonneAuteurInitialisee) { |
Iterator<String> itap = publicationAPersonneListe.keySet().iterator(); |
while (itap.hasNext()) { |
creerTextFieldEtBouton(publicationAPersonneListe.get(itap.next()).getPersonne()); |
} |
|
int nbAuteurs = 0; |
for (Iterator<ComboBox<Personne>> it = auteurComboboxListe.iterator(); it.hasNext();) { |
if (auteurComboboxListe.size() > 1) { |
it.next().setFieldLabel("Auteur "+nbAuteurs); |
nbAuteurs++; |
} |
} |
listeAuteurPublicationInitialisee = true; |
} |
publicationAPersonneListeChargementOk = true; |
} |
|
private void rafraichirInformation(Information info) { |
if (info.getType().equals("liste_personne")) { |
listePersonneAuteurInitialisee = true; |
listePersonneAuteur = (PersonneListe) info.getDonnee(0); |
PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0); |
|
List<Personne> liste = listePersonneAuteur.toList(); |
auteursStorePartage.removeAll(); |
auteursStorePartage.add(liste); |
|
auteurStorePartageChargementOk = true; |
} else if (info.getType().equals("publication_valide")) { |
validationPublication = true; |
publicationValideOk = true; |
publication.setId((String) info.getDonnee(0)); |
|
if (mode.equals(Formulaire.MODE_AJOUTER)) { |
mediateur.ajouterAuteurPublication(this, idAuteurs, PublicationAPersonne.ROLE_AUTEUR, publication.getId()); |
mediateur.ajouterPublicationAPersonne(this, publication.getId(), idAuteurs, PublicationAPersonne.ROLE_AUTEUR); |
} else if (mode.equals(Formulaire.MODE_MODIFIER)) { |
mediateur.modifierAuteurPublication(this, idAuteurs, publication.getId()); |
mediateur.modifierPublicationAPersonne(this, publication.getId(), idAuteurs, PublicationAPersonne.ROLE_AUTEUR); |
} |
} else if (info.getType().equals("auteur_valide")) { |
validationAuteurs = true; |
auteursValideOk = true; |
} |
} |
|
private void afficherAuteurs() { |
Iterator<String> itap = publicationAPersonneListe.keySet().iterator(); |
while (itap.hasNext()) { |
creerChampAuteurEtBoutonSupprimer(publicationAPersonneListe.get(itap.next()).getPersonne()); |
} |
initialiserAffichageAuteurs(); |
} |
|
private void initialiserAffichageAuteurs() { |
auteurStorePartageChargementOk = false; |
publicationAPersonneListeChargementOk = false; |
} |
|
private boolean etrePretAAfficherAuteurs() { |
boolean ok = false; |
if (auteurStorePartageChargementOk && publicationAPersonneListeChargementOk) { |
ok = true; |
} |
return ok; |
} |
|
private Boolean etreValide() { |
Boolean valide = false; |
if (formValide && validationPublication && validationAuteurs) { |
GWT.log("formulaire"+formulaireValideOk+" - Publication :"+publicationValideOk+" - Auteurs :"+auteursValideOk, null); |
if (formulaireValideOk && publicationValideOk && auteursValideOk) { |
valide = true; |
} |
return valide; |
} |
|
private void reinitialiserValidation() { |
formValide = false; |
validationPublication = false; |
validationAuteurs = false; |
private void initialiserValidation() { |
formulaireValideOk = false; |
publicationValideOk = false; |
auteursValideOk = false; |
} |
|
private void repandreRafraichissement() { |
408,10 → 388,12 |
} |
|
public boolean soumettreFormulaire() { |
formValide = verifierFormulaire(); |
if (formValide) { |
formulaireValideOk = verifierFormulaire(); |
GWT.log("Form?"+formulaireValideOk, null); |
if (formulaireValideOk) { |
Publication publicationCollectee = collecterPublication(); |
if (publicationCollectee != null) { |
GWT.log("Info collectée ? ok", null); |
if (mode.equals(Formulaire.MODE_AJOUTER)) { |
mediateur.ajouterPublication(this, publicationCollectee); |
} else if (mode.equals(Formulaire.MODE_MODIFIER)) { |
419,7 → 401,7 |
} |
} |
} |
return formValide; |
return formulaireValideOk; |
} |
|
protected boolean verifierFormulaire() { |
471,22 → 453,44 |
return valide; |
} |
|
private void peuplerFormulaire() { |
creerChampsAuteur(); |
titreChp.setValue(publication.getTitre()); |
collectionChp.setValue(publication.getCollection()); |
uriChp.setValue(publication.getURI()); |
datePublicationChp.setRawValue(reduireDateParAnnee(publication.getDateParution())); |
tomeChp.setValue(publication.getIndicationNvt()); |
fasciculeChp.setValue(publication.getFascicule()); |
pagesChp.setValue(publication.getPages()); |
|
if (publication.getEditeur().matches("^[0-9]+$")) { |
editeurCombobox.setValue(editeurCombobox.getStore().findModel("id_structure", publication.getEditeur())); |
idStructureEdition = publication.getEditeur(); |
} else { |
editeurCombobox.setRawValue(publication.getEditeur()); |
} |
} |
|
private Publication collecterPublication() { |
Publication publicationARetourner = null; |
Publication publicationCollectee = (Publication) publication.cloner(new Publication()); |
|
String auteur = ""; |
for (int i = 0; i < auteurComboboxListe.size(); i++) { |
String auteurIntituleFormate = ""; |
int auteursNombre = auteurComboboxListe.size(); |
for (int i = 0; i < auteursNombre; i++) { |
if (auteurComboboxListe.get(i).getValue() != null) { |
idAuteurs += auteurComboboxListe.get(i).getValue().getId(); |
auteur += auteurComboboxListe.get(i).getValue().getNom()+ " "+auteurComboboxListe.get(i).getValue().getPrenom(); |
if (i != auteurComboboxListe.size() -1) { |
auteur += ", "; |
Personne auteur = auteurComboboxListe.get(i).getValue(); |
idAuteurs += auteur.getId(); |
auteurIntituleFormate += auteur.getNom()+ " "+auteur.getPrenom(); |
if (i != (auteursNombre - 1)) { |
auteurIntituleFormate += ", "; |
idAuteurs += ","; |
} |
} |
} |
publicationCollectee.setAuteur(auteur); |
GWT.log("Auteurs formaté :"+auteurIntituleFormate, null); |
GWT.log("Auteurs ids :"+idAuteurs, null); |
publicationCollectee.setAuteur(auteurIntituleFormate); |
|
String titre = titreChp.getValue(); |
publicationCollectee.setTitre(titre); |