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.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.util.Pattern;import org.tela_botanica.client.util.UtilArray;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.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;public class ProjetForm extends Formulaire implements Rafraichissable {private Projet projet;private FieldSet generalitesFieldset = null;private TextField<String> nomChp = null;private TextField<String> abreviationChp = null;private TextField<String> 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 CheckBox markPublicChp = null;private FieldSet indexationFieldset = null;private TextField<String> indexationHeureChp = null;private TextField<String> indexationDureeChp = null;private TextField<String> 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 mediateurCourrant, String projetId) {projet = new Projet();projet.setId(projetId);String modeDeCreation = (projet.getId().isEmpty() ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);panneauFormulaire.setLayout(new FlowLayout());String titre = genererTitreFormulaire();panneauFormulaire.setHeading(titre);creerZoneGeneralites();panneauFormulaire.add(generalitesFieldset);creerZoneComplement();panneauFormulaire.add(complementFieldset);creerZoneIndexation();panneauFormulaire.add(indexationFieldset);if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {mediateurCourrant.selectionnerProjet(this, projetId);}}private String genererTitreFormulaire() {String titre = "Ajout d'une projet";if (mode.equals(Formulaire.MODE_MODIFIER)) {titre = "Modification d'une 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 TextField<String>();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);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("Heure d'indexation");indexationFieldset.add(indexationHeureChp, new FormData(80, 0));// liste 1072indexationDureeChp = new TextField<String>();indexationDureeChp.setFieldLabel("Durée d'indexation");indexationFieldset.add(indexationDureeChp, new FormData(80, 0));// liste 1073indexationFrequenceChp = new TextField<String>();indexationFrequenceChp.setFieldLabel("Fréquence d'indexation");indexationFieldset.add(indexationFrequenceChp, new FormData(50, 0));}public void rafraichir(Object nouvellesDonnees) {if (nouvellesDonnees instanceof Projet) {// Si on a reçu les details d'une projetrafraichirProjet((Projet) nouvellesDonnees);GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), 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_modifiee";if (mode.equals(Formulaire.MODE_AJOUTER)) {type = "projet_ajoutee";}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 uri = urlChp.getValue();if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {messages.add("L'URL 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() {}private Projet collecterProjet() {Projet projetARetourner = null;Projet projetCollectee = (Projet) projet.cloner(new Projet());// TODO : collecter le reste des champsif (!projetCollectee.comparer(projet)) {projetARetourner = projet = projetCollectee;}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;}}