Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 43 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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