Rev 505 | 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.Personne;import org.tela_botanica.client.modeles.PersonneListe;import org.tela_botanica.client.modeles.Publication;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.ButtonEvent;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.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.user.client.ui.HTML;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 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 DateField datePub = null;private TextField<String> tomPub = null;private TextField<String> fasciculePub = null;private TextField<String> pagesPub = null;private String mode = "AJOUT";FieldSet fieldSetAuteurs = null;private Publication publi;public PublicationForm() {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 DateField();datePub.setFieldLabel("Date 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(75, 20));fieldSetEdition.add(tomPub);fieldSetEdition.add(fasciculePub);fieldSetEdition.add(pagesPub, new FormData(100, 20));// Ajout des boutons au panneau formulaireButton annulerBtn = new Button("Annuler");annulerBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {mediateur.clicMenu("Publications");}});panel.addButton(annulerBtn);Button validerBtn = new Button("Valider");validerBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {soumettreFormulaire();}});panel.addButton(validerBtn);mediateur.clicObtenirListeAuteurs(this);mediateur.clicObtenirListeEditeurs(this);}public void rafraichir(Object nouvelleDonnees) {// Si on a reçu les details d'une publicationif (nouvelleDonnees instanceof Publication) {mode = "MODIF" ;publi = (Publication) nouvelleDonnees;genererChampsAuteur(publi.getIdAuteur(), false);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 (nouvelleDonnees instanceof StructureListe) {storeEditeurs.removeAll();StructureListe listeStructure = (StructureListe) nouvelleDonnees;storeEditeurs.add((List<Structure>) listeStructure.toList());if (mode.equals("MODIF")) {comboListeEditeurs.setValue((Structure) listeStructure.get(idStructureEdition));}comboListeEditeurs.expand();}if (nouvelleDonnees instanceof PersonneListe) {storeAuteurs.removeAll();listePersonneAuteur = (PersonneListe)nouvelleDonnees;Set<String> listeStructureSet = listePersonneAuteur.keySet();for (Iterator<String> it = listeStructureSet.iterator(); it.hasNext();) {storeAuteurs.add(listePersonneAuteur.get(it.next()));}if (mode.equals("MODIF")) {genererChampsAuteur(publi.getIdAuteur(), false);}}}private void soumettreFormulaire() {String auteur = "";for (int i = 0; i < listeAuteurs.size(); i++) {auteur += listeAuteurs.get(i).getValue();if (i != listeAuteurs.size() -1) {auteur += "|";}}String nomArt = nomArticle.getValue();String pub = nomArticle.getValue()+" "+intituleCollPub.getValue();String collPub = intituleCollPub.getValue();String uri = uriPub.getValue();String editeur = comboListeEditeurs.getValue().getId();String datePar = datePub.getRawValue();String tome = tomPub.getValue();String fascicule = fasciculePub.getValue();String pages = pagesPub.getValue();if (mode.equals("AJOUT")) {Publication publi = new Publication(pub,uri,auteur,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,collPub,nomArt,editeur,datePar,tome,fascicule,pages);mediateur.modifierPublication(this, publi);}}private void genererChampsAuteur(String auteursStr, boolean ajouter) {String[] auteurs = auteursStr.split(";;");LayoutContainer 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();//final Label labelAuteur = new Label("Auteur de la publication :");final HTML labelAuteur = new HTML("<label class=\"x-form-item-label x-formulaire-auteur-label\" style=\"width: 100px;\">Auteur(s) de l'article ou de l'ouvrage:</label>");fieldSetAuteurs.add(labelAuteur);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) {String idsAuteurs = "" ;for(int i = 0 ; i < listeAuteurs.size() ; i++) {Personne enCours = listeAuteurs.get(i).getValue();String valeurChampAuteur = " ";if(enCours != null) {valeurChampAuteur = enCours.getId();} else {valeurChampAuteur = null;}if(valeurChampAuteur != null) {idsAuteurs += valeurChampAuteur;}idsAuteurs += ";;";}genererChampsAuteur(idsAuteurs,true);}});fieldSetAuteurs.add(conteneurChamps);fieldSetAuteurs.add(ajoutAuteurBtn);fieldSetAuteurs.layout();}public HorizontalPanel creerTextFieldEtBouton(String valeurDefaut) {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);if(valeurDefaut != null && !valeurDefaut.equals("") ) {Personne auteur = listePersonneAuteur.get((String)valeurDefaut);tf.setValue(auteur);}tf.setSize(200, 20);listeAuteurs.add(tf);Button supp = new Button("-");supp.addSelectionListener(new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent be) {String idsAuteurs = "";listeAuteurs.remove(tf);for (int i = 0; i < listeAuteurs.size(); i++) {Personne enCours = listeAuteurs.get(i).getValue() ;String valeurChampAuteur = " ";if (enCours != null) {valeurChampAuteur = enCours.getId();} else {valeurChampAuteur = null;}if (valeurChampAuteur != null & !valeurChampAuteur.equals("")) {idsAuteurs += valeurChampAuteur;} else {idsAuteurs += " ";}if (i != listeAuteurs.size() - 1) {idsAuteurs += ";;";}}genererChampsAuteur(idsAuteurs,false);}});p.add(tf);p.add(supp);fieldSetAuteurs.add(p);return p;}}