Subversion Repositories eFlore/Applications.coel

Rev

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

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