Subversion Repositories eFlore/Applications.coel

Rev

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