Rev 1095 | Rev 1131 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.publication;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.tela_botanica.client.ComposantClass;
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.MenuApplicationId;
import org.tela_botanica.client.modeles.personne.Personne;
import org.tela_botanica.client.modeles.personne.PersonneListe;
import org.tela_botanica.client.modeles.projet.Projet;
import org.tela_botanica.client.modeles.projet.ProjetListe;
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.structure.Structure;
import org.tela_botanica.client.modeles.structure.StructureListe;
import org.tela_botanica.client.util.Pattern;
import org.tela_botanica.client.util.UtilArray;
import org.tela_botanica.client.util.UtilString;
import org.tela_botanica.client.vues.Formulaire;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
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;
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.Field;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
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.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;
public class PublicationForm extends Formulaire implements Rafraichissable {
private Publication publication;
private PublicationAPersonneListe publicationAPersonneListe = null;
private static boolean publicationAPersonneListeChargementOk = false;
private PublicationAPersonneListe auteursAjoutes = null;
private PublicationAPersonneListe auteursSupprimes = null;
private FieldSet auteursFieldset = null;
private ComboBox<Projet> projetsCombo = null;
private ArrayList<ComboBox<Personne>> auteurComboboxListe = null;
private LayoutContainer conteneurChamps;
private ListStore<Personne> auteursStorePartage = null;
private static boolean auteurStorePartageChargementOk = false;
private FieldSet generalitesFieldset = null;
private TextField<String> titreChp = null;
private TextField<String> collectionChp = null;
private TextField<String> uriChp = null;
private FieldSet editionFieldset = null;
private ComboBox<Structure> editeurCombobox = null;
private TextField<String> datePublicationChp = null;
private TextField<String> tomeChp = null;
private TextField<String> fasciculeChp = null;
private TextField<String> pagesChp = null;
private String idStructureEdition = "";
private static boolean formulaireValideOk = false;
private static boolean publicationValideOk = false;
private static boolean auteursValideOk = false;
private static boolean attenteAjoutAuteursOk = true;
private static boolean attenteSuppressionAuteursOk = true;
public PublicationForm(Mediateur mediateurCourrant, String publicationId) {
initialiserPublicationForm(mediateurCourrant, publicationId);
}
public PublicationForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) {
vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
initialiserPublicationForm(mediateurCourrant, publicationId);
}
private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
publicationAPersonneListe = new PublicationAPersonneListe();
initialiserValidation();
initialiserAffichageAuteurs();
publication = new Publication();
publication.setId(publicationId);
String modeDeCreation = (UtilString.isEmpty(publication.getId()) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
panneauFormulaire.setLayout(new FlowLayout());
genererTitreFormulaire();
creerZoneAuteurs();
panneauFormulaire.add(auteursFieldset);
creerZoneGeneralites();
panneauFormulaire.add(generalitesFieldset);
creerZoneEdition();
panneauFormulaire.add(editionFieldset);
if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
mediateurCourrant.selectionnerPublication(this, publicationId);
mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR);
}
}
private void genererTitreFormulaire() {
String titre = i18nC.publicationTitreFormAjout();
if (mode.equals(Formulaire.MODE_MODIFIER)) {
titre = i18nC.publicationTitreFormModif();
if (publication != null) {
titre += " - "+i18nC.id()+": "+publication.getId();
}
}
panneauFormulaire.setHeading(titre);
}
private void creerZoneAuteurs() {
FormLayout layout = new FormLayout();
layout.setLabelWidth(200);
// Fieldset Auteur
auteursFieldset = new FieldSet();
auteursFieldset.setHeading(i18nC.publicationAuteursTitre());
auteursFieldset.setCollapsible(true);
auteursFieldset.setLayout(layout);
auteurComboboxListe = new ArrayList<ComboBox<Personne>>(0);
auteursStorePartage = new ListStore<Personne>();
mediateur.clicObtenirListeAuteurs(this);
creerChampsAuteur();
}
private void creerChampsAuteur() {
auteursFieldset.removeAll();
conteneurChamps = new LayoutContainer();
Button ajouterAuteurBouton = new Button(i18nC.publicationAuteurBoutonAjouter());
ajouterAuteurBouton.setIcon(Images.ICONES.ajouter());
ajouterAuteurBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent be) {
creerChampAuteurEtBoutonSupprimer(null);
}
});
auteursFieldset.add(conteneurChamps);
auteursFieldset.add(ajouterAuteurBouton);
auteursFieldset.layout(true);
if (mode.equals(Formulaire.MODE_AJOUTER)) {
creerChampAuteurEtBoutonSupprimer(null);
}
}
public void creerChampAuteurEtBoutonSupprimer(Personne auteur) {
final HorizontalPanel panneauHorizontal = new HorizontalPanel();
panneauHorizontal.setLayout(new FormLayout());
final ComboBox<Personne> auteursSaisisComboBox = creerComboBoxAuteursSaisis();
if (auteur != null) {
auteursSaisisComboBox.setValue(auteursStorePartage.findModel("id_personne", auteur.getId()));
auteursSaisisComboBox.validate();
}
auteurComboboxListe.add(auteursSaisisComboBox);
auteursSaisisComboBox.setFieldLabel(i18nC.publicationAuteurSingulier()+" "+auteurComboboxListe.size());
LayoutContainer panneauChampTxtEtBouton = new LayoutContainer();
panneauChampTxtEtBouton.setLayout(new FormLayout());
panneauChampTxtEtBouton.add(auteursSaisisComboBox, new FormData(300, 0));
panneauHorizontal.add(panneauChampTxtEtBouton);
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(true);
}
});
panneauHorizontal.add(supprimerAuteurBouton);
conteneurChamps.add(panneauHorizontal);
auteursFieldset.layout(true);
}
private ComboBox<Personne> creerComboBoxAuteursSaisis() {
ComboBox<Personne> comboBox = new ComboBox<Personne>();
comboBox.setEmptyText(i18nC.chercherPersonneSaisi());
comboBox.setEditable(true);
comboBox.setForceSelection(true);
comboBox.setDisplayField("fmt_nom_complet");
comboBox.setTriggerAction(TriggerAction.ALL);
comboBox.setStore(auteursStorePartage);
comboBox.addStyleName(ComposantClass.OBLIGATOIRE);
comboBox.addListener(Events.Valid, creerEcouteurChampObligatoire());
return comboBox;
}
private void creerZoneGeneralites() {
FormLayout layout = new FormLayout();
layout.setLabelWidth(200);
// Fieldset Infos Générales
generalitesFieldset = new FieldSet();
generalitesFieldset.setHeading("Informations générales");
generalitesFieldset.setCollapsible(true);
generalitesFieldset.setLayout(layout);
projetsCombo = new ComboBox<Projet>();
projetsCombo.setTabIndex(tabIndex++);
projetsCombo.setFieldLabel(i18nC.projetChamp());
projetsCombo.setDisplayField("nom");
projetsCombo.setForceSelection(true);
projetsCombo.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (projetsCombo.getStore().findModel("nom", 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;
}
});
projetsCombo.setTriggerAction(TriggerAction.ALL);
projetsCombo.setStore(new ListStore<Projet>());
projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
projetsCombo.addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
generalitesFieldset.add(projetsCombo, new FormData(450, 0));
mediateur.selectionnerProjet(this, null);
titreChp = new TextField<String>();
titreChp.setName("cpu");
titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
generalitesFieldset.add(titreChp, new FormData(450, 0));
collectionChp = new TextField<String>();
collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
generalitesFieldset.add(collectionChp, new FormData(450, 0));
uriChp = new TextField<String>();
uriChp.setFieldLabel("URL de la publication");
generalitesFieldset.add(uriChp, new FormData(450, 0));
}
private void creerZoneEdition() {
FormLayout layout = new FormLayout();
layout.setLabelWidth(200);
// Fieldset Edition
editionFieldset = new FieldSet();
editionFieldset.setHeading("Édition");
editionFieldset.setCollapsible(true);
editionFieldset.setLayout(layout);
ListStore<Structure> editeurStore = new ListStore<Structure>();
editeurCombobox = new ComboBox<Structure>();
editeurCombobox.setEmptyText("Sélectionner un éditeur...");
editeurCombobox.setFieldLabel("Éditeur de la publication");
editeurCombobox.setDisplayField("nom");
editeurCombobox.setStore(editeurStore);
editeurCombobox.setEditable(true);
editeurCombobox.setTriggerAction(TriggerAction.ALL);
editionFieldset.add(editeurCombobox, new FormData(450, 0));
mediateur.clicObtenirListeEditeurs(this);
datePublicationChp = new TextField<String>();
datePublicationChp.setMaxLength(4);
datePublicationChp.setMinLength(4);
datePublicationChp.setFieldLabel("Année de publication");
datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
editionFieldset.add(datePublicationChp, new FormData(40, 0));
tomeChp = new TextField<String>();
tomeChp.setFieldLabel("Série de la revue ou tome");
editionFieldset.add(tomeChp, new FormData(75, 0));
fasciculeChp = new TextField<String>();
fasciculeChp.setFieldLabel("Fascicule de la revue");
editionFieldset.add(fasciculeChp, new FormData(75, 0));
pagesChp = new TextField<String>();
pagesChp.setFieldLabel("Pages");
pagesChp.setToolTip("Fomat : NBRE ou NBRE-NBRE. ('NBRE' correspond à une suite de chiffres arabes ou romains ou à un point d'interrogation '?' dans le cas d'une donnée inconnue)");
editionFieldset.add(pagesChp, new FormData(100, 0));
}
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof Publication) {
// Si on a reçu les details d'une publication
rafraichirPublication((Publication) nouvellesDonnees);
} else if (nouvellesDonnees instanceof StructureListe) {
// Si on a reçu une liste des editeurs
rafraichirListeEditeurs((StructureListe) nouvellesDonnees);
} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {
rafraichirListeAuteurs((PublicationAPersonneListe) nouvellesDonnees);
} else if (nouvellesDonnees instanceof Information) {
rafraichirInformation((Information) nouvellesDonnees);
} else if (nouvellesDonnees instanceof ProjetListe) {
ProjetListe projets = (ProjetListe) nouvellesDonnees;
Formulaire.rafraichirComboBox(projets, projetsCombo);
setValeurComboProjets();
} else {
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
}
if (etrePretAAfficherAuteurs()) {
initialiserAffichageAuteurs();
afficherAuteurs();
}
if (etreValide()) {
initialiserValidation();
repandreRafraichissement();
controlerFermetureApresRafraichissement();
}
}
private void miseAJourPublicationAPersonneListe() {
Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
while (clesAjoutees.hasNext()) {
String id = clesAjoutees.next();
publicationAPersonneListe.put(id, auteursAjoutes.get(id));
}
Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
while (clesSupprimees.hasNext()) {
String id = clesSupprimees.next();
publicationAPersonneListe.remove(id);
}
}
private void rafraichirPublication(Publication publi) {
publication = publi;
peuplerFormulaire();
genererTitreFormulaire();
}
private void rafraichirListeEditeurs(StructureListe editeurs) {
editeurCombobox.getStore().removeAll();
editeurCombobox.getStore().add((List<Structure>) editeurs.toList());
if (mode.equals(Formulaire.MODE_MODIFIER)) {
editeurCombobox.setValue((Structure) editeurs.get(idStructureEdition));
}
editeurCombobox.expand();
}
private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) {
publicationAPersonneListe = auteurs;
publicationAPersonneListeChargementOk = true;
}
private void rafraichirInformation(Information info) {
String type = info.getType();
if (type.equals("ajout_publication") || type.equals("modif_publication")) {
publicationValideOk = true;
if (vueExterneARafraichirApresValidation != null) {
publication.setId((String) info.getDonnee(0));
}
if (mode.equals(Formulaire.MODE_AJOUTER)) {
attenteAjoutAuteursOk = true;
mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
}
}
if (info.getType().equals("liste_personne")) {
PersonneListe listePersonneAuteur = (PersonneListe) info.getDonnee(0);
List<Personne> liste = listePersonneAuteur.toList();
auteursStorePartage.removeAll();
auteursStorePartage.add(liste);
auteurStorePartageChargementOk = true;
} else if (info.getType().equals("ajout_publication_a_personne")) {
attenteAjoutAuteursOk = false;
GWT.log("attenteAjoutAuteursOk", null);
} else if (info.getType().equals("suppression_publication_a_personne")) {
attenteSuppressionAuteursOk = false;
GWT.log("attenteSuppressionAuteursOk", null);
} else if (info.getType().equals("modif_publication")) {
Info.display("Modification d'une publication", info.toString());
} else if (info.getType().equals("ajout_publication")) {
if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {
String publicationId = (String) info.getDonnee(0);
Info.display("Ajout d'une publication", "La publication '"+publicationId+"' a bien été ajoutée");
if (vueExterneARafraichirApresValidation != null) {
publication.setId(publicationId);
}
} else {
Info.display("Ajout d'une publication", info.toString());
}
}
if (avoirAuteursMiseAJourCorrectement()) {
auteursValideOk = true;
miseAJourPublicationAPersonneListe();
initialiserAuteurs();
}
}
private boolean avoirAuteursMiseAJourCorrectement() {
boolean ok = false;
if (attenteAjoutAuteursOk == false && attenteSuppressionAuteursOk == false) {
ok = true;
}
return ok;
}
private void afficherAuteurs() {
Iterator<String> itap = publicationAPersonneListe.keySet().iterator();
while (itap.hasNext()) {
creerChampAuteurEtBoutonSupprimer(publicationAPersonneListe.get(itap.next()).getPersonne());
}
}
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;
//Debug.log("formulaire"+formulaireValideOk+" - Publication :"+publicationValideOk+" - Auteurs :"+auteursValideOk, null);
if (formulaireValideOk && publicationValideOk && auteursValideOk) {
valide = true;
}
return valide;
}
private void initialiserValidation() {
formulaireValideOk = false;
publicationValideOk = false;
initialiserAuteurs();
auteursValideOk = false;
}
private void initialiserAuteurs() {
attenteAjoutAuteursOk = true;
auteursAjoutes = new PublicationAPersonneListe();
attenteSuppressionAuteursOk = true;
auteursSupprimes = new PublicationAPersonneListe();
}
private void repandreRafraichissement() {
if (vueExterneARafraichirApresValidation != null) {
String type = "publication_modifiee";
if (mode.equals(Formulaire.MODE_AJOUTER)) {
type = "publication_ajoutee";
}
Information info = new Information(type);
info.setDonnee(0, publication);
vueExterneARafraichirApresValidation.rafraichir(info);
}
}
public boolean soumettreFormulaire() {
formulaireValideOk = verifierFormulaire();
if (formulaireValideOk) {
soumettrePublication();
soumettreAuteurs();
}
return formulaireValideOk;
}
private void soumettrePublication() {
Publication publicationCollectee = collecterPublication();
if (publicationCollectee != null) {
if (mode.equals(Formulaire.MODE_AJOUTER)) {
mediateur.ajouterPublication(this, publicationCollectee);
} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
mediateur.modifierPublication(this, publicationCollectee);
}
}
}
private void soumettreAuteurs() {
attenteAjoutAuteursOk = false;
attenteSuppressionAuteursOk = false;
PersonneListe personnesInitiales = new PersonneListe();
if (publicationAPersonneListe != null) {
Iterator<String> itap = publicationAPersonneListe.keySet().iterator();
while (itap.hasNext()) {
Personne personne = publicationAPersonneListe.get(itap.next()).getPersonne();
personnesInitiales.put(personne.getId(), personne);
}
}
PersonneListe personnesActuelles = new PersonneListe();
for (int i = 0; i < auteurComboboxListe.size(); i++) {
if (auteurComboboxListe.get(i).getValue() != null) {
Personne personne = auteurComboboxListe.get(i).getValue();
personnesActuelles.put(personne.getId(), personne);
}
}
// 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);
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);
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) {
mediateur.ajouterPublicationAPersonne(this, publication.getId(), auteursAjoutes, PublicationAPersonne.ROLE_AUTEUR);
}
if (auteursSupprimes != null && auteursSupprimes.size() != 0) {
mediateur.supprimerPublicationAPersonne(this, auteursSupprimes);
}
}
}
public boolean verifierFormulaire() {
boolean valide = true;
ArrayList<String> messages = new ArrayList<String>();
boolean auteurErreur = true;
for (int i = 0; i < auteurComboboxListe.size(); i++) {
if (auteurComboboxListe.get(i).getValue() != null) {
auteurErreur = false;
break;
}
}
if (auteurErreur) {
messages.add("Veuillez saisir au moins un auteur !");
}
String titre = titreChp.getValue();
if (titre == null || titre.equals("")) {
messages.add("Veuillez saisir le titre de la publication !");
}
String uri = uriChp.getValue();
if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
messages.add("L'URL saisie n'est pas valide !");
}
String datePublication = datePublicationChp.getRawValue();
if (datePublication == null || datePublication.equals("")) {
messages.add("Veuillez saisir une année de parution !");
} else {
if (!etreDateValide(datePublication)) {
messages.add("Le format de l'année saisie est incorrect !");
}
}
String pages = pagesChp.getValue();
String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
messages.add("Le format des pages est incorrect !");
}
if (messages.size() != 0) {
String[] tableauDeMessages = {};
tableauDeMessages = messages.toArray(tableauDeMessages);
MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
valide = false;
}
return valide;
}
private void peuplerFormulaire() {
creerChampsAuteur();
setValeurComboProjets();
titreChp.setValue(publication.getTitre());
collectionChp.setValue(publication.getCollection());
uriChp.setValue(publication.getURI());
datePublicationChp.setValue(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 publicationCollectee = (Publication) publication.cloner(new Publication());
publicationCollectee.setIdProjet(getValeurComboProjets());
publicationCollectee.setAuteur(construireIntituleAuteur());
String titre = titreChp.getValue();
publicationCollectee.setTitre(titre);
String collection = collectionChp.getValue();
publicationCollectee.setCollection(collection);
publicationCollectee.setNomComplet(construireNomComplet());
String uri = uriChp.getValue();
publicationCollectee.setUri(uri);
String editeur = "";
if (editeurCombobox.getValue() != null) {
editeur = editeurCombobox.getValue().getId();
publicationCollectee.setStructureEditeur(editeurCombobox.getValue());
} else if (editeurCombobox.getRawValue() != "") {
editeur = editeurCombobox.getRawValue();
}
publicationCollectee.setEditeur(editeur);
String anneePublication = datePublicationChp.getRawValue();
String datePublication = anneePublication+"-00-00";
publicationCollectee.setDateParution(datePublication);
String tome = tomeChp.getValue();
publicationCollectee.setIndicationNvt(tome);
String fascicule = fasciculeChp.getValue();
publicationCollectee.setFascicule(fascicule);
String pages = pagesChp.getValue();
publicationCollectee.setPages(pages);
Publication publicationARetourner = null;
if (!publicationCollectee.comparer(publication)) {
publicationARetourner = publication = publicationCollectee;
}
return publicationARetourner;
}
private String construireIntituleEditeur() {
String editeur = "";
if (editeurCombobox.getValue() != null) {
editeur = editeurCombobox.getValue().getNom();
} else if (editeurCombobox.getRawValue() != "") {
editeur = editeurCombobox.getRawValue();
}
return editeur;
}
private String construireIntituleAuteur() {
String inituleAuteur = "";
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 inituleAuteur;
}
private String construireNomComplet() {
// Intitulé de la publication complet : fmt_auteur, date_parution(année). titre. Editeur (nom), collection, fascicule, indication_nvt. pages.
String nomComplet = "";
String auteurs = construireIntituleAuteur();
String annee = datePublicationChp.getRawValue();
String titre = titreChp.getValue();
String editeur = construireIntituleEditeur();
nomComplet += auteurs+", "+annee+". "+titre+".";
if (!UtilString.isEmpty(editeur)) {
nomComplet += " Éditeur "+editeur+".";
}
if (collectionChp.getValue() != null) {
String revue = collectionChp.getValue();
nomComplet += ", "+revue;
}
if (fasciculeChp.getValue() != null) {
String fascicule = fasciculeChp.getValue();
nomComplet += ", "+fascicule;
}
if (tomeChp.getValue() != null) {
String tomaison = tomeChp.getValue();
nomComplet += ", "+tomaison;
}
if (collectionChp.getValue() != null || fasciculeChp.getValue() != null || tomeChp.getValue() != null) {
nomComplet += ".";
}
if (pagesChp.getValue() != null) {
String pages = pagesChp.getValue();
nomComplet += pages+".";
}
return nomComplet;
}
public void reinitialiserFormulaire() {
if (mode.equals(Formulaire.MODE_MODIFIER)) {
mediateur.afficherFormPublication(publication.getId());
} else {
mediateur.afficherFormPublication(null);
}
}
private boolean etreDateValide(String anneePublication) {
boolean valide = true;
if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
valide = false;
}
return valide;
}
private String reduireDateParAnnee(String datePar) {
if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
return datePar.split("-")[0];
} else {
return "";
}
}
private String getValeurComboProjets() {
String valeur = "";
if (projetsCombo.getValue() != null) {
valeur = projetsCombo.getValue().getId();
}
return valeur;
}
private void setValeurComboProjets() {
if (projetsCombo.getStore() != null ) {
if (mode.equals(Formulaire.MODE_MODIFIER) && publication != null) {
projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", publication.getIdProjet()));
} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", mediateur.getProjetId()));
}
}
}
}