Subversion Repositories eFlore/Applications.coel

Rev

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