Subversion Repositories eFlore/Applications.coel

Rev

Rev 1288 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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