Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 204 Rev 254
1
package org.tela_botanica.client.modeles;
1
package org.tela_botanica.client.modeles;
2
 
2
 
3
import java.util.HashMap;
3
import java.util.HashMap;
4
 
4
 
5
import org.tela_botanica.client.interfaces.FournisseurListe;
5
import org.tela_botanica.client.interfaces.FournisseurListe;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.observation.ObservationModele;
7
import org.tela_botanica.client.observation.ObservationModele;
8
 
8
 
9
import com.google.gwt.http.client.Request;
9
import com.google.gwt.http.client.Request;
10
import com.google.gwt.http.client.RequestBuilder;
10
import com.google.gwt.http.client.RequestBuilder;
11
import com.google.gwt.http.client.RequestCallback;
11
import com.google.gwt.http.client.RequestCallback;
12
import com.google.gwt.http.client.RequestException;
12
import com.google.gwt.http.client.RequestException;
13
import com.google.gwt.http.client.Response;
13
import com.google.gwt.http.client.Response;
14
import com.google.gwt.http.client.URL;
14
import com.google.gwt.http.client.URL;
15
import com.google.gwt.json.client.JSONArray;
15
import com.google.gwt.json.client.JSONArray;
16
import com.google.gwt.json.client.JSONParser;
16
import com.google.gwt.json.client.JSONParser;
17
import com.google.gwt.json.client.JSONString;
17
import com.google.gwt.json.client.JSONString;
18
import com.google.gwt.json.client.JSONValue;
18
import com.google.gwt.json.client.JSONValue;
19
 
19
 
20
/**
20
/**
21
 * DAO la liste des communes. Utilisation d'un cache pour eviter les requetes inutiles 
21
 * DAO la liste des communes. Utilisation d'un cache pour eviter les requetes inutiles 
22
 * @author David Delon
22
 * @author David Delon
23
 *
23
 *
24
 */
24
 */
25
public class ListeReferentielCommuneAsynchroneDAO implements FournisseurListe {
25
public class ListeReferentielCommuneAsynchroneDAO implements FournisseurListe {
26
 
26
 
27
	
27
	
28
	
28
	
29
	
29
	
30
	/**
30
	/**
31
	 * Le modèle associé au DAO.
31
	 * Le modèle associé au DAO.
32
	 */
32
	 */
33
	private ObservationModele observationModele = null;
33
	private ObservationModele observationModele = null;
34
	
34
	
35
	
35
	
36
	/**
36
	/**
37
	 * Cache
37
	 * Cache
38
	 * 
38
	 * 
39
	 */
39
	 */
40
	
40
	
41
	private HashMap<String,ListeReferentielCommune> cache = new HashMap();
41
	private HashMap<String,ListeReferentielCommune> cache = new HashMap();
42
	
42
	
43
	
43
	
44
	
44
	
45
	/**
45
	/**
46
	 *  Constructeur. 
46
	 *  Constructeur. 
47
	 * @param obs : Modele 
47
	 * @param obs : Modele 
48
	 */
48
	 */
49
	
49
	
50
	public ListeReferentielCommuneAsynchroneDAO(final ObservationModele obs) {
50
	public ListeReferentielCommuneAsynchroneDAO(final ObservationModele obs) {
51
		this.observationModele = obs;
51
		this.observationModele = obs;
52
	}
52
	}
53
	
53
	
54
	
54
	
55
	/**
55
	/**
56
	 * Envoie une requete au serveur jrest pour obtenir les communes  correspondant
56
	 * Envoie une requete au serveur jrest pour obtenir les communes  correspondant
57
	 * à des critères données en paramètres.
57
	 * à des critères données en paramètres.
58
	 * @param r le rafraichissable qui demande la mise à jour
58
	 * @param r le rafraichissable qui demande la mise à jour
59
	 * @param critere un string contenant le terme a rechercher
59
	 * @param critere un string contenant le terme a rechercher
60
	 */
60
	 */
61
	
61
	
62
	
62
	
63
	public final void obtenirListeDonnees(final Rafraichissable r, final String critere) {
63
	public final void obtenirListeDonnees(final Rafraichissable r, final String critere) {
64
		
64
		
65
		
65
		
66
		ListeReferentielCommune referentielCommuneDataFromCache=null;
66
		ListeReferentielCommune referentielCommuneDataFromCache=null;
67
		
67
		
68
		
68
		
69
		// En cache ?
69
		// En cache ?
70
		if ((referentielCommuneDataFromCache=getFromCache(critere))!=null) {
70
		if ((referentielCommuneDataFromCache=getFromCache(critere))!=null) {
71
			r.rafraichir(referentielCommuneDataFromCache,true);  
71
			r.rafraichir(referentielCommuneDataFromCache,true);  
72
	    }
72
	    }
73
	    
73
	    
74
		else {
74
		else {
75
	    	  
75
	    	  
76
	    	  
76
	    	  
77
	  
77
	  
78
		
78
		
79
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, observationModele.getConfig().getServiceBaseUrl() + "/LocationSearch/" + URL.encodeComponent(critere));
79
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl() + "/LocationSearch/" + URL.encodeComponent(critere));
80
		
80
		
81
		try {
81
		try {
82
			
82
			
83
			rb.sendRequest(null, new RequestCallback() {
83
			rb.sendRequest(null, new RequestCallback() {
84
 
84
 
85
				public void onError(final Request request, final Throwable exception) {
85
				public void onError(final Request request, final Throwable exception) {
86
					// TODO Auto-generated method stub
86
					// TODO Auto-generated method stub
87
					
87
					
88
				}
88
				}
89
 
89
 
90
				public void onResponseReceived(final Request request,
90
				public void onResponseReceived(final Request request,
91
						final Response response) {
91
						final Response response) {
92
					
92
					
93
					final ListeReferentielCommune referentielCommuneData;
93
					final ListeReferentielCommune referentielCommuneData;
94
					
94
					
95
					final JSONValue responseValue = JSONParser.parse(response.getText());
95
					final JSONValue responseValue = JSONParser.parse(response.getText());
96
					
96
					
97
					JSONArray reponse = null;
97
					JSONArray reponse = null;
98
		
98
		
99
		
99
		
100
					// si c'est un tableau
100
					// si c'est un tableau
101
					if ((reponse = responseValue.isArray()) != null) {
101
					if ((reponse = responseValue.isArray()) != null) {
102
						
102
						
103
						JSONArray communes;
103
						JSONArray communes;
104
						final int taillemax = reponse.size();
104
						final int taillemax = reponse.size();
105
						
105
						
106
						referentielCommuneData = new ListeReferentielCommune(taillemax);
106
						referentielCommuneData = new ListeReferentielCommune(taillemax);
107
						
107
						
108
						for (int i = 0; i < taillemax; i++) {
108
						for (int i = 0; i < taillemax; i++) {
109
							if ((communes = reponse.get(i).isArray()) != null) {
109
							if ((communes = reponse.get(i).isArray()) != null) {
110
								
110
								
111
								String commune = ((JSONString) communes.get(0)).stringValue();
111
								String commune = ((JSONString) communes.get(0)).stringValue();
112
								String departement  = ((JSONString) communes.get(1)).stringValue();
112
								String departement  = ((JSONString) communes.get(1)).stringValue();
113
								
113
								
114
								
114
								
115
								ReferentielCommune com = new ReferentielCommune(commune, departement);
115
								ReferentielCommune com = new ReferentielCommune(commune, departement);
116
				
116
				
117
								referentielCommuneData.put(com.getCommune() + com.getDepartement(), com);
117
								referentielCommuneData.put(com.getCommune() + com.getDepartement(), com);
118
										
118
										
119
							}	
119
							}	
120
						}
120
						}
121
					} else {
121
					} else {
122
						
122
						
123
						referentielCommuneData = new ListeReferentielCommune(0);
123
						referentielCommuneData = new ListeReferentielCommune(0);
124
						
124
						
125
					}			
125
					}			
126
					// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
126
					// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
127
					// le premier à les recevoir		
127
					// le premier à les recevoir		
128
					
128
					
129
					addToCache(critere, referentielCommuneData);
129
					addToCache(critere, referentielCommuneData);
130
					r.rafraichir(referentielCommuneData, true);
130
					r.rafraichir(referentielCommuneData, true);
131
					
131
					
132
				}	
132
				}	
133
				
133
				
134
			});
134
			});
135
			
135
			
136
		} catch (RequestException e) {
136
		} catch (RequestException e) {
137
			
137
			
138
			e.printStackTrace();
138
			e.printStackTrace();
139
		}
139
		}
140
		
140
		
141
		} // Fin else si pas de cache
141
		} // Fin else si pas de cache
142
		
142
		
143
	}
143
	}
144
	
144
	
145
	  private void addToCache(String query, ListeReferentielCommune result)	  {
145
	  private void addToCache(String query, ListeReferentielCommune result)	  {
146
		  cache.put(query.toLowerCase(),result);
146
		  cache.put(query.toLowerCase(),result);
147
	  }
147
	  }
148
 
148
 
149
	  private ListeReferentielCommune getFromCache (String query) {
149
	  private ListeReferentielCommune getFromCache (String query) {
150
		  return (ListeReferentielCommune) cache.get(query.toLowerCase());
150
		  return (ListeReferentielCommune) cache.get(query.toLowerCase());
151
	  }
151
	  }
152
 
152
 
153
 
153
 
154
	
154
	
155
}
155
}