Rev 734 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;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.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Information;import org.tela_botanica.client.modeles.Personne;import org.tela_botanica.client.modeles.PersonneListe;import org.tela_botanica.client.modeles.Publication;import org.tela_botanica.client.modeles.PublicationListe;import org.tela_botanica.client.modeles.Structure;import org.tela_botanica.client.modeles.StructureListe;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.Events;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;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.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.TextField;import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;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 LayoutContainer implements Rafraichissable {private Mediateur mediateur = null;FormPanel panel = null;private String idStructureEdition = "";private String idPublication = "";private String idProjet = "";private PersonneListe listePersonneAuteur = null;private ListStore<Personne> storeAuteurs = null;private ArrayList<ComboBox<Personne>> listeAuteurs = null;private String idAuteurs = "";private TextField<String> nomArticle = null;private TextField<String> intituleCollPub = null;private TextField<String> uriPub = null;private ComboBox<Structure> comboListeEditeurs = null;private ListStore<Structure> storeEditeurs = null;private TextField<String> datePub = null;private TextField<String> tomPub = null;private TextField<String> fasciculePub = null;private TextField<String> pagesPub = null;private String mode = "AJOUT";private boolean formValide = false;private boolean validationPublication = false;private boolean validationAuteurs = false;FieldSet fieldSetAuteurs = null;private Publication publi;protected boolean listeAuteurInitialisee = false;private LayoutContainer conteneurChamps;private Button annulerBtn;private Button validerBtn;public PublicationForm() {setId("x-form-pub");setLayout(new FitLayout());mediateur = Registry.get(RegistreId.MEDIATEUR);storeAuteurs = new ListStore<Personne>();listePersonneAuteur = new PersonneListe();// Création de la disposition : FIELDSETFormLayout layoutFieldset = new FormLayout();layoutFieldset.setLabelWidth(200);//layoutFieldset.setPadding(4);//+-----------------------------------------------------------------------------------------------------------+// Création du panneau Formulairepanel = new FormPanel();panel.setFrame(true);panel.setIconStyle("icone-form-ajouter");panel.setCollapsible(false);panel.setHeading("Ajout d'une publication");panel.setButtonAlign(HorizontalAlignment.CENTER);panel.setLayout(new FlowLayout());add(panel);// Fieldset AuteurfieldSetAuteurs = new FieldSet();fieldSetAuteurs.setHeading("Auteur(s)");fieldSetAuteurs.setCollapsible(true);fieldSetAuteurs.setLayout(layoutFieldset);panel.add(fieldSetAuteurs);genererChampsAuteur("", false);// Création de la disposition : FIELDSETFormLayout layoutFieldset2 = new FormLayout();layoutFieldset.setLabelWidth(200);//layoutFieldset.setPadding(4);// Fieldset Infos GénéralesFieldSet fieldSetInfosGen = new FieldSet();fieldSetInfosGen.setHeading("Informations générales");fieldSetInfosGen.setCollapsible(true);fieldSetInfosGen.setLayout(layoutFieldset2);panel.add(fieldSetInfosGen);nomArticle = new TextField<String>();nomArticle.setName("cpu");nomArticle.setFieldLabel("Titre de l'article ou de l'ouvrage");intituleCollPub = new TextField<String>();intituleCollPub.setFieldLabel("Intitulé de la collection ou de la revue");uriPub = new TextField<String>();uriPub.setFieldLabel("URI de la publication");fieldSetInfosGen.add(nomArticle);fieldSetInfosGen.add(intituleCollPub);fieldSetInfosGen.add(uriPub);// Création de la disposition : FIELDSETFormLayout layoutFieldset3 = new FormLayout();//layoutFieldset.setPadding(4);// Fieldset EditionFieldSet fieldSetEdition = new FieldSet();fieldSetEdition.setHeading("Edition");fieldSetEdition.setCollapsible(true);fieldSetEdition.setLayout(layoutFieldset3);panel.add(fieldSetEdition);storeEditeurs = new ListStore<Structure>();comboListeEditeurs = new ComboBox<Structure>();comboListeEditeurs.setEmptyText("Sélectionner un editeur...");comboListeEditeurs.setFieldLabel("Editeur de la publication");comboListeEditeurs.setDisplayField("nom");comboListeEditeurs.setStore(storeEditeurs);comboListeEditeurs.setEditable(true);comboListeEditeurs.setTypeAhead(true);comboListeEditeurs.setTriggerAction(TriggerAction.QUERY);datePub = new TextField<String>();datePub.setMaxLength(4);datePub.setMinLength(4);datePub.setFieldLabel("Année de publication");tomPub = new TextField<String>();tomPub.setFieldLabel("Tome");fasciculePub = new TextField<String>();fasciculePub.setFieldLabel("Fascicule");pagesPub = new TextField<String>();pagesPub.setFieldLabel("Pages");fieldSetEdition.add(comboListeEditeurs, new FormData(500, 20));fieldSetEdition.add(datePub, new FormData(35, 20));fieldSetEdition.add(tomPub, new FormData(75, 20));fieldSetEdition.add(fasciculePub, new FormData(75, 20));fieldSetEdition.add(pagesPub, new FormData(100, 20));// Ajout des boutons au panneau formulaireannulerBtn = new Button("Annuler");annulerBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {mediateur.clicMenu("Publications");}});panel.addButton(annulerBtn);validerBtn = new Button("Valider");validerBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {soumettreFormulaire();}});panel.addButton(validerBtn);mediateur.clicObtenirListeEditeurs(this);mediateur.clicObtenirListeAuteurs(this);}public void rafraichir(Object nouvellesDonnees) {// Si on a reçu les details d'une publicationif (nouvellesDonnees instanceof Publication) {mode = "MODIF" ;publi = (Publication) nouvellesDonnees;genererChampsAuteur(publi.getIdAuteur(), false);mediateur.clicObtenirListeAuteurs(this);nomArticle.setValue(publi.getTitre());intituleCollPub.setValue(publi.getCollection());uriPub.setValue(publi.getURI());datePub.setRawValue(publi.getDateParution());tomPub.setValue(publi.getIndicationNvt());fasciculePub.setValue(publi.getFascicule());pagesPub.setValue(publi.getPages());idPublication = publi.getId();idStructureEdition = publi.getEditeur();idProjet = publi.getProjet() ;panel.setHeading("Modification d'une publication");}// Si on a reçu une liste des editeursif(nouvellesDonnees instanceof StructureListe) {storeEditeurs.removeAll();StructureListe listeStructure = (StructureListe) nouvellesDonnees;storeEditeurs.add((List<Structure>) listeStructure.toList());if (mode.equals("MODIF")) {comboListeEditeurs.setValue((Structure) listeStructure.get(idStructureEdition));}comboListeEditeurs.expand();}if (nouvellesDonnees instanceof Information) {Information nouvellesInfos = (Information)nouvellesDonnees;if(nouvellesInfos.getType().equals("liste_personne")) {listePersonneAuteur = (PersonneListe)nouvellesInfos.getDonnee(0);storeAuteurs.removeAll();for (Iterator<String> it = listePersonneAuteur.keySet().iterator(); it.hasNext();) {Personne p = listePersonneAuteur.get(it.next());storeAuteurs.add(p);}if (mode.equals("MODIF")) {genererChampsAuteur(publi.getIdAuteur(), false);} else {listeAuteurs.get(0).expand();}listeAuteurInitialisee = true;}if (nouvellesInfos.getType().equals("publication_valide")) {validationPublication = true;idPublication = ""+nouvellesInfos.getDonnee(0);mediateur.ajouterAuteurPublication(this,idAuteurs,"2360",idPublication);}if (nouvellesInfos.getType().equals("auteur_valide")) {validationAuteurs = true;}if(formValide && validationPublication && validationAuteurs) {mediateur.rechargerListePublication();}}}private void soumettreFormulaire() {String auteur = "";String idAuteur = "";for (int i = 0; i < listeAuteurs.size(); i++) {if(listeAuteurs.get(i).getValue() != null) {idAuteur += listeAuteurs.get(i).getValue().getId();auteur += listeAuteurs.get(i).getValue().getNom()+ " "+listeAuteurs.get(i).getValue().getPrenom();if (i != listeAuteurs.size() -1) {auteur += "|";idAuteur += ",";}}}String erreurs = "";if(idAuteur == null || idAuteur.equals("")) {erreurs += "Veuillez entrer au moins un auteur ! ";} else {idAuteurs = idAuteur;}String nomArt = nomArticle.getValue();if(nomArt == null || nomArt.equals("")) {erreurs += "Veuillez entrer le nom de l'article ! ";}String collPub = intituleCollPub.getValue();String pub = nomArticle.getValue()+" "+intituleCollPub.getValue();String uri = uriPub.getValue();String editeur = "";if(comboListeEditeurs.getValue() == null) {//erreurs += "Veuillez sélectionner un éditeur ! ";} else {editeur = comboListeEditeurs.getValue().getId();if(editeur == null || editeur.equals("")) {erreurs += "Veuillez sélectionner un éditeur ! ";}}String datePar = datePub.getRawValue();if(datePar == null || datePar.equals("")) {erreurs += "Veuillez entrer une date ! ";} else {String resDate = analyserDate(datePar);if(resDate.equals("")) {datePar = datePar+"-00-00";} else {erreurs += resDate;}}String tome = tomPub.getValue();String fascicule = fasciculePub.getValue();String pages = pagesPub.getValue();if(erreurs.length() > 0) {MessageBox.alert("Erreur dans la saisie des champs", erreurs, null);return;}formValide = true;this.setEnabled(false);mediateur.afficherPopinChargement();if (mode.equals("AJOUT")) {Publication publi = new Publication(pub,uri,auteur, idAuteur, collPub,nomArt,editeur,datePar,tome,fascicule,pages);mediateur.ajouterPublication(this, publi);} else if (mode.equals("MODIF")) {Publication publi = new Publication(idPublication,idProjet,pub,uri,auteur,idAuteur, collPub,nomArt,editeur,datePar,tome,fascicule,pages);mediateur.modifierPublication(this, publi);}}private String analyserDate(String datePar) {if(datePar.matches("^[0-2][0-9]{3}$")) {return "";} else {return "Format de date incorrect ";}}private void genererChampsAuteur(String auteursStr, boolean ajouter) {String[] auteurs = auteursStr.split("|");conteneurChamps = new LayoutContainer();if (auteurs.length != 0) {listeAuteurs = new ArrayList<ComboBox<Personne>>(auteurs.length);} else {listeAuteurs = new ArrayList<ComboBox<Personne>>(1);ajouter = true ;}fieldSetAuteurs.removeAll();int i = 0;for (i = 0; i < auteurs.length; i++) {conteneurChamps.add(creerTextFieldEtBouton(auteurs[i]));}if (ajouter) {conteneurChamps.add(creerTextFieldEtBouton(null));}Button ajoutAuteurBtn = new Button("Ajouter un auteur");ajoutAuteurBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {creerTextFieldEtBouton("");int nbAuteurs = 1;for(Iterator<ComboBox<Personne>> it = listeAuteurs.iterator(); it.hasNext();) {if(listeAuteurs.size() > 1) {it.next().setFieldLabel("Auteur "+nbAuteurs);nbAuteurs++;}}fieldSetAuteurs.layout(true);}});fieldSetAuteurs.add(conteneurChamps);fieldSetAuteurs.add(ajoutAuteurBtn);fieldSetAuteurs.layout(true);}public HorizontalPanel creerTextFieldEtBouton(String valeurDefaut) {final HorizontalPanel p = new HorizontalPanel();// Création de la disposition : FIELDSETFormLayout layoutPanelTF = new FormLayout();p.setLayout(layoutPanelTF);final ComboBox<Personne> tf = new ComboBox<Personne>();tf.setDisplayField("fmt_nom_complet");tf.setStore(storeAuteurs);tf.setEmptyText("Selectionnez un auteur...");String label = "Auteur ";tf.setFieldLabel(label);if(valeurDefaut != null && !valeurDefaut.equals("") ) {Personne auteur = listePersonneAuteur.get(valeurDefaut);tf.setValue(auteur);}listeAuteurs.add(tf);tf.setSize(200, 20);LayoutContainer lc = new LayoutContainer();lc.setLayout(new FormLayout());lc.add(tf);Button supp = new Button("-");supp.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {int nbAuteurs = 1;if(listeAuteurs.size() != 1) {for(Iterator<ComboBox<Personne>> it = listeAuteurs.iterator(); it.hasNext();) {it.next().setFieldLabel("Auteur "+nbAuteurs);nbAuteurs++;}}listeAuteurs.remove(tf);conteneurChamps.remove(p);fieldSetAuteurs.layout(true);}});p.add(lc);p.add(supp);conteneurChamps.add(p);fieldSetAuteurs.layout(true);return p;}public void obtenirListeAuteurs() {mediateur.clicObtenirListeAuteurs(this);}}