New file |
0,0 → 1,251 |
package org.tela_botanica.client.modeles.dao; |
|
import java.util.Iterator; |
|
import org.tela_botanica.client.image.ImageModele; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.objets.Configuration; |
import org.tela_botanica.client.modeles.objets.ImageCarnet; |
import org.tela_botanica.client.modeles.objets.ListeImageCarnet; |
import org.tela_botanica.client.modeles.objets.Utilisateur; |
|
import com.google.gwt.http.client.Request; |
import org.tela_botanica.client.util.RequestBuilderWithCredentials; |
import com.google.gwt.http.client.RequestCallback; |
import com.google.gwt.http.client.RequestException; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONValue; |
|
/** |
* Data Object Access communiquant avec le serveur jrest fournissant la liste |
* des images répondant à des critères donné |
* |
* @author aurelien |
* |
*/ |
public class ListeImageAsynchroneDAO { |
|
/** |
* Le modèle associé au DAO |
*/ |
ImageModele iModele = null; |
|
public ListeImageAsynchroneDAO(ImageModele im) { |
iModele = im; |
} |
|
/** |
* Setteur pour le modèle |
* |
* @param im |
* le modèle à associer |
*/ |
public void setIModele(ImageModele im) { |
iModele = im; |
} |
|
/** |
* Envoie une requete au serveur jrest pour obtenir une liste d'images |
* correspondant à des critères demandés |
* |
* @param r |
* le rafraichissable qui a demandé les données |
* @param criteres |
* un tableau contenant les critères de selections |
*/ |
public void ObtenirListeImages(final Rafraichissable r, String[][] criteres) { |
|
String requete = ""; |
|
// on construit les paramètres du get |
if (criteres != null) { |
for (int i = 0; i < criteres.length; i++) { |
|
if (!criteres[i][1].equals("")) { |
if (i != 0) { |
requete += "&"; |
} |
requete += criteres[i][0] + "=" + criteres[i][1]; |
|
} |
} |
} |
|
// on envoie le get asynchrone |
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() |
+ "/InventoryImageList/" |
+ Utilisateur.getInstance().getIdentifiantUtilisateurConsulte() |
+ "/?" |
+ requete); |
try { |
rb.sendRequest(null, new RequestCallback() { |
|
@Override |
public void onError(Request request, Throwable exception) { |
// TODO Auto-generated method stub |
|
} |
|
@Override |
public void onResponseReceived(Request request, |
Response response) { |
|
final ListeImageCarnet photoData; |
|
final JSONValue responseValue = JSONParser.parse(response |
.getText()); |
// si c'est un tableau |
if (responseValue.isArray() != null) { |
|
final JSONArray reponse = responseValue.isArray(); |
|
final int taillemax = reponse.size(); |
photoData = new ListeImageCarnet(taillemax); |
|
// on le parcourt |
for (int j = 0; j < taillemax; j++) { |
|
JSONObject image = (JSONObject) reponse.get(j); |
|
ImageCarnet im = new ImageCarnet(image); |
|
// et on en extrait les données pour construire la |
// liste d'image |
photoData.put(im.getOrdre(), im); |
|
} |
} else { |
// si c'est un objet alors il n'y a qu'une réponse |
if (responseValue.isObject() != null) { |
photoData = new ListeImageCarnet(1); |
ImageCarnet im = new ImageCarnet(responseValue |
.isObject()); |
// on crée une liste de 1 élement auquel on ajoute |
// ce qui a été reçu |
photoData.put(im.getOrdre(), im); |
} else { |
// sinon on crée une liste vide |
photoData = new ListeImageCarnet(0); |
} |
} |
|
// dans tous les cas on transmet la liste crée au |
// rafraichissable en lui demandant de répandre les données |
// car il est |
// le premier à les recevoir |
r.rafraichir(photoData, true); |
} |
}); |
|
} catch (RequestException e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} |
} |
|
/** |
* Met à jour les valeurs d'une liste d'image donnée dans la base de données |
* |
* @param li |
* la liste d'image à synchroniser avec la base |
*/ |
public void SynchroniserBaseDeDonnees(ListeImageCarnet li) { |
// on parcourt toute la liste d'image |
for (Iterator<String> listIt = li.keySet().iterator(); listIt.hasNext();) { |
String postData = ""; |
|
ImageCarnet enCours = li.get(listIt.next()); |
|
String[][] champsModifiables = enCours.obtenirChampsModifiablesImage(); |
for (int i = 0; i < champsModifiables.length; i++) { |
postData += "&"+champsModifiables[i][0]+"="+champsModifiables[i][1]; |
} |
|
// on fait un post asynchrone et on les envoie à jrest |
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, |
Configuration.getServiceBaseUrl() |
+ "/inventoryImage/" + Utilisateur.getInstance().getIdentifiantUtilisateurConsulte() + "/"); |
|
try { |
rb.sendRequest(postData, new RequestCallback() { |
|
@Override |
public void onError(Request request, Throwable exception) { |
|
} |
|
@Override |
public void onResponseReceived(Request request, |
Response response) { |
|
if (response.getText().equals("OK")) { |
return; |
} else { |
com.google.gwt.user.client.Window |
.alert("Problème lors de la mise à jour des données"); |
} |
|
} |
|
}); |
} catch (RequestException e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} |
} |
} |
|
/** |
* Supprime des image sur le serveur par rapport à leur identifant |
* |
* @param ids |
* un tableau d'identifiants d'images à supprimer |
*/ |
public void supprimerBaseDeDonnees(String[] ids) { |
String postData = ""; |
// on fait un delete dans le post (jrest ne gère pas delete comme une |
// action à part entière) |
postData += "&action=DELETE"; |
|
String uid = ""; |
|
// on concatène les ids |
for (int i = 0; i < ids.length; i++) { |
|
uid += ids[i] + ","; |
} |
|
// et on envoie ça au serveur |
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST, Configuration.getServiceBaseUrl() |
+ "/inventoryImageList/" + Utilisateur.getInstance().getIdentifiantUtilisateurConsulte() + "/" + uid); |
try { |
rb.sendRequest(postData, new RequestCallback() { |
|
@Override |
public void onError(Request request, Throwable exception) { |
// TODO Auto-generated method stub |
|
} |
|
@Override |
public void onResponseReceived(Request request, |
Response response) { |
|
// quand la requête est éxecutée on le signale au modèle |
// poru qu'il mette à jour les données |
// et en notifie le médiateur |
iModele.requeteTerminee(); |
|
} |
}); |
|
} catch (RequestException e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} |
} |
|
} |