Rev 1134 | Rev 1174 | 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.Debug;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 PersonneListe auteursInitialListe = 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 publicationOk = 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) {auteursInitialListe = new PersonneListe();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 AuteurauteursFieldset = new FieldSet();auteursFieldset.setHeading(i18nC.publicationAuteursTitre());auteursFieldset.setCollapsible(true);auteursFieldset.setLayout(layout);Debug.log("Dans creerZoneAuteurs");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>() {@Overridepublic void componentSelected(ButtonEvent be) {creerChampAuteurEtBoutonSupprimer(null);}});auteursFieldset.add(conteneurChamps);auteursFieldset.add(ajouterAuteurBouton);auteursFieldset.layout();if (mode.equals(Formulaire.MODE_AJOUTER)) {creerChampAuteurEtBoutonSupprimer(null);}}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>() {@Overridepublic 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());ComboBox<Personne> comboBox = new ComboBox<Personne>();comboBox.setEmptyText(i18nC.chercherPersonneSaisi());comboBox.setEditable(true);comboBox.setAllowBlank(false);comboBox.setForceSelection(true);comboBox.setDisplayField("fmt_nom_complet");comboBox.setTriggerAction(TriggerAction.ALL);comboBox.setStore(auteursStore);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éralesgeneralitesFieldset = 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() {@Overridepublic 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 EditioneditionFieldset = 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 publicationrafraichirPublication((Publication) nouvellesDonnees);} else if (nouvellesDonnees instanceof StructureListe) {// Si on a reçu une liste des editeursrafraichirListeEditeurs((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()) {afficherAuteurs();initialiserAffichageAuteurs();}if (etreValide()) {initialiserValidation();repandreRafraichissement();controlerFermetureApresRafraichissement();}}private void miseAJourAuteursInitialListe() {Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();while (clesAjoutees.hasNext()) {Personne auteurAjoute = auteursAjoutes.get(clesAjoutees.next()).getPersonne();auteursInitialListe.put(auteurAjoute.getId(), auteurAjoute);}Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();while (clesSupprimees.hasNext()) {Personne auteurSupprime = auteursSupprimes.get(clesSupprimees.next()).getPersonne();auteursInitialListe.remove(auteurSupprime.getId());}}private void rafraichirPublication(Publication publi) {publicationOk = true;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) {Iterator<String> it = auteurs.keySet().iterator();while (it.hasNext()) {Personne auteur = auteurs.get(it.next()).getPersonne();auteursInitialListe.put(auteur.getId(), auteur);}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);Debug.log("Reception nouvelle liste auteurs");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()) {Debug.log("Mise à jour liste auteur");miseAJourAuteursInitialListe();initialiserAuteurs();auteursValideOk = true;}}private boolean avoirAuteursMiseAJourCorrectement() {boolean ok = false;if (attenteAjoutAuteursOk == false && attenteSuppressionAuteursOk == false) {ok = true;}return ok;}private void afficherAuteurs() {Iterator<String> itap = auteursInitialListe.keySet().iterator();while (itap.hasNext()) {creerChampAuteurEtBoutonSupprimer(auteursInitialListe.get(itap.next()));}}private void initialiserAffichageAuteurs() {publicationOk = false;auteurStorePartageChargementOk = false;publicationAPersonneListeChargementOk = false;}private boolean etrePretAAfficherAuteurs() {boolean ok = false;if (publicationOk && 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 = 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ésIterator<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ésif (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 MODIFICATIONif (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);}}Debug.log("personnesInitiales:"+personnesInitiales.size()+" - personnesActuelles :"+personnesActuelles.size()+" - auteursSupprimes :"+auteursSupprimes.size()+" - auteursAjoutes :"+auteursAjoutes.size());}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()));}}}}