Subversion Repositories eFlore/Applications.coel

Rev

Rev 1764 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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