Subversion Repositories eFlore/Applications.coel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1414 → Rev 1415

/trunk/src/org/tela_botanica/client/modeles/personne/Personne.java
New file
0,0 → 1,386
package org.tela_botanica.client.modeles.personne;
 
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.modeles.aDonnee;
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilString;
 
import com.extjs.gxt.ui.client.data.ModelData;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.json.client.JSONObject;
 
public class Personne extends aDonnee {
 
private static final long serialVersionUID = -6974716696155349332L;
 
public static final String PREFIXE = "cp";
public static final String TELEPHONE_FIXE = "FIX";
public static final String TELEPHONE_GSM = "GSM";
public static final String TELEPHONE_FAX = "FAX";
public static final String ETRE_DECEDE = "30745";
public static final String ETRE_VIVANT = "30746";
public static String[] champsObligatoires = {"cp_id_personne"};
private PublicationAPersonneListe publicationsLiees= null;
public Personne() {
}
 
public Personne(ModelData model)
{
Map<String, Object> a = model.getProperties();
 
Set<String> cles = a.keySet();
Iterator<String> it = cles.iterator();
while (it.hasNext()) {
String cle = it.next();
if (a.get(cle) != null) {
String cleObjet = cle.replaceFirst("^"+getPrefixe()+"_", "");
this.set(cleObjet, a.get(cle));
}
}
}
public Personne(JSONObject personne) {
initialiserModele(personne);
//Ajout du champ courriel principal
this.setCourrielPrinc(this.getInfoDenormaliseParPosition(this.renvoyerValeurCorrecte("truk_courriel"), 1));
}
@Override
protected String getPrefixe() {
return PREFIXE;
}
protected String[] getChampsObligatoires() {
return champsObligatoires;
}
public Object obtenirValeurChamp(String nomChamp) {
return renvoyerValeurCorrecte(nomChamp);
}
public Date getDate(String nomChamp) {
String strDate = renvoyerValeurCorrecte(nomChamp);
Date dateRetour = null;
try {
if ((strDate != null) && (!strDate.equals("0000-00-00"))) {
dateRetour = DateTimeFormat.getFormat("yyyy-MM-dd").parseStrict(strDate);
}
} catch (StringIndexOutOfBoundsException e) {
GWT.log("Impossible de parser la date " + strDate, e);
}
return dateRetour;
}
public String getString(String nomChamp) {
return String.valueOf(renvoyerValeurCorrecte(nomChamp));
}
//Traitement des truks
protected void remplacerTypeDansChaineDenormalise(String champ, String type, Object valeur) {
if (valeur != null && !valeur.equals("")) {
ajouterChaineDenormaliseAvecType(champ, type, valeur);
} else {
supprimerTypeDansChaineDenormalise(champ, type);
}
}
/**
* Ajoute un nouvel élément sans type à une chaine dénormalisée.
* Champ de type "truk" contenant seulement des valeurs séparées par ";;".
* Si l'élément existe déjà, il ne sera pas ajouté.
*
* @param champ le nom du champ dénormalisé
* @param valeur la valeur à ajouter
*/
protected void ajouterChaineDenormalise(String champ, Object valeur) {
if (valeur instanceof String) {
String chaineExistante = renvoyerValeurCorrecte(champ);
if (chaineExistante.equals("")) {
this.set(champ, valeur);
} else {
// Si la valeur à ajouter n'est pas déjà présente, nous l'ajoutons
if (!chaineExistante.matches("(^|"+SEPARATEUR_VALEURS+")"+valeur+"("+SEPARATEUR_VALEURS+"|$)")) {
this.set(champ, chaineExistante+SEPARATEUR_VALEURS+valeur);
}
}
}
}
// ID PERSONNE
public String getId() {
return renvoyerValeurCorrecte("id_personne");
}
public void setId(String personneId) {
this.set("id_personne", personneId);
}
// ID PROJET
public String getIdProjet() {
return renvoyerValeurCorrecte("ce_projet");
}
// NOM COMPLET
public String getNomComplet() {
return renvoyerValeurCorrecte("fmt_nom_complet");
}
public void setNomComplet(String nomComplet) {
this.set("fmt_nom_complet", nomComplet);
}
public void setFmtNomComplet(String prefixe, String suffixe) {
String fmtNomComplet = "";
if ((prefixe != null)&&(!prefixe.trim().equals(""))) {
fmtNomComplet += prefixe + " ";
}
if ((this.getPrenom()!=null)&&(!this.getPrenom().trim().equals(""))) {
fmtNomComplet += this.getPrenom() + " ";
}
if ((this.getNom()!=null)&&(!this.getNom().trim().equals(""))) {
fmtNomComplet += this.getNom() + " ";
}
if ((suffixe!=null)&&(!suffixe.trim().equals(""))) {
fmtNomComplet += suffixe;
}
 
setNomComplet(UtilString.ucFirst(fmtNomComplet));
}
// NOM
public String getNom() {
return renvoyerValeurCorrecte("nom");
}
public void setNom(String nom) {
set("nom", nom);
}
// PRÉNOM
public String getPrenom() {
return renvoyerValeurCorrecte("prenom");
}
public void setPrenom(String prenom) {
set("prenom", prenom);
}
// TÉLÉPHONE
public String getTelephone() {
return renvoyerValeurCorrecte("truk_telephone");
}
public void setTelephone(String t) {
this.set("truk_telephone", t);
}
public void ajouterTelephone(String type, Object valeur) {
ajouterChaineDenormaliseAvecType("truk_telephone", type, valeur);
}
public String selectionnerTelephone(String type) {
return getInfoDenormaliseParType(renvoyerValeurCorrecte("truk_telephone"), type);
}
// FAX
public String getFax() {
return renvoyerValeurCorrecte("truk_fax");
}
public void setFax(String f) {
this.set("truk_fax", f);
}
public void ajouterFax(Object valeur) {
ajouterChaineDenormalise("truk_fax", valeur);
}
public String selectionnerFax(int position) {
return getInfoDenormaliseParPosition(renvoyerValeurCorrecte("truk_fax"), position);
}
// COURRIEL
public String getCourriel() {
return renvoyerValeurCorrecte("truk_courriel");
}
public void setCourriel(String c) {
this.set("truk_courriel", c);
}
public void ajouterCourriel(String c) {
ajouterChaineDenormalise("truk_courriel", c);
}
public String selectionnerCourriel(int position) {
return getInfoDenormaliseParPosition(renvoyerValeurCorrecte("truk_courriel"), position);
}
// SPÉCIALITÉ
public String getSpecialite() {
return renvoyerValeurCorrecte("ce_truk_specialite");
}
public void setSpecialite(String s) {
// Pas de liste pour l'instant, donc tout passe dans "Autre".
setChaineDenormaliseUnique("ce_truk_specialite", "AUTRE", s);
}
public String afficherSpecialite() {
return getChaineDenormaliseUnique("ce_truk_specialite");
}
// NAISSANCE DATE
public String getNaissanceDate() {
String dateNaiss = "";
dateNaiss = get("naissance_date");
if (UtilString.isEmpty(dateNaiss)||dateNaiss.equals("0000-00-00")) {
dateNaiss = Mediateur.i18nC.inconnue();
}
return dateNaiss;
}
public String getDateSouple(String date) {
String valeurDate = date;
String jour = "";
String mois = "";
String annee = "";
 
// pas de date dans la BD
if (UtilString.isEmpty(valeurDate) || valeurDate.equals("0000-00-00")) {
valeurDate = "";
// YYYY
} else if (valeurDate.endsWith("00-00")) {
valeurDate = valeurDate.substring(0, 4);
if (valeurDate.matches("\\d{4}")) {
jour = "";
mois = "";
annee = valeurDate.substring(0,4);
valeurDate = annee;
}
// YYYY-MM
} else if (valeurDate.endsWith("-00")) {
valeurDate = valeurDate.substring(0, 7);
if (valeurDate.matches("\\d{4}-\\d{2}")) {
jour = "";
mois = valeurDate.substring(5,7);
annee = valeurDate.substring(0,4);
valeurDate = mois+"/"+annee;
}
}
// YYYY-MM-DD
else if (valeurDate.matches("\\d{4}-\\d{2}-\\d{2}")) {
Date objetDate = DateTimeFormat.getFormat("yyyy-MM-dd").parse(valeurDate);
DateTimeFormat fmt = DateTimeFormat.getFormat("dd/MM/yyyy");
valeurDate = fmt.format(objetDate);
}
return valeurDate;
}
public String getAnneeOuDateNaiss() {
String valeurDateNaissance = get("naissance_date");
return getDateSouple(valeurDateNaissance);
}
public void setNaissanceDate(Date naissanceDate) {
if (naissanceDate != null) {
this.set("naissance_date", DateTimeFormat.getFormat("yyyy-MM-dd").format(naissanceDate));
} else {
this.set("naissance_date", null);
}
}
// NAISSANCE LIEU
public String getNaissanceLieu() {
return renvoyerValeurCorrecte("naissance_lieu");
}
public void setNaissanceLieu(String naissanceLieu) {
this.set("naissance_lieu", naissanceLieu);
}
// DÉCÉS
public boolean estDecedee() {
String ceDeces = getDeces();
if (ceDeces.isEmpty() || ceDeces.equals(ETRE_DECEDE)) {
return true;
} else {
return false;
}
}
public String getDeces() {
return renvoyerValeurCorrecte("ce_deces");
}
public String getAnneeOuDateDeces() {
String valeurDateDeces = get("deces_date");
return getDateSouple(valeurDateDeces);
}
public void setDeces(String deces) {
set("ce_deces", deces);
}
public void setDeces(Date decesDate, String lieuDeces) {
set("ce_deces", ETRE_DECEDE);
setDecesDate(decesDate);
setDecesLieu(lieuDeces);
}
public void setNonDecedee() {
set("ce_deces", ETRE_VIVANT);
setDecesDate(null);
setDecesLieu("");
}
// DÉCÉS DATE
public String getDecesDate() {
String dateDeces = renvoyerValeurCorrecte("deces_date");
if (UtilString.isEmpty(dateDeces) || dateDeces.equals("0000-00-00")) {
dateDeces = Mediateur.i18nC.inconnue();
}
return dateDeces;
}
public void setDecesDate(Date decesDate) {
if (decesDate != null) {
this.set("deces_date", DateTimeFormat.getFormat("yyyy-MM-dd").format(decesDate));
} else {
this.set("deces_date", "");
}
}
// DÉCÉS LIEU
public String getDecesLieu() {
return renvoyerValeurCorrecte("deces_lieu");
}
public void setDecesLieu(String decesLieu) {
this.set("deces_lieu", decesLieu);
}
// PARAMÊTRE
public String getParametre() {
return renvoyerValeurCorrecte("parametre");
}
public void setParametre(String parametre) {
this.set("parametre", parametre);
}
public void setCourrielPrinc(String courriel) {
this.set("_courriel_princ_", courriel);
}
public String getCourrielPrinc() {
return (String) this.get("_courriel_princ_");
}
// PUBLICATIONS LIÉES
public PublicationAPersonneListe getPublicationsLiees() {
return publicationsLiees;
}
public void setPublicationsLiees(PublicationAPersonneListe relationsCollectionAPublication) {
publicationsLiees = relationsCollectionAPublication;
}
}
Property changes:
Added: svn:mergeinfo
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/modeles/personne/Personne.java:r1136-1368
/trunk/src/org/tela_botanica/client/modeles/personne/PersonneListe.java
New file
0,0 → 1,137
package org.tela_botanica.client.modeles.personne;
 
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.ListePaginable;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.aDonneeListe;
 
import com.extjs.gxt.ui.client.Registry;
import com.google.gwt.i18n.client.Dictionary;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
 
/**
* Classe contenant les informations sur les Personnes renvoyées par un objet de type DAO.
*
* @author Grégoire DUCHÉ
*
*/
public class PersonneListe extends aDonneeListe<Personne> implements ListePaginable {
 
private static final long serialVersionUID = 2930530504922300155L;
private int currentPage = 0;
private int nbElementsPage = Integer.valueOf(((Dictionary) Dictionary.getDictionary("configuration")).get("nbElementsPage"));
private int nbElementsTotal;
private Rafraichissable vueARafraichir;
 
/**
* Constructeur sans paramètres
*/
public PersonneListe() {
super();
}
 
/**
* Constructeur avec paramètre
*
* @param taille la taille de la table de hachage
*/
public PersonneListe(int taille) {
super(taille);
}
 
/**
* Constructeur pour une liste de personne
*
* @param dates
*/
public PersonneListe(JSONArray ListeDePersonnes) {
super(ListeDePersonnes.size());
initialiserPersonneListe(ListeDePersonnes);
}
 
public PersonneListe(JSONArray ListeDePersonnes, JSONNumber nbElements, Rafraichissable vueARafraichir) {
super(ListeDePersonnes.size());
this.nbElementsTotal = Integer.valueOf(nbElements.toString());
this.vueARafraichir = vueARafraichir;
initialiserPersonneListe(ListeDePersonnes);
}
private void initialiserPersonneListe(JSONArray ListeDePersonnes) {
final int taillemax = ListeDePersonnes.size();
for (int i = 0; i < taillemax; i++) {
JSONObject personneCourante = ListeDePersonnes.get(i).isObject();
if (personneCourante != null) {
Personne personne = new Personne(personneCourante);
this.put(personne.getId(), personne);
}
}
}
 
public int[] getPageTable() {
int[] page = new int[4];
// nombre de pages au total
page[0] = calculerNbPages();
// Page En Cours
page[1] = currentPage;
// nbElementsParPage
page[2] = nbElementsPage;
// et le dernier le nombre total d'éléments
page[3] = nbElementsTotal;
return page;
}
 
/**
* Calcule le nombre de pages nécessaires pour afficher un nombre d'élements
* donnés en fonction de la taille de page en cours
*
* @return le nombre de pages
*/
public int calculerNbPages() {
// À cause de la bétise de java pour les conversion implicite, on fait quelques conversions manuellement
// pour eviter qu'il arrondisse mal la division nombre de pages = (nombre d'element / taille de la page)
// arrondie à l'entier supérieur.
double nPage = (1.0 * nbElementsTotal) / (1.0 * nbElementsPage);
double nPageRound = Math.ceil(nPage);
Double nPageInt = new Double(nPageRound);
 
// Convertion en entier
return nPageInt.intValue();
}
 
public void changerNumeroPage(int pageCourante) {
currentPage = pageCourante;
selectionnerPersonne();
}
 
public void changerTaillePage(int nouvelleTaillePage) {
nbElementsPage = nouvelleTaillePage;
selectionnerPersonne();
}
 
public void recharger() {
selectionnerPersonne();
}
 
public void setPageCourante(int pageCourante) {
this.currentPage = pageCourante;
}
 
public void setTaillePage(int taillePage) {
this.nbElementsPage = taillePage;
}
 
public void selectionnerPersonne() {
Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
mediateur.selectionnerPersonne(vueARafraichir, null, mediateur.getProjetId(), currentPage, nbElementsPage, null);
}
 
public void filtrerParNom(String nom) {
Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
Personne personne = new Personne();
personne.setNom("%" + nom + "%");
mediateur.selectionnerPersonne(vueARafraichir, personne, mediateur.getProjetId(), currentPage, nbElementsPage, null);
}
}
Property changes:
Added: svn:mergeinfo
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/modeles/personne/PersonneListe.java:r1136-1368
/trunk/src/org/tela_botanica/client/modeles/personne/PersonneAsyncDao.java
New file
0,0 → 1,187
package org.tela_botanica.client.modeles.personne;
 
import java.util.HashMap;
 
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.http.JsonRestRequestBuilder;
import org.tela_botanica.client.http.JsonRestRequestCallback;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.synchronisation.Reponse;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.util.UtilDAO;
import com.extjs.gxt.ui.client.Registry;
import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
 
public class PersonneAsyncDao {
private static final String SERVICE_NOM = "CoelPersonne";
private String utilisateurId = null;
private Rafraichissable vueARafraichir = null;
public PersonneAsyncDao(Rafraichissable vue) {
if (Mediateur.DEBUG) System.out.println("|| PersonneAsyncDao > vueARafraichir = "+vue.getClass().toString());
vueARafraichir = vue;
utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
}
/**
* @param paginationProgressive : définit le mode de consultation de la base de données
* - True : la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
* fur et à mesure de la consultation des données par l'utilisateur.
* - False : la consultation des données est classique : un seul appel à la base de données est effectué, le retour
* est renvoyé à l'appelant
* // FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas
*/
public void selectionner(final boolean paginationProgressive, String personneId, String projetId, String nomComplet, final int start, final int nbElements, final Integer seqId) {
 
String nom = (nomComplet == null) ? "%" : nomComplet+"%";
String[] parametres = {personneId, projetId, nom};
HashMap<String, String> restrictions = new HashMap<String, String>();
if (nbElements != -1) {
restrictions.put("limit", String.valueOf(nbElements));
}
/** GESTION DE LA REQUETE dans le cas d'une liste paginée progressive **/
if (paginationProgressive) {
 
/** DEFINITION DU TUPLE DE DEPART **/
restrictions.put("start", String.valueOf(start));
/** CONSTRUCTION DE LA REQUETE **/
final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
 
/** ENVOI DE LA REQUETE **/
rb.envoyerRequete(null, new JsonRestRequestCallback()
{
/** RECEPTION DE LA REPONSE **/
public void surReponse(JSONValue responseValue)
{
/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
* On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
if (seqId != null) {
if (Mediateur.DEBUG) System.out.println("<-- PersonneAsyncDao > Liste paginée, retour au sequenceur");
Reponse reponseRequete = new Reponse(responseValue, seqId);
vueARafraichir.rafraichir(reponseRequete);
}
else {
if (Mediateur.DEBUG) System.out.println("<-- PersonneAsyncDao > Liste paginée, retour à "+vueARafraichir.getClass().toString());
vueARafraichir.rafraichir(responseValue);
}
}
});
}
/** GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive **/
else {
/** DEFINITION DU TUPLE DE DEPART **/
restrictions.put("start", String.valueOf(start*nbElements));
final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
rb.envoyerRequete(null, new JsonRestRequestCallback() {
@Override
public void surReponse(JSONValue responseValue) {
if (responseValue != null) {
JSONObject reponseObject = responseValue.isObject();
if (reponseObject.get("personnes").isArray() != null) {
JSONArray reponse = responseValue.isArray();
// Transformation du tableau JSON réponse en ListePersonne
Information info = new Information("liste_personne");
PersonneListe personnes;
personnes = new PersonneListe(reponseObject.get("personnes").isArray(), reponseObject.get("nbElements").isNumber(), vueARafraichir);
personnes.setTaillePage(nbElements);
personnes.setPageCourante(start);
info.setDonnee(0, personnes);
// et on met à jour le demandeur des données
if (seqId != null) {
if (Mediateur.DEBUG) System.out.println("<-- PersonneAsyncDao > Liste non paginée, retour au sequenceur");
Reponse reponseRequete = new Reponse(info, seqId);
vueARafraichir.rafraichir(reponseRequete);
}
else {
if (Mediateur.DEBUG) System.out.println("<-- PersonneAsyncDao > Liste non paginée, retour à "+vueARafraichir.getClass().toString());
vueARafraichir.rafraichir(info);
}
}
} else {
GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas un tableau JSON et vaut : "+responseValue.toString(), null);
}
}
});
}
}
public void ajouter(Personne personne) {
String postDonneesEncodees = personne.obtenirChainePOST();
postDonneesEncodees += "&cmhl_ce_modifier_par=" + utilisateurId;
final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
@Override
public void surReponse(JSONValue responseValue) {
if (responseValue.isString() != null) {
Information info = new Information("ajout_personne");
String structureIdOuMessage = responseValue.isString().stringValue();
if (structureIdOuMessage.matches("^[0-9]+$")) {
info.setDonnee(structureIdOuMessage);
} else {
info.setMessage(structureIdOuMessage);
}
vueARafraichir.rafraichir(info);
} else {
GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
}
}
});
}
public void modifier(Personne personne) {
String postDonneesEncodees = personne.obtenirChainePOST();
postDonneesEncodees += "&cmhl_ce_modifier_par=" + utilisateurId;
GWT.log(postDonneesEncodees, null);
String[] parametres = {personne.getId()};
final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
@Override
public void surReponse(JSONValue responseValue) {
// Si la requête est un succès, reception d'une chaine
if (responseValue.isString() != null) {
Information info = new Information("modification_personne");
info.setMessage(responseValue.isString().stringValue());
vueARafraichir.rafraichir(info);
} else {
GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
}
}
});
}
 
public void supprimer(String personnesId) {
String[] parametres = {utilisateurId, personnesId};
final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
@Override
public void surReponse(JSONValue responseValue) {
if (responseValue.isString() != null) {
Information info = new Information("suppression_personne");
info.setMessage(responseValue.isString().stringValue());
vueARafraichir.rafraichir(info);
} else {
GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
}
}
});
}
}
Property changes:
Added: svn:mergeinfo
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/modeles/personne/PersonneAsyncDao.java:r1136-1368