Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 43 | Details | Compare with Previous | Last modification | View Log | RSS feed

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