Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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