Subversion Repositories eFlore/Applications.coel

Rev

Rev 1764 | 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.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;
238 aurelien 16
import com.google.gwt.core.client.GWT;
106 aurelien 17
import com.google.gwt.json.client.JSONArray;
238 aurelien 18
import com.google.gwt.json.client.JSONObject;
1860 aurelien 19
import com.google.gwt.json.client.JSONParser;
106 aurelien 20
import com.google.gwt.json.client.JSONValue;
1860 aurelien 21
import com.google.gwt.user.client.Window;
106 aurelien 22
 
268 jp_milcent 23
public class PublicationAsyncDao {
24
	private static final String SERVICE_NOM = "CoelPublication";
1860 aurelien 25
	private static final String SERVICE_IMPORT = "CoelImport";
1762 mathias 26
	public static String tri = null;
764 jpm 27
 
28
	private String utilisateurId = null;
707 jp_milcent 29
	private Rafraichissable vueARafraichir = null;
106 aurelien 30
 
707 jp_milcent 31
	public PublicationAsyncDao(Rafraichissable vueARafraichirCourrante) {
1568 jpm 32
		Log.trace("|| PublicationAsyncDao > vueARafraichir = "+vueARafraichirCourrante.getClass().toString());
707 jp_milcent 33
		vueARafraichir = vueARafraichirCourrante ;
764 jpm 34
		utilisateurId = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateurId();
106 aurelien 35
	}
1513 jpm 36
 
37
	/**
38
	 * @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
40
	 * 						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
42
	 * 						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)
44
	 */
1764 aurelien 45
	public void selectionner(final boolean paginationProgressive, final String publicationId, String nomComplet, final int start, final int nbElements, final Integer seqId) {
1513 jpm 46
 
47
		String nom = (nomComplet == null) ? "%" : nomComplet+"%";
1764 aurelien 48
		String[] param = {publicationId, nom};
1513 jpm 49
 
1046 gduche 50
		HashMap<String, String> restrictions = new HashMap<String, String>();
1513 jpm 51
 
52
		if (nbElements != -1) {
1046 gduche 53
			restrictions.put("limit", String.valueOf(nbElements));
54
		}
1762 mathias 55
 
56
		if(tri != null) {
57
			restrictions.put("orderby", tri);
58
		} else {
59
			restrictions.put("orderby", "cpu_fmt_nom_complet");
60
		}
1046 gduche 61
 
1513 jpm 62
		if (paginationProgressive) {
1568 jpm 63
			// GESTION DE LA REQUETE dans le cas d'une liste paginée progressive
1513 jpm 64
			restrictions.put("start", String.valueOf(start));
65
 
66
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
1568 jpm 67
    		rb.envoyerRequete(null, new JsonRestRequestCallback() {
1513 jpm 68
    			/** RECEPTION DE LA REPONSE **/
1568 jpm 69
    			public void surReponse(JSONValue responseValue) {
1513 jpm 70
    				/** 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 **/
1568 jpm 72
					if (seqId != null) {
73
						Log.trace("<-- PublicationAsyncDao > Liste paginée, retour au sequenceur");
1513 jpm 74
						Reponse reponseRequete = new Reponse(responseValue, seqId);
75
						vueARafraichir.rafraichir(reponseRequete);
1568 jpm 76
					} else {
77
						Log.trace("<-- PublicationAsyncDao > Liste paginée, retour à "+vueARafraichir.getClass().toString());
1513 jpm 78
						vueARafraichir.rafraichir(responseValue);
79
					}
80
    			}
81
    		});
1568 jpm 82
		} else {
83
			// GESTION DE LA REQUETE dans le cas d'une liste NON paginée progressive
1513 jpm 84
			restrictions.put("start", String.valueOf(start*nbElements));
85
 
86
			final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, param, restrictions);
87
 
88
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
89
				public void surReponse(JSONValue responseValue) {
1568 jpm 90
    				if (responseValue != null) {
1513 jpm 91
						JSONObject responseObject = responseValue.isObject();
92
						if (responseObject != null) {
1764 aurelien 93
							// Si la réponse est un tableau, alors c'est une liste de publications qui a été retournée
1513 jpm 94
							if (responseObject.get("publications").isArray() != null) {
95
								JSONArray reponse = responseObject.get("publications").isArray();
96
 
97
								PublicationListe publications;
98
								publications = new PublicationListe(reponse, responseObject.get("nbElements").isNumber(), vueARafraichir);
99
								publications.setTaillePage(nbElements);
100
								publications.setPageCourante(start);
101
 
102
								if (seqId != null) {
103
									if (Mediateur.DEBUG) System.out.println("<-- PublicationAsyncDao > Liste non paginée, retour au sequenceur");
104
									Reponse retourRequete = new Reponse(publications, seqId);
105
									vueARafraichir.rafraichir(retourRequete);
106
								} else {
107
									if (Mediateur.DEBUG) System.out.println("<-- PublicationAsyncDao > Liste non paginée, retour à "+vueARafraichir.getClass().toString());
108
									vueARafraichir.rafraichir(publications);
109
								}
110
 
1764 aurelien 111
							// Si la réponse est un objet, alors c'est une unique publication qui a été retournée
1513 jpm 112
							} else if (responseObject.get("publications").isObject() != null) {
113
 
114
								JSONObject reponse = responseObject.get("publications").isObject();
115
								// Transformation du tableau JSON réponse en ListeInstitution
116
								Publication publication = new Publication(reponse);
117
								// et on met à jour le demandeur des données
118
								if (seqId!=null)	{
119
									Reponse reponseRequete = new Reponse(publication, seqId);
120
									vueARafraichir.rafraichir(reponseRequete);
121
								} else {
122
									vueARafraichir.rafraichir(publication);
123
								}
124
							}
1319 gduche 125
						} else {
1568 jpm 126
							Log.warn(rb.getUrl()+"\n\tLa réponse n'est pas un objet ou un tableau JSON et vaut : "+responseValue.toString());
1513 jpm 127
						}
128
					} else {
129
						if (publicationId == null) {
130
							PublicationListe publications = new PublicationListe(0);
1319 gduche 131
							vueARafraichir.rafraichir(publications);
132
						}
106 aurelien 133
					}
134
				}
1513 jpm 135
			});
136
		}
106 aurelien 137
	}
756 jpm 138
 
1319 gduche 139
	public void ajouter(Publication publication, final Integer seqId) {
756 jpm 140
		String postDonneesEncodees = publication.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
711 aurelien 141
 
756 jpm 142
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM);
1235 cyprien 143
 
711 aurelien 144
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
145
			@Override
714 jp_milcent 146
			public void surReponse(JSONValue reponseValeur) {
1319 gduche 147
				traiterReponse(reponseValeur, "ajout_publication", seqId);
711 aurelien 148
			}
756 jpm 149
		}) ;
230 aurelien 150
	}
756 jpm 151
 
1319 gduche 152
	public void modifier(Publication publication, final Integer seqId) {
756 jpm 153
		String[] parametres = {publication.getId()};
154
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
155
 
786 jpm 156
		String postDonneesEncodees = publication.obtenirChainePOST()+"&cmhl_ce_modifier_par="+utilisateurId;
756 jpm 157
 
711 aurelien 158
		rb.envoyerRequete(postDonneesEncodees, new JsonRestRequestCallback() {
714 jp_milcent 159
			@Override
160
			public void surReponse(JSONValue reponseValeur) {
1319 gduche 161
				traiterReponse(reponseValeur, "modif_publication",  seqId);
711 aurelien 162
			}
756 jpm 163
		});
230 aurelien 164
	}
165
 
764 jpm 166
	public void supprimer(String publicationsId) {
756 jpm 167
		String[] parametres = {utilisateurId, publicationsId};
168
		final JsonRestRequestBuilder rb = UtilDAO.construireRequetePost(SERVICE_NOM, parametres);
748 jpm 169
		rb.envoyerRequeteSuppression(new JsonRestRequestCallback() {
711 aurelien 170
			@Override
714 jp_milcent 171
			public void surReponse(JSONValue reponseValeur) {
1319 gduche 172
				traiterReponse(reponseValeur, "suppression_publication", null);
711 aurelien 173
			}
174
		});
238 aurelien 175
	}
714 jp_milcent 176
 
1319 gduche 177
	private void traiterReponse(JSONValue reponseValeur, String type, Integer seqId) {
714 jp_milcent 178
		Information info = new Information(type);
1428 cyprien 179
 
748 jpm 180
		// Si la requête est un succès, réception d'une chaîne
714 jp_milcent 181
		if (reponseValeur.isString() != null) {
1096 jpm 182
			String idOuMessage = reponseValeur.isString().stringValue();
183
			if (idOuMessage.matches("^[0-9]+$")) {
184
				info.setDonnee(idOuMessage);
185
			} else {
186
				info.setMessage(idOuMessage);
187
			}
714 jp_milcent 188
		} else {
189
			info.setDeboguage("La réponse n'est pas une chaine JSON.");
190
		}
1319 gduche 191
 
1524 jpm 192
		if (seqId != null)	{
1319 gduche 193
			Reponse retourRequete = new Reponse(info, seqId);
194
			vueARafraichir.rafraichir(retourRequete);
195
		} else {
196
			vueARafraichir.rafraichir(info);
197
		}
714 jp_milcent 198
	}
1860 aurelien 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
	}
238 aurelien 235
 
106 aurelien 236
}