Subversion Repositories eFlore/Archives.cel-v2

Rev

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

Rev 36 Rev 43
1
package org.tela_botanica.client.modeles;
1
package org.tela_botanica.client.modeles;
2
 
2
 
3
import java.util.Iterator;
3
import java.util.Iterator;
4
 
4
 
5
import org.tela_botanica.client.image.ImageMediateur;
5
import org.tela_botanica.client.image.ImageMediateur;
6
import org.tela_botanica.client.image.ImageModele;
6
import org.tela_botanica.client.image.ImageModele;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
 
8
 
9
import com.google.gwt.json.client.JSONArray;
9
import com.google.gwt.json.client.JSONArray;
10
import com.google.gwt.json.client.JSONObject;
10
import com.google.gwt.json.client.JSONObject;
11
import com.google.gwt.json.client.JSONParser;
11
import com.google.gwt.json.client.JSONParser;
12
import com.google.gwt.json.client.JSONString;
12
import com.google.gwt.json.client.JSONString;
13
import com.google.gwt.json.client.JSONValue;
13
import com.google.gwt.json.client.JSONValue;
14
import com.google.gwt.user.client.HTTPRequest;
14
import com.google.gwt.user.client.HTTPRequest;
15
import com.google.gwt.user.client.ResponseTextHandler;
15
import com.google.gwt.user.client.ResponseTextHandler;
16
import com.google.gwt.user.client.Window;
16
import com.google.gwt.user.client.Window;
17
import com.gwtext.client.data.ArrayReader;
17
import com.gwtext.client.data.ArrayReader;
18
import com.gwtext.client.data.FieldDef;
18
import com.gwtext.client.data.FieldDef;
19
import com.gwtext.client.data.MemoryProxy;
19
import com.gwtext.client.data.MemoryProxy;
20
import com.gwtext.client.data.RecordDef;
20
import com.gwtext.client.data.RecordDef;
21
import com.gwtext.client.data.Store;
21
import com.gwtext.client.data.Store;
22
import com.gwtext.client.data.StringFieldDef;
22
import com.gwtext.client.data.StringFieldDef;
23
 
23
 
24
/**
24
/**
25
 * Data Object Access communiquant avec le serveur jrest fournissant la liste des images
25
 * Data Object Access communiquant avec le serveur jrest fournissant la liste des images
26
 * répondant à des critères donné
26
 * répondant à des critères donné
27
 * @author aurelien
27
 * @author aurelien
28
 *
28
 *
29
 */
29
 */
30
public class ListeImageAsynchroneDAO {
30
public class ListeImageAsynchroneDAO {
31
	
31
	
32
	/**
32
	/**
33
	 * Le modèle associé au DAO
33
	 * Le modèle associé au DAO
34
	 */
34
	 */
35
	ImageModele iModele = null ;
35
	ImageModele iModele = null ;
36
	
36
	
37
	/**
37
	/**
38
	 * Setteur pour le modèle
38
	 * Setteur pour le modèle
39
	 * @param im le modèle à associer
39
	 * @param im le modèle à associer
40
	 */
40
	 */
41
	public void setIModele(ImageModele im)
41
	public void setIModele(ImageModele im)
42
	{
42
	{
43
		iModele = im ;
43
		iModele = im ;
44
	}
44
	}
45
	
45
	
46
	/**
46
	/**
47
	 * Envoie une requete au serveur jrest pour obtenir une liste d'images correspondant à des critères demandés 
47
	 * Envoie une requete au serveur jrest pour obtenir une liste d'images correspondant à des critères demandés 
48
	 * @param r le rafraichissable qui a demandé les données
48
	 * @param r le rafraichissable qui a demandé les données
49
	 * @param criteres un tableau contenant les critères de selections
49
	 * @param criteres un tableau contenant les critères de selections
50
	 */
50
	 */
51
	public void ObtenirListeImages(final Rafraichissable r, String[][] criteres)
51
	public void ObtenirListeImages(final Rafraichissable r, String[][] criteres)
52
	{
52
	{
53
		
53
		
54
		String requete = "" ;
54
		String requete = "" ;
55
		
55
		
56
		// on construit les paramètres du get
56
		// on construit les paramètres du get
57
		if(criteres != null)
57
		if(criteres != null)
58
		{
58
		{
59
			for (int i = 0; i < criteres.length; i++) {
59
			for (int i = 0; i < criteres.length; i++) {
60
				
-
 
61
				requete += criteres[i][0]+"="+criteres[i][1] ;
60
				
62
				if(i != criteres.length - 1)
61
				if(!criteres[i][1].equals(""))
-
 
62
				{
-
 
63
					if(i!= 0)
63
				{
64
					{
-
 
65
						requete += "&";
-
 
66
					}
-
 
67
					requete += criteres[i][0]+"="+criteres[i][1] ;
64
					requete += "&" ;
68
		
65
				}
69
				}
66
			}
70
			}
67
		}
71
		}
68
		
72
		
69
		// on envoie le get asynchrone
73
		// on envoie le get asynchrone
70
		HTTPRequest.asyncGet("jrest/InventoryImageList/0/"+requete, new ResponseTextHandler() {
74
		HTTPRequest.asyncGet("jrest/InventoryImageList/0/"+requete, new ResponseTextHandler() {
71
			
75
			
72
			// si tout se passe bien on reçoit une réponse JSON
76
			// si tout se passe bien on reçoit une réponse JSON
73
			public void onCompletion(String responseText) {
77
			public void onCompletion(String responseText) {
74
				
78
				
75
				final ListeImageCarnet photoData ;
79
				final ListeImageCarnet photoData ;
76
 
80
 
77
				final JSONValue responseValue = JSONParser.parse(responseText);
81
				final JSONValue responseValue = JSONParser.parse(responseText);
78
				// si c'est un tableau
82
				// si c'est un tableau
79
				if (responseValue.isArray() != null) {
83
				if (responseValue.isArray() != null) {
80
					
84
					
81
					final JSONArray reponse = responseValue.isArray();
85
					final JSONArray reponse = responseValue.isArray();
82
 
86
 
83
					final int taillemax = reponse.size();
87
					final int taillemax = reponse.size();
84
					photoData = new ListeImageCarnet(taillemax);
88
					photoData = new ListeImageCarnet(taillemax);
85
					
89
					
86
					// on le parcourt
90
					// on le parcourt
87
					for (int j = 0; j < taillemax ; j++) {
91
					for (int j = 0; j < taillemax ; j++) {
88
						
92
						
89
						JSONObject image = (JSONObject)reponse.get(j) ;
93
						JSONObject image = (JSONObject)reponse.get(j) ;
90
						
94
						
91
						ImageCarnet im = new ImageCarnet(image) ;
95
						ImageCarnet im = new ImageCarnet(image) ;
92
						
96
						
93
						// et on en extrait les données pour construire la liste d'image
97
						// et on en extrait les données pour construire la liste d'image
94
						photoData.put(im.getOrdre(),im) ;
98
						photoData.put(im.getOrdre(),im) ;
95
						
99
						
96
					}
100
					}
97
				}
101
				}
98
				else
102
				else
99
				{
103
				{
100
					// si c'est un objet alors il n'y a qu'une réponse
104
					// si c'est un objet alors il n'y a qu'une réponse
101
					if(responseValue.isObject() != null)
105
					if(responseValue.isObject() != null)
102
					{
106
					{
103
						photoData = new ListeImageCarnet(1);
107
						photoData = new ListeImageCarnet(1);
104
						ImageCarnet im = new ImageCarnet(responseValue.isObject()) ;
108
						ImageCarnet im = new ImageCarnet(responseValue.isObject()) ;
105
						// on crée une liste de 1 élement auquel on ajoute ce qui a été reçu
109
						// on crée une liste de 1 élement auquel on ajoute ce qui a été reçu
106
						photoData.put(im.getOrdre(),im) ;
110
						photoData.put(im.getOrdre(),im) ;
107
					}
111
					}
108
					else
112
					else
109
					{
113
					{
110
						// sinon on crée une liste vide
114
						// sinon on crée une liste vide
111
						photoData = new ListeImageCarnet(0) ;
115
						photoData = new ListeImageCarnet(0) ;
112
					}
116
					}
113
				}
117
				}
114
				
118
				
115
				// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
119
				// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
116
				// le premier à les recevoir
120
				// le premier à les recevoir
117
				r.rafraichir(photoData,true);
121
				r.rafraichir(photoData,true);
118
			}
122
			}
119
		});
123
		});
120
	}
124
	}
121
	
125
	
122
	/**
126
	/**
123
	 * Met à jour les valeurs d'une liste d'image donnée dans la base de données
127
	 * Met à jour les valeurs d'une liste d'image donnée dans la base de données
124
	 * @param li la liste d'image à synchroniser avec la base
128
	 * @param li la liste d'image à synchroniser avec la base
125
	 */
129
	 */
126
	public void SynchroniserBaseDeDonnees(ListeImageCarnet li)
130
	public void SynchroniserBaseDeDonnees(ListeImageCarnet li)
127
	{
131
	{
128
		// on parcourt toute la liste d'image
132
		// on parcourt toute la liste d'image
129
		for(Iterator listIt = li.keySet().iterator() ; listIt.hasNext() ;)
133
		for(Iterator listIt = li.keySet().iterator() ; listIt.hasNext() ;)
130
		{
134
		{
131
			String postData = "" ;
135
			String postData = "" ;
132
			
136
			
133
			ImageCarnet enCours = (ImageCarnet)li.get(listIt.next()) ;
137
			ImageCarnet enCours = (ImageCarnet)li.get(listIt.next()) ;
134
			
138
			
135
			// pour chaque image on extrait les informations
139
			// pour chaque image on extrait les informations
136
			for(Iterator imgIt = enCours.keySet().iterator();imgIt.hasNext();)
140
			for(Iterator imgIt = enCours.keySet().iterator();imgIt.hasNext();)
137
			{
141
			{
138
				// qu'on place dans le poste
142
				// qu'on place dans le poste
139
				String key = (String)imgIt.next() ;
143
				String key = (String)imgIt.next() ;
140
				String valeur = enCours.renvoyerValeurCorrecte(key) ;
144
				String valeur = enCours.renvoyerValeurCorrecte(key) ;
141
				valeur.replaceAll("'", "\'") ;
145
				valeur.replaceAll("'", "\'") ;
142
					postData += "&"+key+"="+enCours.renvoyerValeurCorrecte(key) ;
146
					postData += "&"+key+"="+enCours.renvoyerValeurCorrecte(key) ;
143
			
147
			
144
			}
148
			}
145
			
149
			
146
				// on fait un post asynchrone et on les envoie à jrest
150
				// on fait un post asynchrone et on les envoie à jrest
147
				HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() {
151
				HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() {
148
						public void onCompletion(String responseText) {
152
						public void onCompletion(String responseText) {
149
							
153
							
150
							//TODO: vérifier mieux le succès del a requête
154
							//TODO: vérifier mieux le succès del a requête
151
							
155
							
152
						}
156
						}
153
						
157
						
154
					}) ;
158
					}) ;
155
		}
159
		}
156
	}
160
	}
157
	
161
	
158
	/**
162
	/**
159
	 * Supprime des image sur le serveur par rapport à leur identifant 
163
	 * Supprime des image sur le serveur par rapport à leur identifant 
160
	 * @param ids un tableau d'identifiants d'images à supprimer
164
	 * @param ids un tableau d'identifiants d'images à supprimer
161
	 */
165
	 */
162
	public void supprimerBaseDeDonnees(String[] ids)
166
	public void supprimerBaseDeDonnees(String[] ids)
163
	{
167
	{
164
		String postData = "" ;
168
		String postData = "" ;
165
		// on fait un delete dans le post (jrest ne gère pas delete comme une action à part entière)
169
		// on fait un delete dans le post (jrest ne gère pas delete comme une action à part entière)
166
		postData += "&action=DELETE" ;
170
		postData += "&action=DELETE" ;
167
		
171
		
168
		String uid = "" ;
172
		String uid = "" ;
169
		
173
		
170
		// on concatène les ids
174
		// on concatène les ids
171
		for (int i = 0; i < ids.length; i++) {
175
		for (int i = 0; i < ids.length; i++) {
172
			
176
			
173
			uid += ids[i]+"," ;
177
			uid += ids[i]+"," ;
174
		}
178
		}
175
		
179
		
176
		// et on envoie ça au serveur
180
		// et on envoie ça au serveur
177
		HTTPRequest.asyncPost("jrest/inventoryImageList/"+iModele.getIdentifiant()+"/"+uid, postData, new ResponseTextHandler() {
181
		HTTPRequest.asyncPost("jrest/inventoryImageList/"+iModele.getIdentifiant()+"/"+uid, postData, new ResponseTextHandler() {
178
			public void onCompletion(String responseText) {
182
			public void onCompletion(String responseText) {
179
				
183
				
180
				// quand la requête est éxecutée on le signale au modèle poru qu'il mette à jour les données
184
				// quand la requête est éxecutée on le signale au modèle poru qu'il mette à jour les données
181
				// et en notifie le médiateur
185
				// et en notifie le médiateur
182
				iModele.requeteTerminee() ;
186
				iModele.requeteTerminee() ;
183
			}
187
			}
184
			
188
			
185
		}) ;
189
		}) ;
186
	}
190
	}
187
	
191
	
188
 
192
 
189
}
193
}