New file |
0,0 → 1,457 |
package org.tela_botanica.client.modeles.objets; |
|
import java.util.HashMap; |
import java.util.Iterator; |
import java.util.Set; |
|
import org.tela_botanica.client.i18n.VocabulaireMetadonnees; |
import org.tela_botanica.client.util.Util; |
|
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.xml.client.Document; |
import com.google.gwt.xml.client.Node; |
import com.google.gwt.xml.client.NodeList; |
import com.google.gwt.xml.client.Text; |
import com.google.gwt.xml.client.XMLParser; |
import com.google.gwt.xml.client.impl.DOMParseException; |
|
/** |
* |
* Classe representant une image du carnet, elle ne contient pas d'image à |
* proprement parler mais plutôt les informations associées ainsi que l'url |
* distante. C'est une table de hachage qui contient des paires propriété/valeur |
* |
*/ |
public class ImageCarnet extends HashMap<String, String> { |
|
/** |
* |
*/ |
private static final long serialVersionUID = -6220175386957259859L; |
|
/** |
* Constructeur avec un objet JSON |
* |
* @param image |
*/ |
public ImageCarnet(JSONObject image) { |
// l'objet JSON est une table de hachage |
Set<String> im = image.keySet(); |
|
// on la parcourt pour chaque clé |
for (Iterator<String> iterator = im.iterator(); iterator.hasNext();) { |
|
// si elle est associée à une valeur, on l'ajoute |
String key = iterator.next(); |
if (Util.jsonNonNull(image, key)) { |
String valeur = image.get(key).isString().stringValue(); |
this.put(key, valeur); |
} else { |
// sinon on ajoute la clé avec une valeur vide |
String valeur = " "; |
this.put(key, valeur); |
} |
|
} |
|
} |
|
public ImageCarnet(String[][] image) { |
|
for (int i = 0; i < image.length; i++) { |
if (image[i][0] != null && image[i][1] != null) { |
this.put(image[i][0], image[i][1]); |
} |
} |
} |
|
/** |
* Surcharge de toString qui affiche toutes les propriétés de l'image |
*/ |
|
@Override |
public String toString() { |
String valeur = " "; |
|
for (Iterator<String> iterator = this.keySet().iterator(); iterator |
.hasNext();) { |
|
String key = iterator.next(); |
if (this.get(key) != null) { |
valeur += "cle : " + key + " valeur :" + this.get(key) + "\n"; |
} |
|
} |
|
return valeur; |
} |
|
/** |
* Pour éviter que l'on traite des valeurs nulles à l'affichage on passe par |
* cette fonction qui retire les charactères nuls qui font planter |
* l'affichage, il ne faut pas utiliser get directement |
* |
* @param cle |
* @return la valeur associée à la clé |
*/ |
public String renvoyerValeurCorrecte(String cle) { |
if (this.containsKey((cle))) { |
String valeur = this.get(cle); |
if (valeur.equals("null") || valeur == null) { |
return " "; |
} else { |
char nullChar = '\u0000'; |
String sNull = "" + nullChar; |
valeur = valeur.replaceAll(sNull, ""); |
return valeur; |
} |
} else { |
return " "; |
} |
} |
|
/** |
* Acesseur pour l'id de l'image |
* |
* @return l'id de l'image |
*/ |
public String getId() { |
|
return renvoyerValeurCorrecte("id_image"); |
} |
|
/** |
* Acesseur pour le numero d'ordre de l'image |
* |
* @return l'ordre de l'image |
*/ |
public String getOrdre() { |
|
return renvoyerValeurCorrecte("ordre"); |
} |
|
/** |
* Base de l'url serveur pour les images |
* |
* @return url racine pour les images |
*/ |
public String getVraieBaseUrl() { |
return Configuration.getImageBaseUrl() ; |
} |
|
/** |
* Base de l'url serveur pour les images |
* |
* @return url racine pour les images |
*/ |
public String getBaseUrlRedirect() { |
return Configuration.getImageRedirectUrl() ; |
} |
|
public String getIdAvecPadding() { |
|
String id = getId(); |
|
int maxZeros = 9 - id.length(); |
|
for (int i = 0; i < maxZeros; i++) { |
id = "0" + id; |
} |
|
return id; |
} |
|
private String getUrlFormat(String format) { |
|
String urlImage = ""; |
|
if(Configuration.utiliseRedirectionImages()) { |
|
String identifiantRedirect = getIdAvecPadding()+format; |
urlImage = getBaseUrlRedirect()+identifiantRedirect; |
} else { |
urlImage = getVraieUrlFormat(format); |
} |
|
return urlImage; |
} |
|
/** |
* Renvoie le nom de base du fichier image et ses sous dossier |
* |
* @return le nom de base du fichier de type (XXX_XXX_XXX), et ses sous |
* dossier |
*/ |
public String[] getVraiCheminBaseFichier() { |
|
String id = getIdAvecPadding(); |
|
String dossierNv1 = id.substring(0, 3); |
String dossierNv2 = id.substring(3, 6); |
String fichierNv = id.substring(6, 9); |
|
String nomFichier = dossierNv1 + "_" + dossierNv2 + "_" + fichierNv; |
|
String[] infosFichier = { nomFichier, dossierNv1, dossierNv2 }; |
|
return infosFichier; |
} |
|
private String getVraieUrlFormat(String format) { |
|
String[] infosFichier = getVraiCheminBaseFichier(); |
|
return getVraieBaseUrl() + infosFichier[1] + "/" + infosFichier[2] + "/"+format+"/" |
+ infosFichier[0] + "_"+format+".jpg"; |
} |
|
/** |
* Renvoie le chemin et nom du fichier format original |
* |
* @return le chemin du fichier grand original |
*/ |
public String getUrlFormatOriginal() { |
|
return getUrlFormat(Configuration.getFormatOriginal()); |
} |
|
/** |
* Renvoie le chemin et nom du fichier grand format |
* |
* @return le chemin du fichier grand format |
*/ |
public String getUrlFormatZoom() { |
|
return getUrlFormat(Configuration.getFormatZoom()); |
} |
|
/** |
* Renvoie le chemin et nom du fichier petit format |
* |
* @return le chemin du fichier petit format |
*/ |
public String getUrlFormatGalerie() { |
|
return getUrlFormat(Configuration.getFormatGalerie()); |
} |
|
/** |
* Renvoie le chemin et nom du fichier moyen format |
* |
* @return le chemin du fichier moyen format |
*/ |
public String getUrlFormatListe() { |
|
return getUrlFormat(Configuration.getFormatListe()); |
} |
|
/** |
* Renvoie la taille de l'image |
* |
* @return un tableau de deux string contenant la hauteur puis la largeur |
*/ |
public String[] getTailleImage() { |
String[] XY = { renvoyerValeurCorrecte("hauteur"), |
renvoyerValeurCorrecte("largeur") }; |
return XY; |
} |
|
public String[] getNote() { |
String[] note = { renvoyerValeurCorrecte("note_qualite") }; |
return note; |
} |
|
/** |
* Renvoie la date exif associée à l'image |
* |
* @return la date associée à l'image |
*/ |
public String getDate() { |
|
if(renvoyerValeurCorrecte("date_prise_de_vue").equals("00/00/0000")) |
{ |
return "" ; |
} |
return renvoyerValeurCorrecte("date_prise_de_vue"); |
} |
|
/** |
* Renvoie la ville associée à l'image |
* |
* @return la ville iptc |
*/ |
public Object getIptcCity() { |
|
return renvoyerValeurCorrecte(""); |
} |
|
/** |
* Renvoie le fabricant de l'appareil |
* |
* @return le fabricant |
*/ |
public String getFabriquantAppareil() { |
|
return renvoyerValeurCorrecte("appareil_fabricant"); |
} |
|
/** |
* Renvoie le modele de l'appareil |
* |
* @return le modele |
*/ |
public String getModeleAppareil() { |
|
return renvoyerValeurCorrecte("appareil_modele"); |
} |
|
/** |
* Renvoie un tableau nom / valeur de toutes les metadonnées Iptc |
* |
* @return les métadonnées iptc |
*/ |
public String[][] getMetadonnesIptc() { |
return getMetadonneesXml("meta_iptc"); |
} |
|
/** |
* Renvoie un tableau nom / valeur de toutes les metadonnées Exif |
* |
* @return les métadonnées Exif |
*/ |
public String[][] getMetadonnesExif() { |
return getMetadonneesXml("meta_exif"); |
} |
|
private String[][] getMetadonneesXml(String type) { |
|
String[][] metadonnees = {{},{}}; |
|
String xml = renvoyerValeurCorrecte(type); |
|
String invalidXmlPattern = "[^" |
+ "\\u0009\\u000A\\u000D" |
+ "\\u0020-\\uD7FF" |
+ "\\uE000-\\uFFFD" |
+ "\\u10000-\\u10FFFF" |
+ "]+"; |
xml = xml.replaceAll(invalidXmlPattern, " "); |
|
try { |
Document d = XMLParser.parse(xml); |
if(d.hasChildNodes()) { |
NodeList attributs = d.getFirstChild().getChildNodes(); |
|
int taille = attributs.getLength(); |
metadonnees = new String[taille][2]; |
|
for(int i = 0; i < taille; i++) { |
if(attributs.item(i) != null) { |
XMLParser.removeWhitespace(attributs.item(i)); |
attributs.item(i).normalize(); |
String nomMetaDonneestraduite = VocabulaireMetadonnees.getTraduction(attributs.item(i).getNodeName()); |
metadonnees[i][0] = nomMetaDonneestraduite; |
if(attributs.item(i).hasChildNodes()) { |
Node valeur = attributs.item(i).getFirstChild(); |
if(valeur.getNodeType() == Node.TEXT_NODE) { |
metadonnees[i][1] = ((Text)valeur).getData(); |
} else { |
metadonnees[i][1] = ""; |
} |
} |
} |
} |
} |
} catch(DOMParseException e) { |
|
} |
|
return metadonnees; |
} |
|
/** |
* Renvoie un tableau nom / valeur contenant les infos générales |
* |
* @return les infos générales |
*/ |
public String[][] getInfoGenerales() { |
|
String[][] metaGen = new String[2][2]; |
|
metaGen[0][0] = "commentaire"; |
metaGen[0][1] = this.renvoyerValeurCorrecte("commentaire"); |
|
metaGen[1][0] = "date_prise_de_vue"; |
metaGen[1][1] = this.renvoyerValeurCorrecte("date_prise_de_vue"); |
|
return metaGen; |
} |
|
/** |
* Renvoie une string contenant les mots clés séparés par des ',' |
* |
* @return les mots clés |
*/ |
public String getMotsCles() { |
|
return renvoyerValeurCorrecte("mots_cles"); |
} |
|
/** |
* Met à jour le commenentaire et la date |
* |
* @param commentaires |
* le nouveau commentaire |
* @param date |
* la nouvelle date |
*/ |
public void miseAJourInfoGenerales(String commentaires, String date, |
String note) { |
put("commentaire", commentaires); |
put("note_qualite", note); |
put("date_prise_de_vue", date); |
} |
|
/** |
* Met à jour les mots clés |
* |
* @param motsClesEnCours |
* la liste de mots clés séparés par des ',' |
*/ |
public void mettreAjourMotsCles(String motsClesEnCours) { |
|
put("mots_cles", motsClesEnCours); |
|
} |
|
public void mettreAjourObsAssociees(String idsObsAssociees) { |
put("id_observation", idsObsAssociees); |
} |
|
/** |
* Accesseur pour le nom original |
* |
* @return le nom orginal de l'image |
*/ |
public String getNomOriginal() { |
return renvoyerValeurCorrecte("nom_original"); |
} |
|
public String getIdsObsAssociees() { |
|
String observationsAssociees = renvoyerValeurCorrecte("id_observation"); |
observationsAssociees = observationsAssociees.replaceAll("null", ""); |
|
return observationsAssociees; |
} |
|
|
public String[][] obtenirChampsModifiablesImage() { |
String[][] champs = { |
{"commentaire", renvoyerValeurCorrecte("commentaire")}, |
{"note_qualite", renvoyerValeurCorrecte("note_qualite")}, |
{"date_prise_de_vue",renvoyerValeurCorrecte("date_prise_de_vue")} |
}; |
return champs; |
} |
} |