Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1860 Rev 1863
1
package org.tela_botanica.client.modeles.publication;
1
package org.tela_botanica.client.modeles.publication;
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.synchronisation.Reponse;
11
import org.tela_botanica.client.synchronisation.Reponse;
12
import org.tela_botanica.client.util.Log;
12
import org.tela_botanica.client.util.Log;
13
import org.tela_botanica.client.util.UtilDAO;
13
import org.tela_botanica.client.util.UtilDAO;
14
 
14
 
15
import com.extjs.gxt.ui.client.Registry;
15
import com.extjs.gxt.ui.client.Registry;
16
import com.google.gwt.core.client.GWT;
16
import com.google.gwt.core.client.Callback;
17
import com.google.gwt.json.client.JSONArray;
17
import com.google.gwt.json.client.JSONArray;
18
import com.google.gwt.json.client.JSONObject;
18
import com.google.gwt.json.client.JSONObject;
19
import com.google.gwt.json.client.JSONParser;
-
 
20
import com.google.gwt.json.client.JSONValue;
19
import com.google.gwt.json.client.JSONValue;
21
import com.google.gwt.user.client.Window;
-
 
22
 
20
 
23
public class PublicationAsyncDao {
21
public class PublicationAsyncDao {
24
	private static final String SERVICE_NOM = "CoelPublication";
22
	private static final String SERVICE_NOM = "CoelPublication";
25
	private static final String SERVICE_IMPORT = "CoelImport";
23
	private static final String SERVICE_IMPORT = "CoelImport";
26
	public static String tri = null;
24
	public static String tri = null;
27
	
25
	
28
	private String utilisateurId = null;
26
	private String utilisateurId = null;
29
	private Rafraichissable vueARafraichir = null;
27
	private Rafraichissable vueARafraichir = null;
30
	
28
	
31
	public PublicationAsyncDao(Rafraichissable vueARafraichirCourrante) {
29
	public PublicationAsyncDao(Rafraichissable vueARafraichirCourrante) {
32
		Log.trace("|| PublicationAsyncDao > vueARafraichir = "+vueARafraichirCourrante.getClass().toString());
30
		Log.trace("|| PublicationAsyncDao > vueARafraichir = "+vueARafraichirCourrante.getClass().toString());
33
		vueARafraichir = vueARafraichirCourrante ;
31
		vueARafraichir = vueARafraichirCourrante ;
34
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
32
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
35
	}
33
	}
36
	
34
	
37
	/**
35
	/**
38
	 * @param paginationProgressive : définit le mode de consultation de la base de données
36
	 * @param paginationProgressive : définit le mode de consultation de la base de données
39
	 * 			- True :	la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
37
	 * 			- True :	la consultation des données est progressive, ce qui signifie que la liste est chargée (paginée) au
40
	 * 						fur et à mesure de la consultation des données par l'utilisateur.
38
	 * 						fur et à mesure de la consultation des données par l'utilisateur.
41
	 * 			- False :	la consultation des données est classique : un seul appel à la base de données est effectué, le retour
39
	 * 			- False :	la consultation des données est classique : un seul appel à la base de données est effectué, le retour
42
	 * 						est renvoyé à l'appelant
40
	 * 						est renvoyé à l'appelant
43
	 * 			// FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas efficacement (on ne voit pas les enregistrement suivants)
41
	 * 			// FIXME : si la taille de la liste est supérieure à la limite du JREST (150), ce deuxieme mode ne fonctionne pas efficacement (on ne voit pas les enregistrement suivants)
44
	 */
42
	 */
45
	public void selectionner(final boolean paginationProgressive, final String publicationId, String nomComplet, final int start, final int nbElements, final Integer seqId) {
43
	public void selectionner(final boolean paginationProgressive, final String publicationId, String nomComplet, final int start, final int nbElements, final Integer seqId) {
46
		
44
		
47
		String nom = (nomComplet == null) ? "%" : nomComplet+"%";
45
		String nom = (nomComplet == null) ? "%" : nomComplet+"%";
48
		String[] param = {publicationId, nom};
46
		String[] param = {publicationId, nom};
49
		
47
		
50
		HashMap<String, String> restrictions = new HashMap<String, String>();
48
		HashMap<String, String> restrictions = new HashMap<String, String>();
51
		
49
		
52
		if (nbElements != -1) {
50
		if (nbElements != -1) {
53
			restrictions.put("limit", String.valueOf(nbElements));
51
			restrictions.put("limit", String.valueOf(nbElements));
54
		}
52
		}
55
 
53
 
56
		if(tri != null) {
54
		if(tri != null) {
57
			restrictions.put("orderby", tri);
55
			restrictions.put("orderby", tri);
58
		} else {
56
		} else {
59
			restrictions.put("orderby", "cpu_fmt_nom_complet");
57
			restrictions.put("orderby", "cpu_fmt_nom_complet");
60
		}
58
		}
61
		
59
		
62
		if (paginationProgressive) {
60
		if (paginationProgressive) {
63
			// GESTION DE LA REQUETE dans le cas d'une liste paginée progressive
61
			// GESTION DE LA REQUETE dans le cas d'une liste paginée progressive
64
			restrictions.put("start", String.valueOf(start));
62
			restrictions.put("start", String.valueOf(start));
65
			
63
			
66
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
64
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
67
    		rb.envoyerRequete(null, new JsonRestRequestCallback() {
65
    		rb.envoyerRequete(null, new JsonRestRequestCallback() {
68
    			/** RECEPTION DE LA REPONSE **/
66
    			/** RECEPTION DE LA REPONSE **/
69
    			public void surReponse(JSONValue responseValue) {
67
    			public void surReponse(JSONValue responseValue) {
70
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
68
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
71
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
69
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
72
					if (seqId != null) {
70
					if (seqId != null) {
73
						Log.trace("<-- PublicationAsyncDao > Liste paginée, retour au sequenceur");
71
						Log.trace("<-- PublicationAsyncDao > Liste paginée, retour au sequenceur");
74
						Reponse reponseRequete = new Reponse(responseValue, seqId);
72
						Reponse reponseRequete = new Reponse(responseValue, seqId);
75
						vueARafraichir.rafraichir(reponseRequete);
73
						vueARafraichir.rafraichir(reponseRequete);
76
					} else {
74
					} else {
77
						Log.trace("<-- PublicationAsyncDao > Liste paginée, retour à "+vueARafraichir.getClass().toString());
75
						Log.trace("<-- PublicationAsyncDao > Liste paginée, retour à "+vueARafraichir.getClass().toString());
78
						vueARafraichir.rafraichir(responseValue);
76
						vueARafraichir.rafraichir(responseValue);
79
					}
77
					}
80
    			}
78
    			}
81
    		});
79
    		});
82
		} else {
80
		} else {
83
			// GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive
81
			// GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive
84
			restrictions.put("start", String.valueOf(start*nbElements));			
82
			restrictions.put("start", String.valueOf(start*nbElements));			
85
			
83
			
86
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
84
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
87
			
85
			
88
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
86
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
89
				public void surReponse(JSONValue responseValue) {
87
				public void surReponse(JSONValue responseValue) {
90
    				if (responseValue != null) {
88
    				if (responseValue != null) {
91
						JSONObject responseObject = responseValue.isObject();
89
						JSONObject responseObject = responseValue.isObject();
92
						if (responseObject != null) {
90
						if (responseObject != null) {
93
							// Si la réponse est un tableau, alors c'est une liste de publications qui a été retournée
91
							// Si la réponse est un tableau, alors c'est une liste de publications qui a été retournée
94
							if (responseObject.get("publications").isArray() != null) {
92
							if (responseObject.get("publications").isArray() != null) {
95
								JSONArray reponse = responseObject.get("publications").isArray();
93
								JSONArray reponse = responseObject.get("publications").isArray();
96
								
94
								
97
								PublicationListe publications;
95
								PublicationListe publications;
98
								publications = new PublicationListe(reponse, responseObject.get("nbElements").isNumber(), vueARafraichir);
96
								publications = new PublicationListe(reponse, responseObject.get("nbElements").isNumber(), vueARafraichir);
99
								publications.setTaillePage(nbElements);
97
								publications.setTaillePage(nbElements);
100
								publications.setPageCourante(start);							
98
								publications.setPageCourante(start);							
101
 
99
 
102
								if (seqId != null) {
100
								if (seqId != null) {
103
									if (Mediateur.DEBUG) System.out.println("<-- PublicationAsyncDao > Liste non paginée, retour au sequenceur");
101
									if (Mediateur.DEBUG) System.out.println("<-- PublicationAsyncDao > Liste non paginée, retour au sequenceur");
104
									Reponse retourRequete = new Reponse(publications, seqId);
102
									Reponse retourRequete = new Reponse(publications, seqId);
105
									vueARafraichir.rafraichir(retourRequete);
103
									vueARafraichir.rafraichir(retourRequete);
106
								} else {
104
								} else {
107
									if (Mediateur.DEBUG) System.out.println("<-- PublicationAsyncDao > Liste non paginée, retour à "+vueARafraichir.getClass().toString());
105
									if (Mediateur.DEBUG) System.out.println("<-- PublicationAsyncDao > Liste non paginée, retour à "+vueARafraichir.getClass().toString());
108
									vueARafraichir.rafraichir(publications);
106
									vueARafraichir.rafraichir(publications);
109
								}
107
								}
110
							
108
							
111
							// Si la réponse est un objet, alors c'est une unique publication qui a été retournée
109
							// Si la réponse est un objet, alors c'est une unique publication qui a été retournée
112
							} else if (responseObject.get("publications").isObject() != null) {
110
							} else if (responseObject.get("publications").isObject() != null) {
113
								
111
								
114
								JSONObject reponse = responseObject.get("publications").isObject();
112
								JSONObject reponse = responseObject.get("publications").isObject();
115
								// Transformation du tableau JSON réponse en ListeInstitution
113
								// Transformation du tableau JSON réponse en ListeInstitution
116
								Publication publication = new Publication(reponse);
114
								Publication publication = new Publication(reponse);
117
								// et on met à jour le demandeur des données
115
								// et on met à jour le demandeur des données
118
								if (seqId!=null)	{
116
								if (seqId!=null)	{
119
									Reponse reponseRequete = new Reponse(publication, seqId);
117
									Reponse reponseRequete = new Reponse(publication, seqId);
120
									vueARafraichir.rafraichir(reponseRequete);
118
									vueARafraichir.rafraichir(reponseRequete);
121
								} else {
119
								} else {
122
									vueARafraichir.rafraichir(publication);
120
									vueARafraichir.rafraichir(publication);
123
								}
121
								}
124
							}
122
							}
125
						} else {
123
						} else {
126
							Log.warn(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un tableau JSON et vaut : "+responseValue.toString());
124
							Log.warn(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un tableau JSON et vaut : "+responseValue.toString());
127
						}
125
						}
128
					} else {						
126
					} else {						
129
						if (publicationId == null) {
127
						if (publicationId == null) {
130
							PublicationListe publications = new PublicationListe(0);
128
							PublicationListe publications = new PublicationListe(0);
131
							vueARafraichir.rafraichir(publications);
129
							vueARafraichir.rafraichir(publications);
132
						}
130
						}
133
					}
131
					}
134
				}
132
				}
135
			});
133
			});
136
		}		
134
		}		
137
	}
135
	}
138
 
136
 
139
	public void ajouter(Publication publication, final Integer seqId) {
137
	public void ajouter(Publication publication, final Integer seqId) {
140
		String postDonneesEncodees = publication.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
138
		String postDonneesEncodees = publication.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
141
		
139
		
142
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
140
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
143
 
141
 
144
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
142
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
145
			@Override
143
			@Override
146
			public void surReponse(JSONValue reponseValeur) {
144
			public void surReponse(JSONValue reponseValeur) {
147
				traiterReponse(reponseValeur, "ajout_publication", seqId);
145
				traiterReponse(reponseValeur, "ajout_publication", seqId);
148
			}
146
			}
149
		}) ;
147
		}) ;
150
	}
148
	}
151
	
149
	
152
	public void modifier(Publication publication, final Integer seqId) {
150
	public void modifier(Publication publication, final Integer seqId) {
153
		String[] parametres = {publication.getId()};
151
		String[] parametres = {publication.getId()};
154
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
152
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
155
		
153
		
156
		String postDonneesEncodees = publication.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
154
		String postDonneesEncodees = publication.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
157
		
155
		
158
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
156
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
159
			@Override
157
			@Override
160
			public void surReponse(JSONValue reponseValeur) {
158
			public void surReponse(JSONValue reponseValeur) {
161
				traiterReponse(reponseValeur, "modif_publication",  seqId);
159
				traiterReponse(reponseValeur, "modif_publication",  seqId);
162
			}
160
			}
163
		});
161
		});
164
	}
162
	}
165
 
163
 
166
	public void supprimer(String publicationsId) {
164
	public void supprimer(String publicationsId) {
167
		String[] parametres = {utilisateurId, publicationsId};
165
		String[] parametres = {utilisateurId, publicationsId};
168
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
166
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
169
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
167
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
170
			@Override
168
			@Override
171
			public void surReponse(JSONValue reponseValeur) {
169
			public void surReponse(JSONValue reponseValeur) {
172
				traiterReponse(reponseValeur, "suppression_publication", null);
170
				traiterReponse(reponseValeur, "suppression_publication", null);
173
			}
171
			}
174
		});
172
		});
175
	}
173
	}
176
	
174
	
177
	private void traiterReponse(JSONValue reponseValeur, String type, Integer seqId) {
175
	private void traiterReponse(JSONValue reponseValeur, String type, Integer seqId) {
178
		Information info = new Information(type);
176
		Information info = new Information(type);
179
 
177
 
180
		// Si la requête est un succès, réception d'une chaîne
178
		// Si la requête est un succès, réception d'une chaîne
181
		if (reponseValeur.isString() != null) {
179
		if (reponseValeur.isString() != null) {
182
			String idOuMessage = reponseValeur.isString().stringValue();
180
			String idOuMessage = reponseValeur.isString().stringValue();
183
			if (idOuMessage.matches("^[0-9]+$")) {
181
			if (idOuMessage.matches("^[0-9]+$")) {
184
				info.setDonnee(idOuMessage);
182
				info.setDonnee(idOuMessage);
185
			} else {
183
			} else {
186
				info.setMessage(idOuMessage);
184
				info.setMessage(idOuMessage);
187
			}
185
			}
188
		} else {
186
		} else {
189
			info.setDeboguage("La réponse n'est pas une chaine JSON.");
187
			info.setDeboguage("La réponse n'est pas une chaine JSON.");
190
		}
188
		}
191
		
189
		
192
		if (seqId != null)	{
190
		if (seqId != null)	{
193
			Reponse retourRequete = new Reponse(info, seqId);
191
			Reponse retourRequete = new Reponse(info, seqId);
194
			vueARafraichir.rafraichir(retourRequete);
192
			vueARafraichir.rafraichir(retourRequete);
195
		} else {
193
		} else {
196
			vueARafraichir.rafraichir(info);
194
			vueARafraichir.rafraichir(info);
197
		}
195
		}
198
	}
196
	}
-
 
197
	
-
 
198
	public static void demanderStatistiquesDernierImport(final Callback<JSONValue, String> callBack) {
-
 
199
		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_IMPORT);
-
 
200
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
-
 
201
			@Override
-
 
202
			public void surReponse(JSONValue reponseValeur) {
-
 
203
				callBack.onSuccess(reponseValeur);
-
 
204
			}
-
 
205
		});
-
 
206
	}
199
	
207
	
200
	public static boolean importEstUnSucces(JSONValue responseValue) {
208
	public static boolean importEstUnSucces(JSONValue responseValue) {
201
		boolean succesImportBool = false;
209
		boolean succesImportBool = false;
202
		if(responseValue != null) {
210
		if(responseValue != null) {
203
			JSONObject objetReponse = responseValue.isObject();
211
			JSONObject objetReponse = responseValue.isObject();
204
			String succesImport = objetReponse.get("succes_import").isString().stringValue();			
212
			String succesImport = objetReponse.get("succes_import").isString().stringValue();			
205
			succesImportBool = succesImport.equals("1");
213
			succesImportBool = succesImport.equals("1");
206
		}
214
		}
207
		
215
		
208
		return succesImportBool;
216
		return succesImportBool;
209
	}
217
	}
210
	
218
	
211
	public static String getErreursImport(JSONValue responseValue) {	
219
	public static String getErreursImport(JSONValue responseValue) {	
212
		// Normalement cette fonction est appelée par le médiateur uniquement 
220
		// Normalement cette fonction est appelée par le médiateur uniquement 
213
		// si l'import à renvoyé un objet valide
221
		// si l'import à renvoyé un objet valide
214
		JSONObject objetReponse = responseValue.isObject();		
222
		JSONObject objetReponse = responseValue.isObject();		
215
		JSONArray erreurs = objetReponse.get("erreurs").isArray();
223
		JSONArray erreurs = objetReponse.get("erreurs").isArray();
216
		String erreurStr = "\n";
224
		String erreurStr = "\n";
217
		for (int i = 0; i < erreurs.size(); i++) {
225
		for (int i = 0; i < erreurs.size(); i++) {
218
			erreurStr += "- "+erreurs.get(i).isString().stringValue()+"\n";		
226
			erreurStr += "- "+erreurs.get(i).isString().stringValue()+"\n";		
219
		}
227
		}
220
		return erreurStr;
228
		return erreurStr;
221
	}
229
	}
222
	
230
	
223
	public static String getNbPublisImportees(JSONValue responseValue) {
231
	public static String getNbPublisImportees(JSONValue responseValue) {
224
		// Normalement cette fonction est appelée par le médiateur uniquement 
232
		// Normalement cette fonction est appelée par le médiateur uniquement 
225
		// si l'import à renvoyé un objet valide
233
		// si l'import à renvoyé un objet valide
226
		JSONObject objetReponse = responseValue.isObject();	
234
		JSONObject objetReponse = responseValue.isObject();	
227
		String nbPubliImportees = objetReponse.get("nb_elements_importes").isString().stringValue();
235
		String nbPubliImportees = objetReponse.get("nb_elements_importes").isString().stringValue();
228
		
236
		
229
		return nbPubliImportees;
237
		return nbPubliImportees;
230
	}
238
	}
231
 	
239
 	
232
	public static String getUrlImport() {
240
	public static String getUrlImport() {
233
		return UtilDAO.getUrlService(SERVICE_IMPORT);
241
		return UtilDAO.getUrlService(SERVICE_IMPORT);
234
	}
242
	}
235
 
243
 
236
}
244
}