Subversion Repositories eFlore/Archives.cel-v2

Rev

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