Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1918 Rev 2567
Line 27... Line 27...
27
 */
27
 */
28
public class ListeReferentielNomAsynchroneDAO implements FournisseurListe {
28
public class ListeReferentielNomAsynchroneDAO implements FournisseurListe {
Line 29... Line 29...
29
 
29
 
30
 
-
 
31
	//TODO : limiter taille du cache ? (si pb performance)
30
 
32
	
31
	//TODO : limiter taille du cache ? (si pb performance)
33
	/**
32
	/**
34
	 * Le modèle associé au DAO
33
	 * Le modèle associé au DAO
35
	 */
34
	 */
Line 43... Line 42...
43
	
42
	
Line 44... Line 43...
44
	private HashMap <String,ListeReferentielNom> cache = new HashMap();
43
	private HashMap <String,ListeReferentielNom> cache = new HashMap();
45
 
44
 
46
	public ListeReferentielNomAsynchroneDAO(ObservationModele observationModele)
-
 
47
	{
45
	public ListeReferentielNomAsynchroneDAO(ObservationModele observationModele)
48
	
46
	{
Line 49... Line -...
49
		this.observationModele=observationModele;
-
 
50
	}
-
 
51
	
-
 
52
	
-
 
53
	/**
-
 
54
	 * Envoie une requete au serveur jrest pour obtenir les communes  correspondant
-
 
55
	 * à des critères données en paramètres
-
 
56
	 * @param r le rafraichissable qui demande la mise à jour
47
		this.observationModele=observationModele;
57
	 * @param criteres un string contenant le terme a rechercher
48
	}
58
	 */
49
	
59
	@Override
50
	@Override
Line 68... Line 59...
68
		// En cache ?
59
		// En cache ?
69
		if ((referentielNomDataFromCache=getFromCache(critere))!=null) {
60
		if ((referentielNomDataFromCache=getFromCache(critere))!=null) {
70
			r.rafraichir(referentielNomDataFromCache,true);  
61
			r.rafraichir(referentielNomDataFromCache,true);  
71
	    }
62
	    }
Line 72... Line 63...
72
	    
63
	    
73
		else {
-
 
74
	    	  
64
		else {	  
75
	    // On vérifie si un genre et une espèce sont demandées
65
		    // On vérifie si un genre et une espèce sont demandées
76
		// et ajoute le / manuellement car sinon il devient urlencode
66
			// et ajoute le / manuellement car sinon il devient urlencodé
77
		String[] criteres =critere.split("/"); 
67
			String[] criteres =critere.split("/"); 
78
		String urlParams = "/NameSearch/"+referentiel+"/";
68
			String urlParams = "/NameSearch/"+referentiel+"/";
79
	    if(criteres.length > 1) {
69
		    if(criteres.length > 1) {
80
	    	String critere1 = criteres[0]; 
70
		    	String critere1 = criteres[0]; 
81
	    	String critere2 = criteres[1];
-
 
82
	    	
71
		    	String critere2 = criteres[1];		    	
83
	    	urlParams += URL.encode(critere1)+"/"+URL.encode(critere2);
72
		    	urlParams += URL.encode(critere1)+"/"+URL.encode(critere2);
84
	    } else {
73
		    } else {
85
	    	urlParams += URL.encode(critere);
74
		    	urlParams += URL.encode(critere);
86
	    }
75
		    }
87
	    
76
		    
88
	    this.referentiel = referentiel;
77
		    this.referentiel = referentiel;
89
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl()+urlParams);
-
 
90
		
-
 
Line -... Line 78...
-
 
78
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl()+urlParams);
91
		try {
79
			
92
			
80
			try {				
93
			rb.sendRequest(null, new RequestCallback() {
81
				rb.sendRequest(null, new RequestCallback() {
94
 
82
	
95
				@Override
83
					@Override
96
				public void onError(Request request, Throwable exception) {
-
 
97
					// TODO Auto-generated method stub
84
					public void onError(Request request, Throwable exception) {
98
					
85
						// TODO Auto-generated method stub	
99
				}
86
					}
100
 
87
	
101
				@Override
88
					@Override
102
				public void onResponseReceived(Request request,
-
 
103
						Response response) {
-
 
104
					
-
 
105
					final ListeReferentielNom referentielNomData ;
-
 
106
					
-
 
107
					final JSONValue responseValue = JSONParser.parse(response.getText());
-
 
108
					
-
 
109
					JSONArray reponse=null;
-
 
110
		
-
 
111
		
-
 
112
					// si c'est un tableau
-
 
113
					if ((reponse=responseValue.isArray()) != null) {
-
 
114
						
-
 
Line -... Line 89...
-
 
89
					public void onResponseReceived(Request request,
-
 
90
							Response response) {
-
 
91
						
-
 
92
						final ListeReferentielNom referentielNomData ;
-
 
93
						final JSONValue responseValue = JSONParser.parse(response.getText());
-
 
94
						JSONArray reponse=null;
-
 
95
			
-
 
96
						// si c'est un tableau
-
 
97
						if ((reponse=responseValue.isArray()) != null) {
-
 
98
							
115
						JSONArray noms;
99
							JSONArray noms;
116
						final int taillemax = reponse.size();
100
							final int taillemax = reponse.size();
117
						
101
							
118
						referentielNomData = new ListeReferentielNom(taillemax);
102
							referentielNomData = new ListeReferentielNom(taillemax);
119
						for (int i = 0; i < taillemax; i++) {
103
							for (int i = 0; i < taillemax; i++) {
120
							if ((noms=reponse.get(i).isArray()) != null) {
104
								if ((noms=reponse.get(i).isArray()) != null) {
121
								String nom = ((JSONString) noms.get(0)).stringValue();
105
									String nom = ((JSONString) noms.get(0)).stringValue();
122
								String numeroNom = ((JSONString) noms.get(1)).stringValue();
106
									String numeroNom = ((JSONString) noms.get(1)).stringValue();
123
								String statut= ((JSONString) noms.get(2)).stringValue();
107
									String statut= ((JSONString) noms.get(2)).stringValue();
-
 
108
									ReferentielNom nomScientifique = new ReferentielNom(nom, numeroNom, statut);
124
								ReferentielNom nomScientifique = new ReferentielNom(nom, numeroNom, statut);
109
									// FIXME : et si le numero de nom n'est pas unique ? (cas de multirefrentiel....)					
-
 
110
									referentielNomData.put(nomScientifique.getNumeroNom(),nomScientifique);								
-
 
111
								}
125
								// FIXME : et si le numero de nom n'est pas unique ? (cas de multirefrentiel....)					
112
							}
126
								referentielNomData.put(nomScientifique.getNumeroNom(),nomScientifique);								
113
						} else {	
127
							}
-
 
128
						}
114
							referentielNomData = new ListeReferentielNom(0) ;
129
					} else {
115
						}
130
						
-
 
131
						referentielNomData = new ListeReferentielNom(0) ;
-
 
132
					}
-
 
133
					addToCache(critere, referentielNomData);
116
						addToCache(critere, referentielNomData);
134
					r.rafraichir(referentielNomData,true);
117
						r.rafraichir(referentielNomData,true);
135
				}
118
					}
136
			}) ;
119
				}) ;
137
			
120
				
138
		} catch(RequestException e) {
-
 
139
			
121
			} catch(RequestException e) {
140
		}
-
 
141
		
122
				
Line 142... Line 123...
142
		} // fin else si pas de cache
123
			}	
143
			
124
		} // fin else si pas de cache			
144
	}
125
	}
Line 153... Line 134...
153
	}
134
	}
Line 154... Line 135...
154
 
135
 
155
	private ListeReferentielNom getFromCache (String query) {
136
	private ListeReferentielNom getFromCache (String query) {
156
		return cache.get(query.toLowerCase());
137
		return cache.get(query.toLowerCase());
157
	}	
138
	}	
158
}
139
}