Rev 902 | 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 org.tela_botanica.client.Mediateur;import org.tela_botanica.client.configuration.Configuration;import org.tela_botanica.client.i18n.Constantes;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;import org.tela_botanica.client.modeles.PersonneListe;import org.tela_botanica.client.modeles.Projet;import org.tela_botanica.client.modeles.Structure;import org.tela_botanica.client.modeles.StructureListe;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.ValeurListe;import org.tela_botanica.client.util.Pattern;import org.tela_botanica.client.util.UtilArray;import com.extjs.gxt.ui.client.Style.SortDir;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.MessageBox;import com.extjs.gxt.ui.client.widget.button.Button;import com.extjs.gxt.ui.client.widget.form.CheckBox;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.TextArea;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.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;public class ProjetForm extends Formulaire implements Rafraichissable {private Projet projet;private String listeValeurIndexationDureeId = "dureesIndexation";private int listeValeurIndexationDureeInt = 1072;private String listeValeurIndexationFrequenceId = "frequencesIndexation";private int listeValeurIndexationFrequenceInt = 1073;private String listeLanguesId = "langues";private int listeLanguesInt = 1071;private ListStore<Valeur> listeIndexationDuree = null;private ListStore<Valeur> listeIndexationFrequence = null;private ListStore<Valeur> listeLangue = null;private ValeurListe valeurListeIndexationDuree = null;private ValeurListe valeurListeIndexationFrequence = null;private ValeurListe valeurListeLangue = null;private FieldSet generalitesFieldset = null;private TextField<String> nomChp = null;private TextField<String> abreviationChp = null;private TextArea descriptionChp = null;private TextArea resumeChp = null;private TextField<String> urlChp = null;private FieldSet complementFieldset = null;private TextField<String> motsClesChp = null;private TextField<String> citationChp = null;private TextField<String> licenceChp = null;private ComboBox<Valeur> langueChp = null;private CheckBox markPublicChp = null;private FieldSet indexationFieldset = null;private TextField<String> indexationHeureChp = null;private ComboBox<Valeur> indexationDureeChp = null;private ComboBox<Valeur> indexationFrequenceChp = null;private boolean formulaireValideOk = false;private boolean projetValideOk = false;private Rafraichissable vueExterneARafraichirApresValidation = null;public ProjetForm(Mediateur mediateurCourrant, String projetId) {initialiserProjetForm(mediateurCourrant, projetId);}public ProjetForm(Mediateur mediateurCourrant, String projetId, Rafraichissable vueARafraichirApresValidation) {vueExterneARafraichirApresValidation = vueARafraichirApresValidation;initialiserProjetForm(mediateurCourrant, projetId);}private void initialiserProjetForm(Mediateur mediateurCourant, String projetId) {projet = new Projet();projet.setId(projetId);String modeDeCreation = (projet.getId().isEmpty() ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);initialiserFormulaire(mediateurCourant, modeDeCreation, MenuApplicationId.PROJET);panneauFormulaire.setLayout(new FlowLayout());String titre = genererTitreFormulaire();panneauFormulaire.setHeading(titre);creerZoneGeneralites();panneauFormulaire.add(generalitesFieldset);creerZoneComplement();panneauFormulaire.add(complementFieldset);creerZoneIndexation();panneauFormulaire.add(indexationFieldset);creerTabIndex();if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {mediateurCourant.selectionnerProjet(this, projetId);}mediateurCourant.obtenirListeValeurEtRafraichir(this, listeValeurIndexationDureeId);mediateurCourant.obtenirListeValeurEtRafraichir(this, listeValeurIndexationFrequenceId);mediateurCourant.obtenirListeValeurEtRafraichir(this, listeLanguesId);}private String genererTitreFormulaire() {String titre = "Ajout d'un projet";if (mode.equals(Formulaire.MODE_MODIFIER)) {titre = "Modification d'un projet - "+i18nC.id()+": "+projet.getId();}return titre;}private void creerZoneGeneralites() {FormLayout layout = new FormLayout();layout.setLabelWidth(100);// Fieldset Infos GénéralesgeneralitesFieldset = new FieldSet();generalitesFieldset.setHeading("Informations générales");generalitesFieldset.setCollapsible(true);generalitesFieldset.setLayout(layout);nomChp = new TextField<String>();nomChp.setName("cpu");nomChp.setFieldLabel("Nom");generalitesFieldset.add(nomChp, new FormData(450, 0));abreviationChp = new TextField<String>();abreviationChp.setFieldLabel("Abréviation");generalitesFieldset.add(abreviationChp, new FormData(450, 0));descriptionChp = new TextArea();descriptionChp.setFieldLabel("Description");generalitesFieldset.add(descriptionChp, new FormData(450, 0));resumeChp = new TextArea();resumeChp.setFieldLabel("Résumé");generalitesFieldset.add(resumeChp, new FormData(450, 0));urlChp = new TextField<String>();urlChp.setFieldLabel("URL du projet");generalitesFieldset.add(urlChp, new FormData(450, 0));}private void creerZoneComplement() {FormLayout layout = new FormLayout();layout.setLabelWidth(100);// Fieldset EditioncomplementFieldset = new FieldSet();complementFieldset.setHeading("Informations complémentaires");complementFieldset.setCollapsible(true);complementFieldset.setLayout(layout);motsClesChp = new TextField<String>();motsClesChp.setFieldLabel("Mots Clés");complementFieldset.add(motsClesChp);citationChp = new TextField<String>();citationChp.setFieldLabel("Citation");complementFieldset.add(citationChp);licenceChp = new TextField<String>();licenceChp.setFieldLabel("Licence");complementFieldset.add(licenceChp);listeLangue = new ListStore<Valeur>();langueChp = new ComboBox<Valeur>();langueChp.setStore(listeLangue);langueChp.setDisplayField("nom");langueChp.setEditable(true);langueChp.setForceSelection(true);langueChp.setTypeAhead(true);langueChp.setFieldLabel("Langue");complementFieldset.add(langueChp);markPublicChp = new CheckBox();markPublicChp.setFieldLabel("Public");complementFieldset.add(markPublicChp);}private void creerZoneIndexation() {FormLayout layout = new FormLayout();layout.setLabelWidth(100);// Fieldset EditionindexationFieldset = new FieldSet();indexationFieldset.setHeading("Indexation");indexationFieldset.setCollapsible(true);indexationFieldset.setLayout(layout);indexationHeureChp = new TextField<String>();indexationHeureChp.setFieldLabel(i18nC.projetIndexationHeure());indexationFieldset.add(indexationHeureChp, new FormData(80, 0));// liste 1073listeIndexationFrequence = new ListStore<Valeur>();indexationFrequenceChp = new ComboBox<Valeur>();indexationFrequenceChp.setStore(listeIndexationFrequence);indexationFrequenceChp.setDisplayField("nom");indexationFrequenceChp.setEditable(true);indexationFrequenceChp.setForceSelection(true);indexationFrequenceChp.setTypeAhead(true);indexationFrequenceChp.setFieldLabel(i18nC.projetIndexationFrequence());indexationFieldset.add(indexationFrequenceChp, new FormData(120, 0));// liste 1072listeIndexationDuree = new ListStore<Valeur>();indexationDureeChp = new ComboBox<Valeur>();indexationDureeChp.setStore(listeIndexationDuree);indexationDureeChp.setDisplayField("nom");indexationDureeChp.setEditable(true);indexationDureeChp.setForceSelection(true);indexationDureeChp.setTypeAhead(true);indexationDureeChp.setFieldLabel(i18nC.projetIndexationDuree());indexationFieldset.add(indexationDureeChp, new FormData(80, 0));}private void creerTabIndex() {nomChp.setTabIndex(1);abreviationChp.setTabIndex(2);descriptionChp.setTabIndex(3);resumeChp.setTabIndex(4);urlChp.setTabIndex(5);motsClesChp.setTabIndex(6);citationChp.setTabIndex(7);licenceChp.setTabIndex(8);langueChp.setTabIndex(9);markPublicChp.setTabIndex(10);indexationHeureChp.setTabIndex(11);indexationFrequenceChp.setTabIndex(12);indexationDureeChp.setTabIndex(13);nomChp.focus();}public void rafraichir(Object nouvellesDonnees) {if (nouvellesDonnees instanceof Projet) {// Si on a reçu les details d'une projetrafraichirProjet((Projet) nouvellesDonnees);GWT.log("Un projet est arrivé : "+((Projet) nouvellesDonnees).getNom(), null);}if(nouvellesDonnees instanceof ValeurListe) {ValeurListe nValeurListe = (ValeurListe)nouvellesDonnees;if(nValeurListe.getId() == listeValeurIndexationDureeInt) {valeurListeIndexationDuree = nValeurListe;for(Iterator<String> it = nValeurListe.keySet().iterator(); it.hasNext();) {listeIndexationDuree.add(nValeurListe.get(it.next()));listeIndexationDuree.sort("id_valeur", SortDir.ASC);}if(mode.equals(MODE_MODIFIER)) {if(valeurListeIndexationDuree.get(projet.getIndexationDuree()) != null) {indexationDureeChp.setRawValue(valeurListeIndexationDuree.get(projet.getIndexationDuree()).getNom());}}indexationDureeChp.expand();}if(nValeurListe.getId() == listeValeurIndexationFrequenceInt) {valeurListeIndexationFrequence = nValeurListe;for(Iterator<String> it = nValeurListe.keySet().iterator(); it.hasNext();) {listeIndexationFrequence.add(nValeurListe.get(it.next()));listeIndexationFrequence.sort("id_valeur", SortDir.ASC);}if(mode.equals(MODE_MODIFIER)) {if(valeurListeIndexationFrequence.get(projet.getIndexationFreq()) != null) {indexationFrequenceChp.setRawValue(valeurListeIndexationFrequence.get(projet.getIndexationFreq()).getNom());}}indexationFrequenceChp.expand();}if(nValeurListe.getId() == listeLanguesInt) {valeurListeLangue = nValeurListe;for(Iterator<String> it = nValeurListe.keySet().iterator(); it.hasNext();) {listeLangue.add(nValeurListe.get(it.next()));listeLangue.sort("id_valeur", SortDir.ASC);}if(mode.equals(MODE_MODIFIER)) {if(valeurListeLangue.get(projet.getLangue()) != null) {langueChp.setRawValue(valeurListeLangue.get(projet.getLangue()).getNom());}}}GWT.log("une liste de valeurs est arrivée "+nValeurListe.getId(), null);}if (etreValide()) {initialiserValidation();repandreRafraichissement();controlerFermetureApresRafraichissement();}}private void rafraichirProjet(Projet proj) {projet = proj;peuplerFormulaire();}private Boolean etreValide() {Boolean valide = false;GWT.log("formulaire"+formulaireValideOk+" - Projet :"+projetValideOk, null);if (formulaireValideOk && projetValideOk) {valide = true;}return valide;}private void initialiserValidation() {formulaireValideOk = false;projetValideOk = false;}private void repandreRafraichissement() {if (vueExterneARafraichirApresValidation != null) {String type = "projet_modifie";if (mode.equals(Formulaire.MODE_AJOUTER)) {type = "projet_ajoute";}Information info = new Information(type);info.setDonnee(0, projet);vueExterneARafraichirApresValidation.rafraichir(info);}}public boolean soumettreFormulaire() {formulaireValideOk = verifierFormulaire();GWT.log("Form?"+formulaireValideOk, null);if (formulaireValideOk) {Projet projetCollecte = collecterProjet();if (projetCollecte != null) {GWT.log("Info collectée ? ok", null);if (mode.equals(Formulaire.MODE_AJOUTER)) {mediateur.ajouterProjet(this, projetCollecte);} else if (mode.equals(Formulaire.MODE_MODIFIER)) {mediateur.modifierProjet(this, projetCollecte);}}}return formulaireValideOk;}protected boolean verifierFormulaire() {boolean valide = true;ArrayList<String> messages = new ArrayList<String>();String titre = nomChp.getValue();if (titre == null || titre.equals("")) {messages.add("Veuillez saisir le nom du projet !");}String abr = abreviationChp.getValue();if (abr == null || abr.equals("")) {messages.add("Veuillez saisir l'abréviation du projet !");}String desc = descriptionChp.getValue();if (desc == null || desc.equals("")) {messages.add("Veuillez saisir la description du projet !");}String resume = resumeChp.getValue();if (resume == null || resume.equals("")) {messages.add("Veuillez saisir le résumé du projet !");}String uri = urlChp.getValue();if (uri != null && ! uri.trim().isEmpty() && ! uri.matches(Pattern.url)) {messages.add("L'URL saisie n'est pas valide !");}String heure = indexationHeureChp.getValue();if (heure != null && ! heure.isEmpty() && !heure.matches(Pattern.heureMinute)) {messages.add("L'heureMinute d'indexation saisie n'est pas valide !");} else {if(heure.matches(Pattern.heureMinute)) {heure += ":00";}}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() {nomChp.setValue(projet.getNom());abreviationChp.setValue(projet.getAbreviation());descriptionChp.setValue(projet.getDescription());resumeChp.setValue(projet.getResume());urlChp.setValue(projet.getUrl());motsClesChp.setValue(projet.getMotsCles());citationChp.setValue(projet.getCitation());licenceChp.setValue(projet.getLicence());if(projet.getMarkPublic().equals("1")) {markPublicChp.setValue(true);} else {markPublicChp.setValue(false);}String[] heureTab = projet.getIndexationHeure().split(":");if(heureTab.length > 1) {String heure = heureTab[0]+":"+heureTab[1];if(heure.matches(Pattern.heureMinute)) {indexationHeureChp.setValue(heure);}}doLayout(true);}private Projet collecterProjet() {Projet projetARetourner = new Projet();Projet projetCollecte = (Projet) projet.cloner(new Projet());projetARetourner.setNom(nomChp.getValue());projetARetourner.setAbreviation(abreviationChp.getValue());projetARetourner.setDescription(descriptionChp.getValue());projetARetourner.setResume(resumeChp.getValue());projetARetourner.setUrl(urlChp.getValue());projetARetourner.setMotsCles(motsClesChp.getValue());projetARetourner.setCitation(citationChp.getValue());projetARetourner.setLicence(licenceChp.getValue());if(markPublicChp.getValue()) {projetCollecte.setMarkPublic("1");} else {projetCollecte.setMarkPublic("0");}projetARetourner.setIndexationHeure(indexationHeureChp.getValue());projetARetourner.setIndexationDuree(indexationDureeChp.getValue().getId());projetARetourner.setIndexationFreq(indexationFrequenceChp.getValue().getId());if (!projetCollecte.comparer(projet)) {projetARetourner = projet = projetCollecte;}//GWT.log(projetARetourner.toString()+" "+projetARetourner., null)return projetARetourner;}protected void reinitialiserFormulaire() {if (mode.equals(Formulaire.MODE_MODIFIER)) {mediateur.afficherFormProjet(projet.getId());} else {mediateur.afficherFormProjet(null);}}@Overrideprotected SelectionListener<ButtonEvent> creerEcouteurValidation() {SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {@Overridepublic void componentSelected(ButtonEvent ce) {String code = ((Button) ce.getComponent()).getData("code");if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {soumettreFormulaire();clicBoutonvalidation = true;} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {soumettreFormulaire();} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {mediateur.clicMenu(menuIdCourant);} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {reinitialiserFormulaire();}}};return ecouteur;}}