Subversion Repositories eFlore/Applications.coel

Rev

Rev 1762 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1762 Rev 1764
1
package org.tela_botanica.client.modeles.collection;
1
package org.tela_botanica.client.modeles.collection;
2
 
2
 
3
import java.util.HashMap;
3
import java.util.HashMap;
4
 
4
 
5
import org.tela_botanica.client.Mediateur;
5
import org.tela_botanica.client.Mediateur;
6
import org.tela_botanica.client.RegistreId;
6
import org.tela_botanica.client.RegistreId;
7
import org.tela_botanica.client.http.JsonRestRequestBuilder;
7
import org.tela_botanica.client.http.JsonRestRequestBuilder;
8
import org.tela_botanica.client.http.JsonRestRequestCallback;
8
import org.tela_botanica.client.http.JsonRestRequestCallback;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.Information;
10
import org.tela_botanica.client.modeles.Information;
11
import org.tela_botanica.client.modeles.projet.ProjetListe;
-
 
12
import org.tela_botanica.client.synchronisation.Reponse;
11
import org.tela_botanica.client.synchronisation.Reponse;
13
import org.tela_botanica.client.util.Debug;
12
import org.tela_botanica.client.util.Debug;
14
import org.tela_botanica.client.util.UtilDAO;
13
import org.tela_botanica.client.util.UtilDAO;
15
 
14
 
16
import com.extjs.gxt.ui.client.Registry;
15
import com.extjs.gxt.ui.client.Registry;
17
import com.google.gwt.core.client.GWT;
16
import com.google.gwt.core.client.GWT;
18
import com.google.gwt.http.client.URL;
17
import com.google.gwt.http.client.URL;
19
import com.google.gwt.json.client.JSONArray;
18
import com.google.gwt.json.client.JSONArray;
20
import com.google.gwt.json.client.JSONNumber;
19
import com.google.gwt.json.client.JSONNumber;
21
import com.google.gwt.json.client.JSONObject;
20
import com.google.gwt.json.client.JSONObject;
22
import com.google.gwt.json.client.JSONValue;
21
import com.google.gwt.json.client.JSONValue;
23
import com.google.gwt.user.client.Window;
22
import com.google.gwt.user.client.Window;
24
 
23
 
25
public class CollectionAsyncDao {
24
public class CollectionAsyncDao {
26
	
25
	
27
	public static final String SERVICE_NOM = "CoelCollection";
26
	public static final String SERVICE_NOM = "CoelCollection";
28
	public static String tri = null;
27
	public static String tri = null;
29
	private String utilisateurId = null;
28
	private String utilisateurId = null;
30
	private Rafraichissable vueARafraichir = null;
29
	private Rafraichissable vueARafraichir = null;
31
	
30
	
32
	public CollectionAsyncDao(Rafraichissable vueARafraichirCourrante) {
31
	public CollectionAsyncDao(Rafraichissable vueARafraichirCourrante) {
33
		//if (Mediateur.DEBUG) System.out.println("|| CollectionAsyncDao > vueARafraichir = "+vueARafraichirCourrante.getClass().toString());
32
		//if (Mediateur.DEBUG) System.out.println("|| CollectionAsyncDao > vueARafraichir = "+vueARafraichirCourrante.getClass().toString());
34
		vueARafraichir = vueARafraichirCourrante;
33
		vueARafraichir = vueARafraichirCourrante;
35
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
34
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
36
	}
35
	}
37
	
36
	
38
	/**
37
	/**
39
	 * 
38
	 * 
40
	 * @param paginationProgressive : définit le mode de consultation de la base de données
39
	 * @param paginationProgressive : définit le mode de consultation de la base de données
41
	 * 			- True :	la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
40
	 * 			- True :	la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
42
	 * 						fur et à mesure de la consultation des données par l'utilisateur.
41
	 * 						fur et à mesure de la consultation des données par l'utilisateur.
43
	 * 			- False :	la consultation des données est classique : un seul appel à la base de données est effectué, le retour
42
	 * 			- False :	la consultation des données est classique : un seul appel à la base de données est effectué, le retour
44
	 * 						est renvoyé à l'appelant
43
	 * 						est renvoyé à l'appelant
45
	 * 			// FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas
44
	 * 			// FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas
46
	 */
45
	 */
47
	public void selectionner(final boolean paginationProgressive, final String projetId, final String collectionId, final String nomCollection, final int start, final int nbElements, final Integer seqId) {
46
	public void selectionner(final boolean paginationProgressive, final String collectionId, final String nomCollection, final int start, final int nbElements, final Integer seqId) {
48
 
47
 
49
		// Ajout des paramètres et données à selectionner dans l'URL
48
		// Ajout des paramètres et données à selectionner dans l'URL
50
		String nom = (nomCollection == null) ? "%" : nomCollection+"%";
49
		String nom = (nomCollection == null) ? "%" : nomCollection+"%";
51
		String[] parametres = {projetId, collectionId, nom};
50
		String[] parametres = {collectionId, nom};
52
		
51
		
53
		HashMap<String, String> restrictions = new HashMap<String, String>();
52
		HashMap<String, String> restrictions = new HashMap<String, String>();
54
		
53
		
55
		if (nbElements != -1)	{
54
		if (nbElements != -1)	{
56
			restrictions.put("limit", String.valueOf(nbElements));
55
			restrictions.put("limit", String.valueOf(nbElements));
57
		}
56
		}
58
 
57
 
59
		if(tri != null) {
58
		if(tri != null) {
60
			restrictions.put("orderby", tri);
59
			restrictions.put("orderby", tri);
61
		}
60
		}
62
 
61
 
63
		/** GESTION DE LA REQUETE dans le cas d'une liste paginée progressive **/
62
		/** GESTION DE LA REQUETE dans le cas d'une liste paginée progressive **/
64
		if (paginationProgressive) {
63
		if (paginationProgressive) {
65
 
64
 
66
			/** DEFINITION DU TUPLE DE DEPART **/
65
			/** DEFINITION DU TUPLE DE DEPART **/
67
			restrictions.put("start", String.valueOf(start));
66
			restrictions.put("start", String.valueOf(start));
68
			
67
			
69
			/** CONSTRUCTION DE LA REQUETE **/
68
			/** CONSTRUCTION DE LA REQUETE **/
70
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
69
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
71
 
70
 
72
    		/** ENVOI DE LA REQUETE **/
71
    		/** ENVOI DE LA REQUETE **/
73
    		rb.envoyerRequete(null, new JsonRestRequestCallback()
72
    		rb.envoyerRequete(null, new JsonRestRequestCallback()
74
    		{
73
    		{
75
    			/** RECEPTION DE LA REPONSE **/
74
    			/** RECEPTION DE LA REPONSE **/
76
    			public void surReponse(JSONValue responseValue)
75
    			public void surReponse(JSONValue responseValue)
77
    			{
76
    			{
78
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
77
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
79
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
78
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
80
    				
79
    				
81
					if (seqId != null)	{
80
					if (seqId != null)	{
82
						if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste paginée, retour au sequenceur");
81
						if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste paginée, retour au sequenceur");
83
						Reponse reponseRequete = new Reponse(responseValue, seqId);
82
						Reponse reponseRequete = new Reponse(responseValue, seqId);
84
						vueARafraichir.rafraichir(reponseRequete);
83
						vueARafraichir.rafraichir(reponseRequete);
85
					}
84
					}
86
					else	{
85
					else	{
87
						if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste paginée, retour à "+vueARafraichir.getClass().toString());
86
						if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste paginée, retour à "+vueARafraichir.getClass().toString());
88
						vueARafraichir.rafraichir(responseValue);
87
						vueARafraichir.rafraichir(responseValue);
89
					}
88
					}
90
    			}
89
    			}
91
    		});
90
    		});
92
		}
91
		}
93
		/** GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive **/
92
		/** GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive **/
94
		else {
93
		else {
95
 
94
 
96
			/** DEFINITION DU TUPLE DE DEPART **/
95
			/** DEFINITION DU TUPLE DE DEPART **/
97
			restrictions.put("start", String.valueOf(start*nbElements));
96
			restrictions.put("start", String.valueOf(start*nbElements));
98
			
97
			
99
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
98
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
100
			
99
			
101
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
100
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
102
				@Override
101
				@Override
103
				public void surReponse(JSONValue responseValue) {
102
				public void surReponse(JSONValue responseValue) {
104
					if (responseValue != null) {
103
					if (responseValue != null) {
105
 
104
 
106
						JSONObject responseObject = responseValue.isObject();
105
						JSONObject responseObject = responseValue.isObject();
107
 
106
 
108
						if (responseObject != null) {
107
						if (responseObject != null) {
109
							// Si la réponse est un tableau, alors c'est une liste de collections qui a été retournée
108
							// Si la réponse est un tableau, alors c'est une liste de collections qui a été retournée
110
							if (responseObject.get("collections").isArray() != null) {
109
							if (responseObject.get("collections").isArray() != null) {
111
								final JSONArray reponse = responseObject.get("collections").isArray();
110
								final JSONArray reponse = responseObject.get("collections").isArray();
112
								CollectionListe collections = new CollectionListe(reponse, responseObject.get("nbElements").isNumber(), vueARafraichir);
111
								CollectionListe collections = new CollectionListe(reponse, responseObject.get("nbElements").isNumber(), vueARafraichir);
113
								collections.setTaillePage(nbElements);
112
								collections.setTaillePage(nbElements);
114
								collections.setPageCourante(start);							
113
								collections.setPageCourante(start);							
115
								
114
								
116
								vueARafraichir.rafraichir(collections);
115
								vueARafraichir.rafraichir(collections);
117
								
116
								
118
							// Si la réponse est un objet, alors c'est une unique collection qui a été retournée
117
							// Si la réponse est un objet, alors c'est une unique collection qui a été retournée
119
							} else if (responseObject.get("collections").isObject() != null) {
118
							} else if (responseObject.get("collections").isObject() != null) {
120
								final JSONObject reponse = responseObject.get("collections").isObject();
119
								final JSONObject reponse = responseObject.get("collections").isObject();
121
								Collection collection = new Collection(reponse);
120
								Collection collection = new Collection(reponse);
122
								CollectionBotanique collectionBotanique = new CollectionBotanique(reponse);
121
								CollectionBotanique collectionBotanique = new CollectionBotanique(reponse);
123
								collection.setBotanique(collectionBotanique);
122
								collection.setBotanique(collectionBotanique);
124
								
123
								
125
								Information info = new Information("selection_collection");
124
								Information info = new Information("selection_collection");
126
								info.setDonnee(0, collection);
125
								info.setDonnee(0, collection);
127
								
126
								
128
								// et on met à jour le demandeur des données
127
								// et on met à jour le demandeur des données
129
								if (seqId != null)	{
128
								if (seqId != null)	{
130
									if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste non paginée, retour au sequenceur");
129
									if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste non paginée, retour au sequenceur");
131
									Reponse reponseRequete = new Reponse(info, seqId);
130
									Reponse reponseRequete = new Reponse(info, seqId);
132
									vueARafraichir.rafraichir(reponseRequete);
131
									vueARafraichir.rafraichir(reponseRequete);
133
								}
132
								}
134
								else	{
133
								else	{
135
									if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste non paginée, retour à "+vueARafraichir.getClass().toString());
134
									if (Mediateur.DEBUG) System.out.println("<-- CollectionAsyncDao > Liste non paginée, retour à "+vueARafraichir.getClass().toString());
136
									vueARafraichir.rafraichir(info);
135
									vueARafraichir.rafraichir(info);
137
								}
136
								}
138
							}
137
							}
139
						} else {
138
						} else {
140
							GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un talbeau JSON et vaut : "+responseValue.toString(), null);
139
							GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un talbeau JSON et vaut : "+responseValue.toString(), null);
141
						}
140
						}
142
					} else {
141
					} else {
143
						// Dans le cas, où nous demandons toutes les institutions et qu'il n'y en a pas, nous retournons un objet vide
142
						// Dans le cas, où nous demandons toutes les institutions et qu'il n'y en a pas, nous retournons un objet vide
144
						if (collectionId == null) {
143
						if (collectionId == null) {
145
							CollectionListe collections = new CollectionListe(0);
144
							CollectionListe collections = new CollectionListe(0);
146
							vueARafraichir.rafraichir(collections);								
145
							vueARafraichir.rafraichir(collections);								
147
						}
146
						}
148
					}
147
					}
149
				}
148
				}
150
			});
149
			});
151
		}
150
		}
152
	}
151
	}
153
	
152
	
154
	public void ajouter(Collection collection) {		
153
	public void ajouter(Collection collection) {		
155
		String postDonneesEncodees = construirePost(null, collection);
154
		String postDonneesEncodees = construirePost(null, collection);
156
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);	
155
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);	
157
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
156
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
158
			@Override
157
			@Override
159
			public void surReponse(JSONValue responseValue) {
158
			public void surReponse(JSONValue responseValue) {
160
				if (responseValue.isString() != null) {
159
				if (responseValue.isString() != null) {
161
					Information info = new Information("ajout_collection");
160
					Information info = new Information("ajout_collection");
162
					String structureIdOuMessage = responseValue.isString().stringValue();
161
					String structureIdOuMessage = responseValue.isString().stringValue();
163
					if (structureIdOuMessage.matches("^[0-9]+$")) {
162
					if (structureIdOuMessage.matches("^[0-9]+$")) {
164
						info.setDonnee(structureIdOuMessage);
163
						info.setDonnee(structureIdOuMessage);
165
					} else {
164
					} else {
166
						info.setMessage(structureIdOuMessage);
165
						info.setMessage(structureIdOuMessage);
167
					}
166
					}
168
					vueARafraichir.rafraichir(info);
167
					vueARafraichir.rafraichir(info);
169
				} else {
168
				} else {
170
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
169
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
171
				}
170
				}
172
			}
171
			}
173
		});
172
		});
174
	}
173
	}
175
	
174
	
176
	public void modifier(Collection collection) {
175
	public void modifier(Collection collection) {
177
		String postDonneesEncodees = construirePost(collection.getId(), collection);
176
		String postDonneesEncodees = construirePost(collection.getId(), collection);
178
		String[] parametres = {collection.getId()};
177
		String[] parametres = {collection.getId()};
179
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
178
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
180
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
179
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
181
			@Override
180
			@Override
182
			public void surReponse(JSONValue responseValue) {
181
			public void surReponse(JSONValue responseValue) {
183
				// Si la requête est un succès, reception d'une chaine
182
				// Si la requête est un succès, reception d'une chaine
184
				if (responseValue.isString() != null) {
183
				if (responseValue.isString() != null) {
185
					Information info = new Information("modif_collection");
184
					Information info = new Information("modif_collection");
186
					info.setMessage(responseValue.isString().stringValue());
185
					info.setMessage(responseValue.isString().stringValue());
187
					vueARafraichir.rafraichir(info);
186
					vueARafraichir.rafraichir(info);
188
				} else {
187
				} else {
189
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
188
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
190
				}
189
				}
191
			}
190
			}
192
		});
191
		});
193
	}
192
	}
194
	
193
	
195
	public void supprimer(String collectionsId) {
194
	public void supprimer(String collectionsId) {
196
		String[] parametres = {utilisateurId, collectionsId};
195
		String[] parametres = {utilisateurId, collectionsId};
197
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
196
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
198
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
197
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
199
			@Override
198
			@Override
200
			public void surReponse(JSONValue responseValue) {
199
			public void surReponse(JSONValue responseValue) {
201
				if (responseValue.isString() != null) {
200
				if (responseValue.isString() != null) {
202
					Information info = new Information("suppression_collection");
201
					Information info = new Information("suppression_collection");
203
					info.setMessage(responseValue.isString().stringValue());
202
					info.setMessage(responseValue.isString().stringValue());
204
					vueARafraichir.rafraichir(info);
203
					vueARafraichir.rafraichir(info);
205
				} else {
204
				} else {
206
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
205
					GWT.log(rb.getUrl()+"\n\tLa réponse n'est pas une chaine JSON.", null);
207
				}
206
				}
208
			}
207
			}
209
		});
208
		});
210
	}
209
	}
211
	
210
	
212
	private String construirePost(String collectionId, Collection collection) {		
211
	private String construirePost(String collectionId, Collection collection) {		
213
		String postDonnees = "cmhl_ce_modifier_par=" + URL.encodeComponent(utilisateurId); 
212
		String postDonnees = "cmhl_ce_modifier_par=" + URL.encodeComponent(utilisateurId); 
214
			
213
			
215
		if (collection != null) {
214
		if (collection != null) {
216
			if (collectionId != null) {
215
			if (collectionId != null) {
217
				postDonnees += "&cc_id_collection=" + URL.encodeComponent(collectionId);
216
				postDonnees += "&cc_id_collection=" + URL.encodeComponent(collectionId);
218
			}
217
			}
219
 
218
 
220
			postDonnees += "&" + collection.obtenirChainePOST();
219
			postDonnees += "&" + collection.obtenirChainePOST();
221
			
220
			
222
			if (collection.getBotanique() != null) {
221
			if (collection.getBotanique() != null) {
223
				if (collectionId != null) {
222
				if (collectionId != null) {
224
					postDonnees += "&ccb_id_collection=" + URL.encodeComponent(collectionId);
223
					postDonnees += "&ccb_id_collection=" + URL.encodeComponent(collectionId);
225
				}
224
				}
226
				CollectionBotanique collectionBotanique = collection.getBotanique();
225
				CollectionBotanique collectionBotanique = collection.getBotanique();
227
				postDonnees += "&" + collectionBotanique.obtenirChainePOST();
226
				postDonnees += "&" + collectionBotanique.obtenirChainePOST();
228
			}
227
			}
229
		}
228
		}
230
		
229
		
231
		return postDonnees;
230
		return postDonnees;
232
	}
231
	}
233
}
232
}