Subversion Repositories eFlore/Applications.coel

Rev

Rev 1860 | Details | Compare with Previous | Last modification | View Log | RSS feed

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