Rev 924 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;import java.util.ArrayList;import java.util.Iterator;import org.tela_botanica.client.Mediateur;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.Projet;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.ValeurListe;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 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.Info;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.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.layout.FlowLayout;import com.extjs.gxt.ui.client.widget.layout.FormData;import com.extjs.gxt.ui.client.widget.layout.FormLayout;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 boolean listeIndexationDureeChargee = false;private boolean listeIndexationFrequenceChargee = false;private boolean listeLangueChargee = false;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());actualiserTitreFormulaire();creerZoneGeneralites();panneauFormulaire.add(generalitesFieldset);creerZoneComplement();panneauFormulaire.add(complementFieldset);creerZoneIndexation();panneauFormulaire.add(indexationFieldset);creerTabIndex();if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {mediateur.selectionnerProjet(this, projetId);}mediateur.obtenirListeValeurEtRafraichir(this, listeValeurIndexationDureeId);mediateur.obtenirListeValeurEtRafraichir(this, listeValeurIndexationFrequenceId);mediateur.obtenirListeValeurEtRafraichir(this, listeLanguesId);}private void actualiserTitreFormulaire() {String titre = i18nC.projetTitreFormAjout();if (mode.equals(Formulaire.MODE_MODIFIER)) {titre = i18nC.projetTitreFormModif()+" - "+i18nC.id()+": "+projet.getId();}panneauFormulaire.setHeading(titre);}private void creerZoneGeneralites() {FormLayout layout = new FormLayout();layout.setLabelWidth(100);// Fieldset Infos GénéralesgeneralitesFieldset = new FieldSet();generalitesFieldset.setHeading(i18nC.projetTitreInfoGenerale());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 ComplémentcomplementFieldset = new FieldSet();complementFieldset.setHeading(i18nC.projetTitreComplement());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 IndexationindexationFieldset = new FieldSet();indexationFieldset.setHeading(i18nC.projetTitreIndexation());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 Information) {Information info = (Information) nouvellesDonnees;rafraichirInformation(info);} else if (nouvellesDonnees instanceof ValeurListe) {ValeurListe valeursListe = (ValeurListe) nouvellesDonnees;rafraichirValeurListe(valeursListe);Debug.log("une liste de valeurs est arrivée "+valeursListe.getId());}if (etreValide()) {initialiserValidation();repandreRafraichissement();controlerFermetureApresRafraichissement();}}private void rafraichirInformation(Information info) {final String type = info.getType();// Gestion des problèmesif (info.getMessages() != null && !info.getMessages().toString().equals("[]")) {Debug.log("MESSAGES:\n"+info.getMessages().toString());}// Gestion des actionsif (type.equals("selection_projet")) {if (info.getDonnee(0) != null) {projet = (Projet) info.getDonnee(0);}peuplerFormulaire();actualiserTitreFormulaire();} else if (type.equals("modif_projet") || type.equals("ajout_projet") ) {if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String) {String projetId = (String) info.getDonnee(0);projet.setId(projetId);projetValideOk = true;}}// Gestion des messagesif (type.equals("selection_projet")) {Info.display(i18nC.projetTitreFormModif(), info.toString());} else if (type.equals("modif_projet")) {Info.display(i18nC.projetTitreFormModif(), info.toString());} else if (type.equals("ajout_projet")) {if (!UtilString.isEmpty(projet.getId())) {info.setMessage("Le projet '"+projet.getId()+"' a bien été ajouté");}Info.display(i18nC.projetTitreFormAjout(), info.toString());}}private void rafraichirValeurListe(ValeurListe valeursListe) {if (valeursListe.getId() == listeValeurIndexationDureeInt) {valeurListeIndexationDuree = valeursListe;for (Iterator<String> it = valeursListe.keySet().iterator(); it.hasNext();) {listeIndexationDuree.add(valeursListe.get(it.next()));listeIndexationDuree.sort("id_valeur", SortDir.ASC);}listeIndexationDureeChargee = true;if (mode.equals(MODE_MODIFIER)) {if (valeurListeIndexationDuree.get(projet.getIndexationDuree()) != null) {indexationDureeChp.setValue(valeurListeIndexationDuree.get(projet.getIndexationDuree()));indexationDureeChp.validate();}}indexationDureeChp.expand();} else if (valeursListe.getId() == listeValeurIndexationFrequenceInt) {valeurListeIndexationFrequence = valeursListe;for (Iterator<String> it = valeursListe.keySet().iterator(); it.hasNext();) {listeIndexationFrequence.add(valeursListe.get(it.next()));listeIndexationFrequence.sort("id_valeur", SortDir.ASC);}listeIndexationFrequenceChargee = true;if (mode.equals(MODE_MODIFIER)) {if (valeurListeIndexationFrequence.get(projet.getIndexationFreq()) != null) {indexationFrequenceChp.setValue(valeurListeIndexationFrequence.get(projet.getIndexationFreq()));indexationFrequenceChp.validate();}}indexationFrequenceChp.expand();} else if (valeursListe.getId() == listeLanguesInt) {valeurListeLangue = valeursListe;for (Iterator<String> it = valeursListe.keySet().iterator(); it.hasNext();) {listeLangue.add(valeursListe.get(it.next()));listeLangue.sort("id_valeur", SortDir.ASC);}listeLangueChargee = true;if (mode.equals(MODE_MODIFIER)) {if (valeurListeLangue.get(projet.getLangue()) != null) {langueChp.setValue(valeurListeLangue.get(projet.getLangue()));langueChp.validate();}}}}private Boolean etreValide() {Boolean valide = false;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();if (formulaireValideOk) {Projet projetCollecte = collecterProjet();if (projetCollecte != 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 (!UtilString.isEmpty(heure)) {if (!heure.matches(Pattern.heureMinute)) {messages.add("L'heureMinute d'indexation saisie n'est pas valide !");}}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);}if (listeLangueChargee) {if(valeurListeLangue.get(projet.getLangue()) != null) {langueChp.setValue(valeurListeLangue.get(projet.getLangue()));langueChp.validate();}}if (listeIndexationFrequenceChargee) {if (valeurListeIndexationFrequence.get(projet.getIndexationFreq()) != null) {indexationFrequenceChp.setValue(valeurListeIndexationFrequence.get(projet.getIndexationFreq()));indexationFrequenceChp.validate();}}if (listeIndexationDureeChargee) {if (valeurListeIndexationDuree.get(projet.getIndexationDuree()) != null) {indexationDureeChp.setValue(valeurListeIndexationDuree.get(projet.getIndexationDuree()));indexationDureeChp.validate();}}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 projetCollecte = (Projet) projet.cloner(new Projet());projetCollecte.setNom(nomChp.getValue());projetCollecte.setAbreviation(abreviationChp.getValue());projetCollecte.setDescription(descriptionChp.getValue());projetCollecte.setResume(resumeChp.getValue());projetCollecte.setUrl(urlChp.getValue());projetCollecte.setMotsCles(motsClesChp.getValue());projetCollecte.setCitation(citationChp.getValue());projetCollecte.setLicence(licenceChp.getValue());if (langueChp.getValue() != null) {projetCollecte.setLangue(langueChp.getValue().getId());}String markPublic = (markPublicChp.getValue()) ? "1" : "0";projetCollecte.setMarkPublic(markPublic);projetCollecte.setIndexationHeure(indexationHeureChp.getValue());if (indexationFrequenceChp.getValue() != null) {projetCollecte.setIndexationFreq(indexationFrequenceChp.getValue().getId());}if (indexationDureeChp.getValue() != null) {projetCollecte.setIndexationDuree(indexationDureeChp.getValue().getId());}Projet projetARetourner = null;if (!projetCollecte.comparer(projet)) {projetARetourner = projet = projetCollecte;Debug.log(projetARetourner.toString());}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;}}