Subversion Repositories eFlore/Applications.cel

Rev

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

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