Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2568 Rev 2609
Line 3... Line 3...
3
import java.util.HashMap;
3
import java.util.HashMap;
Line 4... Line 4...
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;
-
 
8
import org.tela_botanica.client.modeles.objets.ListeReferentielLocalite;
7
import org.tela_botanica.client.modeles.objets.Configuration;
9
import org.tela_botanica.client.modeles.objets.ReferentielLocalite;
8
import org.tela_botanica.client.modeles.objets.ReferentielLocalite;
Line 10... Line 9...
10
import org.tela_botanica.client.observation.ObservationModele;
9
import org.tela_botanica.client.observation.ObservationModele;
11
 
10
 
Line 23... Line 22...
23
/**
22
/**
24
 * DAO la liste des localites. Utilisation d'un cache pour eviter les requetes inutiles 
23
 * DAO la liste des localites. Utilisation d'un cache pour eviter les requetes inutiles 
25
 * @author David Delon
24
 * @author David Delon
26
 *
25
 *
27
 */
26
 */
28
public class ListeReferentielLocaliteAsynchroneDAO implements FournisseurListe {
27
public class ListeReferentielLocaliteAsynchroneDAO {
Line 29... Line -...
29
 
-
 
30
	
-
 
31
	
-
 
32
	
-
 
33
	/**
-
 
34
	 * Le modèle associé au DAO.
-
 
35
	 */
-
 
36
	private ObservationModele observationModele = null;
-
 
37
	
-
 
38
	
-
 
39
	/**
-
 
40
	 * Cache
-
 
41
	 * 
-
 
42
	 */
-
 
43
	
28
 
44
	private HashMap<String,ListeReferentielLocalite> cache = new HashMap();
-
 
45
	
-
 
46
	
-
 
47
	
-
 
48
	/**
-
 
49
	 *  Constructeur. 
-
 
50
	 * @param obs : Modele 
-
 
51
	 */
-
 
52
	
29
	public static String getUrlReferentielLocalites() {
53
	public ListeReferentielLocaliteAsynchroneDAO(final ObservationModele obs) {
-
 
54
		this.observationModele = obs;
30
		return Configuration.getServiceBaseUrl()+"/LocationSearch/";
55
	}
-
 
56
	
-
 
57
	
-
 
58
	/**
-
 
59
	 * Envoie une requete au serveur jrest pour obtenir les localites  correspondant
-
 
60
	 * à des critères données en paramètres.
-
 
61
	 * @param r le rafraichissable qui demande la mise à jour
-
 
62
	 * @param critere un string contenant le terme a rechercher
-
 
63
	 */
-
 
64
	
-
 
65
	
-
 
66
	@Override
-
 
67
	public final void obtenirListeDonnees(final Rafraichissable r, final String critere) {
-
 
68
		
-
 
69
		
-
 
70
		ListeReferentielLocalite referentielLocaliteDataFromCache=null;
-
 
71
		
-
 
72
		
-
 
73
		// En cache ?
-
 
74
		if ((referentielLocaliteDataFromCache=getFromCache(critere))!=null) {
-
 
75
			r.rafraichir(referentielLocaliteDataFromCache,true);  
-
 
76
	    }
-
 
77
	    
-
 
78
		else {
-
 
79
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() + "/LocationSearch/" + URL.encodeComponent(critere));
-
 
80
			try {
-
 
81
				
-
 
82
				rb.sendRequest(null, new RequestCallback() {
-
 
83
	
-
 
84
					@Override
-
 
85
					public void onError(final Request request, final Throwable exception) {
-
 
86
						// TODO Auto-generated method stub
-
 
87
						
-
 
88
					}
-
 
89
	
-
 
90
					@Override
-
 
91
					public void onResponseReceived(final Request request,
-
 
92
							final Response response) {
-
 
93
						
-
 
94
						final ListeReferentielLocalite referentielLocaliteData;					
-
 
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 localites;
-
 
102
							final int taillemax = reponse.size();
-
 
103
							
-
 
104
							referentielLocaliteData = new ListeReferentielLocalite(taillemax);
-
 
105
							
-
 
106
							for (int i = 0; i < taillemax; i++) {
-
 
107
								if ((localites = reponse.get(i).isArray()) != null) {
-
 
108
									String localite = ((JSONString) localites.get(0)).stringValue();
-
 
109
									String departement  = ((JSONString) localites.get(1)).stringValue();
-
 
110
									ReferentielLocalite com = new ReferentielLocalite(localite, departement);		
-
 
111
									referentielLocaliteData.put(com.getLocalite() + com.getCodeLocalite(), com);			
-
 
112
								}	
-
 
113
							}
-
 
114
						} else {					
-
 
115
							referentielLocaliteData = new ListeReferentielLocalite(0);
-
 
116
						}					
-
 
117
						addToCache(critere, referentielLocaliteData);
-
 
118
						r.rafraichir(referentielLocaliteData, true);
-
 
119
						
-
 
120
					}	
-
 
121
					
-
 
122
				});
-
 
123
				
-
 
124
			} catch (RequestException e) {			
-
 
125
				e.printStackTrace();
-
 
126
			}
-
 
127
		} // Fin else si pas de cache
-
 
128
	}
-
 
129
	
-
 
130
	/**
-
 
131
	 * Fonction à implémenter dans le futur, lors de l'utilisation de plusieurs 
-
 
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
	
-
 
139
	private void addToCache(String query, ListeReferentielLocalite result)	  {
-
 
140
		cache.put(query.toLowerCase(),result);
-
 
141
	}
-
 
142
 
-
 
143
	private ListeReferentielLocalite getFromCache (String query) {
-
 
144
		return cache.get(query.toLowerCase());
-
 
145
	}	
31
	}