Subversion Repositories eFlore/Applications.coel

Rev

Rev 1319 | Rev 1367 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1319 Rev 1329
Line 19... Line 19...
19
 
19
 
Line 20... Line 20...
20
public class ValeurListeAsyncDao {
20
public class ValeurListeAsyncDao {
Line 21... Line -...
21
	
-
 
22
	private static HashMap<String, Object> ontologieCache = new HashMap<String, Object>();
-
 
23
	
21
	
24
	private static HashMap<String, HashMap<Integer, Object>> pagedOntologieCache = new HashMap<String, HashMap<Integer, Object>>();
22
	private static HashMap<String, Object> ontologieCache = new HashMap<String, Object>();
25
	
-
 
26
	private static final String SERVICE_NOM = "CoelValeurListe";
23
	
-
 
24
	private static final String SERVICE_NOM = "CoelValeurListe";
27
	private Rafraichissable vueARafraichir = null;
25
	private Rafraichissable vueARafraichir = null;
Line 28... Line 26...
28
	private static ValeurListe tempListe = new ValeurListe();
26
	private int cptPage = 0;
29
	private int cptPage = 0;
27
	// FIXME : limiteJREST devrait être récupéré depuis un registre/dictionnaire
30
	private int limiteJREST = 150;
28
	private int limiteJREST = 150;
Line 31... Line 29...
31
 
29
 
32
	public ValeurListeAsyncDao(Rafraichissable vueCourante) {
30
	public ValeurListeAsyncDao(Rafraichissable vueCourante) {
33
		vueARafraichir = vueCourante;
31
		vueARafraichir = vueCourante;
34
	}
-
 
35
	
-
 
36
	public static HashMap<String, Object> getOntologieCache() {
-
 
37
		return ontologieCache;
-
 
38
	}
-
 
39
 
-
 
40
	public void chargerListe(boolean nextPage, String type, Integer cle, String abv, String idValeur, boolean pagination, String recherche, int start, int nbElements, final Integer seqId) {
-
 
41
		/** Si nextpage est VRAI, alors cela signifie que la liste est plus grande
-
 
42
		que la limite du JREST et l'on doit relancer une requete pour obtenir
-
 
43
		la page suivante **/
-
 
44
		if (nextPage) {
-
 
45
			cptPage++;
-
 
46
			selectionner(type, cle, abv, idValeur, pagination, recherche, cptPage*limiteJREST, limiteJREST, seqId);
-
 
47
		}
-
 
48
		/** Sinon cela signifie que le chargement de la liste est terminé et on peut
-
 
49
		la mettre en cache et retourner la réponse au demandeur **/
-
 
50
		else {
-
 
51
			// on met en cache
-
 
52
			String id = String.valueOf(cle);
-
 
53
			
-
 
54
			String abreviationStr = "";
-
 
55
			if (abv != null) {
-
 
56
				abreviationStr = abv;
-
 
57
				int indexPoint = abreviationStr.indexOf(".", 0);
-
 
58
				abreviationStr = abreviationStr.substring(0, indexPoint);
-
 
59
				id = id+abreviationStr; 
-
 
60
			}
-
 
61
			
-
 
62
			// réinitialiser le compteur
-
 
63
			cptPage = 0;
-
 
64
 
-
 
65
			// et on met à jour le demandeur des données			
-
 
66
			if (ontologieCache.get(id) != null) {
-
 
67
				if (vueARafraichir instanceof Sequenceur)	{
-
 
68
					vueARafraichir = (Sequenceur) vueARafraichir;
-
 
69
					
-
 
70
					Reponse reponse = new Reponse(ontologieCache.get(id), seqId);
-
 
71
					vueARafraichir.rafraichir(reponse);
-
 
72
				} else {
-
 
Line 73... Line 32...
73
					vueARafraichir.rafraichir(ontologieCache.get(id));
32
	}
74
				}
33
	
75
			}
34
	public static HashMap<String, Object> getOntologieCache() {
Line 90... Line 49...
90
	
49
	
91
	public void selectionner(String type, Integer cle, String abv, String idValeur, Integer seqId) {
50
	public void selectionner(String type, Integer cle, String abv, String idValeur, Integer seqId) {
92
		selectionner(type, cle, abv, idValeur, false, null, -1, -1, seqId);
51
		selectionner(type, cle, abv, idValeur, false, null, -1, -1, seqId);
Line -... Line 52...
-
 
52
	}
-
 
53
 
-
 
54
	/****************************************************************************************************
-
 
55
	 ** selectionner(final String type, final Integer cle, final String abv, final String idValeur, final boolean pagination, final String recherche, final int start, final int limit)
-
 
56
	/****************************************************************************************************
-
 
57
	 * Action :
-
 
58
	 * --------
-
 
59
	 * 		Récupère un nombre défini de Valeurs en s'aidant du nom partiel ou complet d'une valeur. 
-
 
60
	 * 		Cette méthode gère deux types de sélection de données :
-
 
61
	 * 		- la sélection en cache (ontologieCache) --> pagination = FALSE
-
 
62
	 * 		- la sélection "au fur et à mesure" --> pagination = TRUE
-
 
63
	 * 
-
 
64
	 * 		Gestion du cache :
-
 
65
	 * 		------------------
-
 
66
	 * 		- Le cache est utilisé si et seulement si 'pagination' est à FAUX car dans le cas où PAGINATION est
-
 
67
	 * 			à VRAI, les enregistrements sont chargés au fur et à mesure de la consultation des pages par
-
 
68
	 * 			l'utilisateur.
-
 
69
	 * 		- Si la taille de la liste chargée est supérieure au nombre maximum d'enregistrements retourné
-
 
70
	 * 		par le service JREST, alors on charge des blocs de valeurs jusqu'à ce que la totalité de la
-
 
71
	 * 		liste soit chargée.
-
 
72
	 * 
-
 
73
	 * Description des paramètres :
-
 
74
	 * ----------------------------
-
 
75
	 *  @param 'type' est un paramètre directement destiné au service JREST. Il permet de définir le type
-
 
76
	 *  		de requête SQL à exécuter.
-
 
77
	 *  @param 	'cle' est l'identifiant de la liste de valeurs à récupérer (cas d'un noeud dans l'arbre).
-
 
78
	 *  @param 	'abv' sert pour la liste des régions. Il représente l'abréviation du nom d'un pays. Ce
-
 
79
	 *  		paramètre est concaténé à la clé pour former une clé particulière dont on se sert pour
-
 
80
	 *  		stocker la liste en cache.
-
 
81
	 *  @param	'idValeur' est l'identifiant de la valeur à récupérer (cas d'une feuille dans l'arbre).
-
 
82
	 *  @param	'pagination' est un booléen qui définit si la requête doit être paginée ou non.
-
 
83
	 *  @param	'recherche' est une chaîne de caractères représentant tout ou partie du nom d'un projet.
-
 
84
	 *  		Si la chaîne est vide, alors tous les projets sont recherchés.
-
 
85
	 *  @param	'start' et 'limit' sont les paramètres indispensables à la pagination. 'start'
-
 
86
	 *  		est le paramètre qui décrit le numéro du tuple de départ et 'limit' le nombre
-
 
87
	 *  		d'éléments à collecter.
93
	}
88
	 *  
-
 
89
	 *****************************************************************************************************/
-
 
90
	public void selectionner(final String type, final Integer cle, final String abv, final String idValeur, final boolean pagination, final String recherche, final int start, final int limit, final Integer seqId) {
94
 
91
 
95
	public void selectionner(final String type, final Integer cle, final String abv, final String idValeur, final boolean pagination, final String recherche, final int start, final int limit, final Integer seqId) {
92
		/**
-
 
93
		 * La cleParent en Integer est insuffisante pour les liste valeurs comme Région qui on plusieurs 
96
		// La cleParent en Integer est insuffisante pour les liste valeurs comme Région qui on plusieurs sections sur leur liste
94
		 * sections sur leur liste (ex : on ne sélectionne que les régions FR.__ puis les régions ES.__ sur la liste 1078 ....
97
		// (ex : on ne sélectionne que les régions FR.__ puis les régions ES.__ sur la liste 1078 ....
95
		 **/
Line -... Line 96...
-
 
96
		final String cleParentPourCache = cle + (abv == null ? "" : abv);
98
		final String cleParentPourCache = cle + (abv == null ? "" : abv);
97
		final String cleParent = cle+"";
99
		final String cleParent = cle+"";
98
		
100
		
99
		/** GESTION DU PARAMETRE 'recherche' **/
101
		String nom = "";
100
		String nom = "";
102
		if ( (recherche == null) || (recherche.equals("")) ) nom = "";
101
		if ( (recherche == null) || (recherche.equals("")) ) nom = "";
Line -... Line 102...
-
 
102
		else {
103
		else {
103
			nom = recherche+"%";
104
			nom = recherche+"%";
104
		}
105
		}
-
 
106
 
105
 
107
		String abreviation = "";
106
		/** GESTION DU PARAMETRE 'abréviation' **/
108
		String paramAbv = "";
107
		String abreviation = "";
109
		
108
		String paramAbv = "";
110
		if (type.equals("ab") || type.equals("abv")) {
109
		if (type.equals("ab") || type.equals("abv")) {
111
			int positionPoint = abv.indexOf(".");
110
			int positionPoint = abv.indexOf(".");
Line -... Line 111...
-
 
111
			if (positionPoint != -1) abreviation = abv.substring(0, positionPoint)+"%";
112
			if (positionPoint != -1) abreviation = abv.substring(0, positionPoint)+"%";
112
			else abreviation=abv+"%";
113
			else abreviation=abv+"%";
-
 
114
		}
113
		}
Line -... Line 114...
-
 
114
		paramAbv = abreviation;
115
		paramAbv = abreviation;
115
 
Line 116... Line 116...
116
 
116
		/** GESTION DES PARAMETRES à transmettre au JREST **/
117
		String[] parametres = {type, cleParent, paramAbv, idValeur, nom};
117
		String[] parametres = {type, cleParent, paramAbv, idValeur, nom};
118
 
118
		HashMap<String, String> restrictions = new HashMap<String, String>();
Line -... Line 119...
-
 
119
 
119
		HashMap<String, String> restrictions = new HashMap<String, String>();
120
		/** GESTION DE LA REQUETE dans le cas d'une liste paginée **/
-
 
121
		if (pagination)	{
-
 
122
 
120
 
123
			restrictions.put("limit", String.valueOf(limit));
121
		if (pagination)	{
124
			restrictions.put("start", String.valueOf(start));
122
 
125
			restrictions.put("orderby", "cmlv_nom");
123
			restrictions.put("limit", String.valueOf(limit));
126
			
124
			restrictions.put("start", String.valueOf(start));
127
			/** CONSTRUCTION DE LA REQUETE **/
125
			restrictions.put("orderby", "cmlv_nom");
128
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
126
			
129
    		
127
    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
130
    		/** ENVOI DE LA REQUETE **/
-
 
131
    		rb.envoyerRequete(null, new JsonRestRequestCallback()
-
 
132
    		{
-
 
133
    			/** RECEPTION DE LA REPONSE **/
128
    		rb.envoyerRequete(null, new JsonRestRequestCallback()
134
    			public void surReponse(JSONValue responseValue)
129
    		{
135
    			{
130
    			@Override
136
    				if (vueARafraichir instanceof Sequenceur)	{
131
    			public void surReponse(JSONValue responseValue)
137
    					Reponse reponse = new Reponse(responseValue, seqId);
132
    			{	    			
138
    					vueARafraichir.rafraichir(reponse);
133
    				if (vueARafraichir instanceof Sequenceur)	{
139
    					
-
 
140
    				/** Dans le cas d'une liste paginée, vueARafraichir est un objet Proxy.
134
    					Reponse reponse = new Reponse(responseValue, seqId);
141
    				 * On retourne l'objet JSON au proxy afin que ce soit lui qui le traite **/
135
    					vueARafraichir.rafraichir(reponse);
142
    				} else {
-
 
143
    					vueARafraichir.rafraichir(responseValue);
136
    				} else {
144
    				}
Line -... Line 145...
-
 
145
    			}
137
    					vueARafraichir.rafraichir(responseValue);
146
    		});
138
    				}
-
 
139
    			}
147
		}
140
    		});
148
		/** GESTION DE LA REQUETE dans le cas d'une liste NON paginée **/
141
		}
149
		else
142
		else
150
		{
143
		{
151
			/** si start est supérieur à zéro, alors cela signifie que l'on doit charger une nouvelle page **/
144
			boolean nextPage = (start > 0);
-
 
145
			
152
			boolean nextPage = (start > 0);
146
			if (nextPage)
153
			
Line 147... Line 154...
147
			{
154
			/** définition des contraintes sur la requête SQL **/
148
				restrictions.put("start", String.valueOf(start));
-
 
149
				restrictions.put("limit", String.valueOf(limit));
155
			if (nextPage) {
150
				restrictions.put("orderby", "cmlv_nom");
156
				restrictions.put("start", String.valueOf(start));
151
			}
157
				restrictions.put("limit", String.valueOf(limit));
152
			else
-
 
153
			{
-
 
154
				restrictions.put("orderby", "cmlv_nom");
-
 
155
			}
-
 
156
			
158
				restrictions.put("orderby", "cmlv_nom");
157
			// si l'on est pas dans un processus de récupération d'une liste
159
			}
158
			// et si le cache contient déjà la liste recherchée
-
 
-
 
160
			else {
159
			if (ontologieCache.containsKey(cleParentPourCache) && !nextPage)
161
				restrictions.put("orderby", "cmlv_nom");
160
			{
162
			}
-
 
163
			
161
				//On est à la derniere page, on peu rafraichir
164
			/** Si l'on est pas dans un processus de récupération d'une liste, alors si le cache contient déjà la liste recherchée **/
-
 
165
			if (!nextPage && ontologieCache.containsKey(cleParentPourCache)) {
-
 
166
					
162
				if (vueARafraichir instanceof Sequenceur)	{
167
				/** on retourne à la vue la liste contenue dans le cache **/
163
					Reponse reponse = new Reponse(ontologieCache.get(cleParentPourCache), seqId);
168
				vueARafraichir.rafraichir(ontologieCache.get(cleParentPourCache));
164
					vueARafraichir.rafraichir(reponse);
169
			}
165
				} else {
170
			/** Si l'on est en train de récupérer une liste (c-a-d que l'on est en train de charger des blocs de données afin de récupérer totalement une liste) **/
-
 
171
			else {
166
					vueARafraichir.rafraichir(ontologieCache.get(cleParentPourCache));
172
				
167
				}
173
				/** CONSTRUCTION DE LA REQUETE **/
168
	    	}
174
	    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
169
			else
175
	    		
170
	    	{
176
	    		/** ENVOI DE LA REQUETE **/
171
	    		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres, restrictions);
177
	    		rb.envoyerRequete(null, new JsonRestRequestCallback() {
172
	    		rb.envoyerRequete(null, new JsonRestRequestCallback()
178
	    			
173
	    		{
179
	    			/** RECEPTION DE LA REPONSE **/
174
	    			@Override
180
	    			public void surReponse(JSONValue responseValue) {    	  
Line 192... Line 198...
192
							}
198
							}
193
							else {
199
							else {
194
								abreviationStr = "";
200
								abreviationStr = "";
195
							}
201
							}
Line 196... Line 202...
196
 
202
 
197
							/** si l'on a bien reçu une liste de valeurs **/
203
							/** Si l'on a bien reçu une liste de valeurs **/
198
							if (listeId != null)
204
							if (listeId != null)
199
							{
205
							{
200
								/** Transformation du tableau JSON réponse en ValeurListe **/
206
								/** Transformation du tableau JSON réponse en ValeurListe **/
201
								String id = listeId.stringValue();
207
								String id = listeId.stringValue();
Line 220... Line 226...
220
	    			}
226
	    			}
221
	    		});
227
	    		});
222
	    	}
228
	    	}
223
		}
229
		}
224
	}
230
	}
-
 
231
	
-
 
232
	/********************************************************************************************************
-
 
233
	 * Action :
-
 
234
	 * --------
-
 
235
	 * 		Clotûre le chargement d'une liste de valeurs si le chargement est terminé, ou lance le chargement
-
 
236
	 * 		du prochain bloc de données si la liste n'est pas chargée en totalité. 
-
 
237
	 * 
-
 
238
	 * Paramètres :
-
 
239
	 * ------------
-
 
240
	 * @param nextPage : est VRAI s'il faut faut continuer de charger la liste car elle n'est pas entièrement chargée et FAUX sinon
-
 
241
	 * @param Tous les autres paramètres sont les mêmes que pour la méthode 'selectionner'
-
 
242
	 * 
-
 
243
	 *********************************************************************************************************/
-
 
244
	public void chargerListe(boolean nextPage, String type, Integer cle, String abv, String idValeur, boolean pagination, String recherche, int start, int nbElements, final Integer seqId) {
-
 
245
		
-
 
246
		/** Si nextpage est VRAI, alors cela signifie que l'on doit relancer une requete pour obtenir
-
 
247
		la page suivante **/
-
 
248
		if (nextPage) {
-
 
249
			cptPage++;
-
 
250
			selectionner(type, cle, abv, idValeur, pagination, recherche, cptPage*limiteJREST, limiteJREST, seqId);
-
 
251
		}
-
 
252
		
-
 
253
		/** Sinon cela signifie que le chargement de la liste est terminé et on peut
-
 
254
		la mettre en cache et retourner la réponse au demandeur **/
-
 
255
		else {
-
 
256
			// recupération de l'idenfiant de la liste
-
 
257
			String id = String.valueOf(cle);
-
 
258
			
-
 
259
			// gestion de l'abréviation pour la liste des régions
-
 
260
			String abreviationStr = "";
-
 
261
			if (abv != null) {
-
 
262
				abreviationStr = abv;
-
 
263
				int indexPoint = abreviationStr.indexOf(".", 0);
-
 
264
				abreviationStr = abreviationStr.substring(0, indexPoint);
-
 
265
				id = id+abreviationStr; 
-
 
266
			}
-
 
267
			
-
 
268
			// réinitialisation du compteur
-
 
269
			cptPage = 0;
-
 
270
 
-
 
271
			/** On retourne la liste à la vue **/ 		
-
 
272
			if (ontologieCache.get(id) != null) {
-
 
273
				if (vueARafraichir instanceof Sequenceur)	{
-
 
274
					vueARafraichir = (Sequenceur) vueARafraichir;
-
 
275
					Reponse reponse = new Reponse(ontologieCache.get(id), seqId);
-
 
276
					vueARafraichir.rafraichir(reponse);
-
 
277
				} else {
-
 
278
					vueARafraichir.rafraichir(ontologieCache.get(id));
-
 
279
				}
-
 
280
			}
-
 
281
		}
-
 
282
	}	
225
}
283
}