Subversion Repositories eFlore/Applications.coel

Rev

Rev 1513 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
935 jpm 1
package org.tela_botanica.client.modeles.projet;
147 gduche 2
 
1045 gduche 3
import java.util.HashMap;
4
 
890 aurelien 5
import org.tela_botanica.client.Mediateur;
6
import org.tela_botanica.client.RegistreId;
751 jpm 7
import org.tela_botanica.client.http.JsonRestRequestBuilder;
8
import org.tela_botanica.client.http.JsonRestRequestCallback;
147 gduche 9
import org.tela_botanica.client.interfaces.Rafraichissable;
935 jpm 10
import org.tela_botanica.client.modeles.Information;
1045 gduche 11
import org.tela_botanica.client.modeles.structure.StructureListe;
1319 gduche 12
import org.tela_botanica.client.synchronisation.Reponse;
1468 jpm 13
import org.tela_botanica.client.util.Debug;
147 gduche 14
import org.tela_botanica.client.util.UtilDAO;
15
 
890 aurelien 16
import com.extjs.gxt.ui.client.Registry;
1080 gduche 17
import com.extjs.gxt.ui.client.widget.Info;
929 jpm 18
import com.google.gwt.core.client.GWT;
147 gduche 19
import com.google.gwt.json.client.JSONArray;
879 aurelien 20
import com.google.gwt.json.client.JSONObject;
147 gduche 21
import com.google.gwt.json.client.JSONValue;
22
 
268 jp_milcent 23
public class ProjetAsyncDao {
24
	private static final String SERVICE_NOM = "CoelProjet";
147 gduche 25
 
890 aurelien 26
	String utilisateurId = null;
751 jpm 27
	private Rafraichissable vueARafraichir = null;
147 gduche 28
 
751 jpm 29
	public ProjetAsyncDao(Rafraichissable vueARafraichirCourrante) {
1367 cyprien 30
		if (Mediateur.DEBUG) System.out.println("|| ProjetAsyncDao > vueARafraichir = "+vueARafraichirCourrante.getClass().toString());
751 jpm 31
		vueARafraichir = vueARafraichirCourrante;
890 aurelien 32
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
147 gduche 33
	}
1329 cyprien 34
 
147 gduche 35
 
1329 cyprien 36
	/**
37
	 * @param paginationProgressive : définit le mode de consultation de la base de données
38
	 * 			- True :	la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
39
	 * 						fur et à mesure de la consultation des données par l'utilisateur.
40
	 * 			- False :	la consultation des données est classique : un seul appel à la base de données est effectué, le retour
41
	 * 						est renvoyé à l'appelant
42
	 * 			// FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas
43
	 */
1468 jpm 44
	public void selectionner(final boolean paginationProgressive, final String projetId, final String nomProjet, final int start, final int nbElements, final String formatRetour, final Integer seqId) {
1329 cyprien 45
 
46
		String nom = (nomProjet == null) ? "%" : nomProjet+"%";
1045 gduche 47
		String[] param = {projetId, nom};
48
 
49
		HashMap<String, String> restrictions = new HashMap<String, String>();
1710 raphael 50
 
51
		/* ne jamais effectuer de limitation du nombre de projet car, lorsqu'on édite une institution, le "projet"
52
		   est obligatoire, cependant, si l'ID du projet de cette institution n'est pas présent dans la première page
53
		   de la liste dynamique téléchargée initialement (offset 0 -> 10), le champ reste invalide / rouge,
54
		   rendant impossible la modification rapide de la structure.
55
 
56
		   Pour cette raison, la liste des projets est toujours récupérée en intégralité. */
57
		if (false && nbElements != -1) {
1045 gduche 58
			restrictions.put("limit", String.valueOf(nbElements));
59
		}
1468 jpm 60
 
61
		if ((formatRetour != null) && (formatRetour != "")) {
62
			restrictions.put("formatRetour", formatRetour);
63
		}
1045 gduche 64
 
1329 cyprien 65
		/** GESTION DE LA REQUETE dans le cas d'une liste paginée progressive **/
66
		if (paginationProgressive) {
67
 
68
			/** DEFINITION DU TUPLE DE DEPART **/
69
			restrictions.put("start", String.valueOf(start));
70
 
71
			/** CONSTRUCTION DE LA REQUETE **/
72
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
73
 
74
    		/** ENVOI DE LA REQUETE **/
75
    		rb.envoyerRequete(null, new JsonRestRequestCallback()
76
    		{
77
    			/** RECEPTION DE LA REPONSE **/
78
    			public void surReponse(JSONValue responseValue)
79
    			{
80
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
81
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
1367 cyprien 82
					if (seqId != null)	{
83
						Reponse reponseRequete = new Reponse(responseValue, seqId);
84
						vueARafraichir.rafraichir(reponseRequete);
85
					}
86
					else	{
87
						vueARafraichir.rafraichir(responseValue);
88
					}
1329 cyprien 89
    			}
90
    		});
91
		}
92
		/** GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive **/
93
		else {
94
 
95
			/** DEFINITION DU TUPLE DE DEPART **/
96
			restrictions.put("start", String.valueOf(start*nbElements));
97
 
98
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
99
 
100
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
101
 
102
				public void surReponse(JSONValue responseValue) {
1468 jpm 103
 
1329 cyprien 104
					if (responseValue != null) {
929 jpm 105
 
1329 cyprien 106
						JSONObject responseObject = responseValue.isObject();
1045 gduche 107
 
1329 cyprien 108
						if (responseObject != null) {
109
 
110
							// Si la réponse est un tableau, alors c'est une liste de projets qui a été retournée
111
							if (responseObject.get("projets").isArray() != null) {
112
 
113
								JSONArray reponse = responseObject.get("projets").isArray();
114
								ProjetListe projets;
115
								projets = new ProjetListe(reponse, responseObject.get("nbElements").isNumber(), vueARafraichir);
116
								projets.setTaillePage(nbElements);
117
								projets.setPageCourante(start);
1468 jpm 118
 
119
								if (seqId != null) {
1329 cyprien 120
									Reponse retourRequete = new Reponse(projets, seqId);
121
									vueARafraichir.rafraichir(retourRequete);
122
								} else {
123
									vueARafraichir.rafraichir(projets);
124
								}
125
 
1468 jpm 126
							// Si la réponse est un objet, alors c'est un unique projet qui a été retourné
1329 cyprien 127
							} else if (responseObject.get("projets").isObject() != null) {
128
 
129
								JSONObject reponse = responseObject.get("projets").isObject();
130
								Projet projet = new Projet(reponse);
131
 
132
								Information info = new Information("selection_projet");
133
								info.setDonnee(0, projet);
1468 jpm 134
 
135
								if (seqId != null) {
1367 cyprien 136
									Reponse reponseRequete = new Reponse(info, seqId);
137
									vueARafraichir.rafraichir(reponseRequete);
138
								}
1468 jpm 139
								else {
1367 cyprien 140
									vueARafraichir.rafraichir(info);
141
								}
1329 cyprien 142
							}
1319 gduche 143
						} else {
1329 cyprien 144
							GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un tableau JSON et vaut : "+responseValue.toString(), null);
1319 gduche 145
						}
929 jpm 146
					} else {
1329 cyprien 147
						// Dans le cas, où nous demandons tous les projets et qu'il n'y en a pas, nous retournons un objet vide
148
						if (projetId == null) {
149
							ProjetListe projets = new ProjetListe(0);
1367 cyprien 150
							if (seqId != null)	{
151
								Reponse reponseRequete = new Reponse(projets, seqId);
152
								vueARafraichir.rafraichir(reponseRequete);
153
							}
154
							else	{
155
								vueARafraichir.rafraichir(projets);
156
							}
1329 cyprien 157
						}
929 jpm 158
					}
147 gduche 159
				}
1329 cyprien 160
			});
161
		}
879 aurelien 162
	}
890 aurelien 163
 
164
	public void ajouter(Projet projet) {
165
		String postDonneesEncodees = projet.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
166
 
167
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
168
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
169
			@Override
170
			public void surReponse(JSONValue reponseValeur) {
929 jpm 171
				traiterReponse(reponseValeur, "ajout_projet");
890 aurelien 172
			}
173
		}) ;
174
	}
175
 
176
	public void modifier(Projet projet) {
177
		String[] parametres = {projet.getId()};
178
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
179
 
180
		String postDonneesEncodees = projet.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
181
 
182
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
183
			@Override
184
			public void surReponse(JSONValue reponseValeur) {
929 jpm 185
				traiterReponse(reponseValeur, "modif_projet");
890 aurelien 186
			}
187
		});
188
	}
189
 
190
	public void supprimer(String projetsId) {
191
		String[] parametres = {utilisateurId, projetsId};
192
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
193
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
194
			@Override
195
			public void surReponse(JSONValue reponseValeur) {
196
				traiterReponse(reponseValeur, "suppression_projet");
197
			}
198
		});
199
	}
200
 
201
	private void traiterReponse(JSONValue reponseValeur, String type) {
202
		Information info = new Information(type);
1080 gduche 203
		String idsNonSuppr = "";
204
 
890 aurelien 205
		// Si la requête est un succès, réception d'une chaîne
1080 gduche 206
		if (type.equals("suppression_projet") && reponseValeur.isArray() != null)	{
207
			JSONArray tableauInfo = reponseValeur.isArray();
208
			idsNonSuppr = tableauInfo.get(0).isString().stringValue();
209
		} else if (reponseValeur.isString() != null) {
1103 jpm 210
			String idOuMessage = reponseValeur.isString().stringValue();
211
			if (idOuMessage.matches("^[0-9]+$")) {
212
				info.setDonnee(idOuMessage);
213
			} else {
214
				info.setDonnee("");
215
				info.setMessage(idOuMessage);
216
			}
890 aurelien 217
		} else {
218
			info.setDeboguage("La réponse n'est pas une chaine JSON.");
219
		}
1080 gduche 220
		info.setDonnee(1, idsNonSuppr);
890 aurelien 221
		vueARafraichir.rafraichir(info);
222
	}
1710 raphael 223
}