New file |
0,0 → 1,532 |
package org.tela_botanica.client.vues.projet; |
|
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.Valeur; |
import org.tela_botanica.client.modeles.ValeurListe; |
import org.tela_botanica.client.modeles.projet.Projet; |
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 org.tela_botanica.client.vues.Formulaire; |
|
import com.extjs.gxt.ui.client.Style.SortDir; |
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.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érales |
generalitesFieldset = 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ément |
complementFieldset = 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 Indexation |
indexationFieldset = 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 1073 |
listeIndexationFrequence = 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 1072 |
listeIndexationDuree = 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èmes |
if (info.getMessages() != null && !info.getMessages().toString().equals("[]")) { |
Debug.log("MESSAGES:\n"+info.getMessages().toString()); |
} |
|
// Gestion des actions |
if (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 messages |
if (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; |
} |
|
public 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; |
} |
|
public void reinitialiserFormulaire() { |
if (mode.equals(Formulaire.MODE_MODIFIER)) { |
mediateur.afficherFormProjet(projet.getId()); |
} else { |
mediateur.afficherFormProjet(null); |
} |
} |
|
} |