Rev 444 | Blame | Compare with Previous | 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.ComponentEvent;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.Window;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 String metaPubli = "" ;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<ComponentEvent>() {@Overridepublic void componentSelected(ComponentEvent ce) {mediateur.clicMenu("Publications");}});panel.addButton(annulerBtn);Button validerBtn = new Button("Valider");validerBtn.addSelectionListener(new SelectionListener<ComponentEvent>() {@Overridepublic void componentSelected(ComponentEvent ce) {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<ComponentEvent>() {@Overridepublic void componentSelected(ComponentEvent ce) {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<ComponentEvent>() {@Overridepublic void componentSelected(ComponentEvent ce) {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 ;}}