Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2567 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.ListeReferentielNom;
7
import org.tela_botanica.client.modeles.objets.Configuration;
9
import org.tela_botanica.client.modeles.objets.ReferentielNom;
8
import org.tela_botanica.client.modeles.objets.ReferentielNom;
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  liste noms scientifiques // utilisation d'un cahce memoire pour eviter des requetes inutiles.
23
 * DAO  liste noms scientifiques // utilisation d'un cahce memoire pour eviter des requetes inutiles.
25
 * @author David Delon
24
 * @author David Delon
26
 * 
25
 * 
27
 */
26
 */
28
public class ListeReferentielNomAsynchroneDAO implements FournisseurListe {
27
public class ListeReferentielNomAsynchroneDAO {
Line 29... Line -...
29
 
-
 
30
 
-
 
31
	//TODO : limiter taille du cache ? (si pb performance)
-
 
32
	/**
-
 
33
	 * Le modèle associé au DAO
-
 
34
	 */
-
 
35
	private ObservationModele observationModele = null ;
28
 
36
	private String referentiel = null;
-
 
37
	
-
 
38
	/**
-
 
39
	 * Cache
-
 
40
	 * 
-
 
41
	 */
-
 
42
	
29
	public static String getBaseUrlReferentielNom() {
43
	private HashMap <String,ListeReferentielNom> cache = new HashMap();
-
 
44
 
-
 
45
	public ListeReferentielNomAsynchroneDAO(ObservationModele observationModele)
-
 
46
	{
-
 
47
		this.observationModele=observationModele;
30
		return Configuration.getServiceBaseUrl()+"/NameSearch/{referentiel}/";
Line 48... Line -...
48
	}
-
 
49
	
31
	}
50
	@Override
-
 
51
	public void obtenirListeDonnees(final Rafraichissable r,final String referentiel, final String critere)
32
	
52
	{
-
 
53
		ListeReferentielNom referentielNomDataFromCache=null;
33
	public static String formaterUrlAutoCompletionReferentielNom(String urlRequete, String referentiel, String critere) {
54
		
34
		 // On vérifie si un genre et une espèce sont demandées
55
		if(this.referentiel != referentiel) {
-
 
-
 
35
		// et ajoute le / manuellement car sinon il devient urlencodé
Line 56... Line 36...
56
			cache.clear();
36
		String[] criteres =critere.split("/"); 
-
 
37
		urlRequete = urlRequete.replace("{referentiel}", referentiel);
-
 
38
		
-
 
39
		String params = "";
57
		}
40
	    if(criteres.length > 1) {
-
 
41
	    	String critere1 = criteres[0]; 
58
		
42
	    	String critere2 = criteres[1];		    	
59
		// En cache ?
43
	    	params += URL.encode(critere1)+"/"+URL.encode(critere2);
Line 60... Line -...
60
		if ((referentielNomDataFromCache=getFromCache(critere))!=null) {
-
 
61
			r.rafraichir(referentielNomDataFromCache,true);  
-
 
62
	    }
-
 
63
	    
-
 
64
		else {	  
-
 
65
		    // On vérifie si un genre et une espèce sont demandées
-
 
66
			// et ajoute le / manuellement car sinon il devient urlencodé
-
 
67
			String[] criteres =critere.split("/"); 
44
	    } else {
68
			String urlParams = "/NameSearch/"+referentiel+"/";
-
 
69
		    if(criteres.length > 1) {
-
 
70
		    	String critere1 = criteres[0]; 
-
 
71
		    	String critere2 = criteres[1];		    	
-
 
72
		    	urlParams += URL.encode(critere1)+"/"+URL.encode(critere2);
-
 
73
		    } else {
-
 
74
		    	urlParams += URL.encode(critere);
-
 
75
		    }
-
 
76
		    
-
 
77
		    this.referentiel = referentiel;
-
 
78
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl()+urlParams);
-
 
79
			
-
 
80
			try {				
-
 
81
				rb.sendRequest(null, new RequestCallback() {
-
 
82
	
-
 
83
					@Override
-
 
84
					public void onError(Request request, Throwable exception) {
-
 
85
						// TODO Auto-generated method stub	
-
 
86
					}
-
 
87
	
-
 
88
					@Override
-
 
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
							
-
 
99
							JSONArray noms;
-
 
100
							final int taillemax = reponse.size();
-
 
101
							
-
 
102
							referentielNomData = new ListeReferentielNom(taillemax);
-
 
103
							for (int i = 0; i < taillemax; i++) {
-
 
104
								if ((noms=reponse.get(i).isArray()) != null) {
-
 
105
									String nom = ((JSONString) noms.get(0)).stringValue();
-
 
106
									String numeroNom = ((JSONString) noms.get(1)).stringValue();
-
 
107
									String statut= ((JSONString) noms.get(2)).stringValue();
-
 
108
									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
								}
-
 
112
							}
-
 
113
						} else {	
-
 
114
							referentielNomData = new ListeReferentielNom(0) ;
-
 
115
						}
-
 
116
						addToCache(critere, referentielNomData);
-
 
117
						r.rafraichir(referentielNomData,true);
-
 
118
					}
-
 
119
				}) ;
-
 
120
				
-
 
121
			} catch(RequestException e) {
-
 
122
				
-
 
123
			}	
-
 
124
		} // fin else si pas de cache			
-
 
125
	}
-
 
126
	
45
	    	params += URL.encode(critere);
127
	@Override
-
 
128
	public void obtenirListeDonnees(Rafraichissable r, String critere) {	
-
 
129
		obtenirListeDonnees(r, "bdtfx", critere);
-
 
130
	}
-
 
131
	
-
 
132
	private void addToCache(String query, ListeReferentielNom result)	  {
-
 
133
		cache.put(query.toLowerCase(),result);
-
 
134
	}
-
 
135
 
46
	    }
136
	private ListeReferentielNom getFromCache (String query) {
47