Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 728 Rev 806
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.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.modeles.ListeReferentielPerso.TypesReferentiels;
6
import org.tela_botanica.client.modeles.ListeReferentielPerso.TypesReferentiels;
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
public class ListeReferentielPersoAsynchroneDAO {
20
public class ListeReferentielPersoAsynchroneDAO {
21
	
21
	
22
	/**
22
	/**
23
	 * Cache
23
	 * Cache
24
	 * 
24
	 * 
25
	 */	
25
	 */	
26
	private HashMap<String,ListeReferentielPerso> cache = new HashMap();
26
	private HashMap<String,ListeReferentielPerso> cache = new HashMap();
27
 
27
 
28
	private TypesReferentiels refDemande = null;
28
	private TypesReferentiels refDemande = null;
29
	
29
	
30
	public ListeReferentielPersoAsynchroneDAO(ObservationModele obs) {
30
	public ListeReferentielPersoAsynchroneDAO(ObservationModele obs) {
31
		
31
		
32
	}
32
	}
33
	
33
	
34
	public void setRefDemande(TypesReferentiels refDemande) {
34
	public void setRefDemande(TypesReferentiels refDemande) {
35
		this.refDemande = refDemande;
35
		this.refDemande = refDemande;
36
	}
36
	}
37
	
37
	
38
	public void obtenirListeDonnees(final Rafraichissable r, String utilisateur,  final String critere) {
38
	public void obtenirListeDonnees(final Rafraichissable r, String utilisateur,  final String critere) {
39
		switch (refDemande) {
-
 
40
		
-
 
41
			case REFERENTIEL_STATION:
-
 
42
				
-
 
43
			break;
-
 
44
	
-
 
45
			default:
-
 
46
			break;
-
 
47
		}
-
 
48
			
-
 
49
		ListeReferentielPerso referentielPersoDataFromCache=null;
-
 
50
			
-
 
51
			
-
 
52
		// En cache ?
-
 
53
		if ((referentielPersoDataFromCache=getFromCache(critere))!=null) {
-
 
54
			r.rafraichir(referentielPersoDataFromCache,true);  
-
 
55
	    }
-
 
56
	    
-
 
57
		else {
-
 
58
		    	  	
39
		    	  	
59
			RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl() + 
40
			RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl() + 
60
													"/SelfRefList/"+
41
													"/SelfRefList/"+
61
													utilisateur+"/"+
42
													utilisateur+"/"+
62
													refDemande.toString()+
43
													refDemande.toString()+
63
													"?start=0&limit=50&recherche="+URL.encode(critere));
44
													"?start=0&limit=50&recherche="+URL.encode(critere));
64
			
45
			
65
			try {
46
			try {
66
				
47
				
67
				rb.sendRequest(null, new RequestCallback() {
48
				rb.sendRequest(null, new RequestCallback() {
68
 
49
 
69
					public void onError(final Request request, final Throwable exception) {
50
					public void onError(final Request request, final Throwable exception) {
70
						// TODO Auto-generated method stub
51
						// TODO Auto-generated method stub
71
						
52
						
72
					}
53
					}
73
 
54
 
74
					public void onResponseReceived(final Request request,
55
					public void onResponseReceived(final Request request,
75
							final Response response) {
56
							final Response response) {
76
						
57
						
77
						final ListeReferentielPerso referentielData;
58
						final ListeReferentielPerso referentielData;
78
						
59
						
79
						final JSONValue responseValue = JSONParser.parse(response.getText());
60
						final JSONValue responseValue = JSONParser.parse(response.getText());
80
						
61
						
81
						JSONArray reponse = null;
62
						JSONArray reponse = null;
82
			
63
			
83
			
64
			
84
						// si c'est un tableau
65
						// si c'est un tableau
85
						if ((reponse = responseValue.isArray()) != null) {
66
						if ((reponse = responseValue.isArray()) != null) {
86
							
67
							
87
							JSONString elementsRef;
68
							JSONString elementsRef;
88
							final int taillemax = reponse.size();
69
							final int taillemax = reponse.size();
89
							
70
							
90
							referentielData = new ListeReferentielPerso(taillemax, refDemande);
71
							referentielData = new ListeReferentielPerso(taillemax, refDemande);
91
							
72
							
92
							for (int i = 0; i < taillemax; i++) {
73
							for (int i = 0; i < taillemax; i++) {
93
								if ((elementsRef = reponse.get(i).isString()) != null) {
74
								if ((elementsRef = reponse.get(i).isString()) != null) {
94
									
75
									
95
									String valeur = elementsRef.stringValue();
76
									String valeur = elementsRef.stringValue();
96
									referentielData.put(i+"", valeur);
77
									referentielData.put(i+"", valeur);
97
											
78
											
98
								}	
79
								}	
99
							}
80
							}
100
						} else {
81
						} else {
101
							
82
							
102
							referentielData = new ListeReferentielPerso(0, refDemande);
83
							referentielData = new ListeReferentielPerso(0, refDemande);
103
							
84
							
104
						}			
85
						}			
105
						// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
86
						// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
106
						// le premier à les recevoir		
87
						// le premier à les recevoir		
107
						
-
 
108
						addToCache(critere, referentielData);
-
 
109
						r.rafraichir(referentielData, true);
88
						r.rafraichir(referentielData, true);
110
						
89
						
111
					}	
90
					}	
112
					
91
					
113
				});
92
				});
114
				
93
				
115
			} catch (RequestException e) {
94
			} catch (RequestException e) {
116
				
95
				
117
				e.printStackTrace();
96
				e.printStackTrace();
118
			}
97
			}
119
			
-
 
120
			} // Fin else si pas de cache
-
 
121
			
-
 
122
	}
-
 
123
	
-
 
124
	
-
 
125
	private void addToCache(String query, ListeReferentielPerso result)	  {
-
 
126
		cache.put(query.toLowerCase(),result);
-
 
127
	}
-
 
128
 
-
 
129
	private ListeReferentielPerso getFromCache (String query) {
-
 
130
		return (ListeReferentielPerso) cache.get(query.toLowerCase());
-
 
131
	}
98
	}
132
}
99
}