Subversion Repositories eFlore/Archives.cel-v2

Compare Revisions

Ignore whitespace Rev 47 → Rev 48

/trunk/src/org/tela_botanica/client/image/ImageModele.java
2,28 → 2,23
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ImageAsynchroneDAO;
import org.tela_botanica.client.modeles.ImageCarnet;
import org.tela_botanica.client.modeles.ImageUploaderAsynchroneDAO;
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO;
import org.tela_botanica.client.modeles.ListeImageCarnet;
import org.tela_botanica.client.modeles.ListeImageAsynchroneDAO;
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
import org.tela_botanica.client.modeles.NombreImageAsynchroneDAO;
import org.tela_botanica.client.vues.BarreNotationVue;
 
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
91,6 → 86,7
if(!estInstancie)
{
// on en crée un nouveau
estInstancie = true ;
return new ImageModele(im);
}
else
129,14 → 125,13
// on rassemble les critères
String[][] criteres = {{"ci_ce_utilisateur", ""+getIMediateur().getIdentifiant()}, {motsClesFiltres[0][0], motsClesFiltres[0][1]}, {motsClesFiltres[1][0],motsClesFiltres[1][1] }} ;
// on les crée un DAO auquel on les transmet et qui demande le nombre d'images correspondantes (pour les pages)
NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO() ;
niaDAO.setIModele(this) ;
NombreImageAsynchroneDAO niaDAO = new NombreImageAsynchroneDAO(this) ;
niaDAO.obtenirNombreImages(this, criteres) ;
// ensuite on demande la page correspondante avec les mêmes critères
String[][] criteres2 = { {"ci_limite" ,""+taillePage },{"ci_numero_page",""+pageEncours}, {motsClesFiltres[0][0], motsClesFiltres[0][1]}, {motsClesFiltres[1][0],motsClesFiltres[1][1] }} ;
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images
ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO();
ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO(this);
liaDAO.ObtenirListeImages(this, criteres2);
}
146,8 → 141,7
*/
public void uploaderImages()
{
ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO() ;
IuADaO.setIModele(this) ;
ImageUploaderAsynchroneDAO IuADaO = new ImageUploaderAsynchroneDAO(this) ;
IuADaO.choisirMethodeUpload() ;
}
228,6 → 222,7
ic.miseAJourInfoGenerales(commentaires, date, note) ;
mettreAjourBaseDeDonneesImageCarnet(ic) ;
}
}
/**
246,8 → 241,7
*/
public void mettreAJourBaseDeDonneesListeImageCarnet()
{
ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO();
liDaO.setIModele(this);
ListeImageAsynchroneDAO liDaO = new ListeImageAsynchroneDAO(this);
liDaO.SynchroniserBaseDeDonnees(cacheImage);
}
259,7 → 253,7
*/
public void mettreAjourBaseDeDonneesImageCarnet(ImageCarnet ic)
{
ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO();
ImageAsynchroneDAO iaDaO = new ImageAsynchroneDAO(this);
iaDaO.SynchroniserBaseDeDonnees(ic) ;
}
 
271,8 → 265,7
public void supprimerImages(String[] ids)
{
String rids[] = new String[ids.length] ;
ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO() ;
liDao.setIModele(this);
ListeImageAsynchroneDAO liDao = new ListeImageAsynchroneDAO(this) ;
for (int i = 0; i < ids.length; i++)
{
299,7 → 292,7
if(nouvelleDonnees instanceof ListeImageCarnet)
{
ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees ;
Object[][] photoData = new Object[data.size()][7];
Object[][] photoData = new Object[data.size()][8];
int i = 0 ;
if(data.size() == 0)
318,6 → 311,7
photoData[i][4] = im.getSUrl() ;
photoData[i][5] = im.getMUrl() ;
photoData[i][6] = im.getLUrl() ;
photoData[i][7] = im.getNote() ;
i++ ;
}
330,7 → 324,8
FieldDef defUrlImageS = new StringFieldDef("url_image_S");
FieldDef defUrlImageM = new StringFieldDef("url_image_M");
FieldDef defUrlImage = new StringFieldDef("url_image");
FieldDef[] defTab = {defNumImage,defDatImage,defLieImage,defAppImage,defUrlImageS,defUrlImageM,defUrlImage};
FieldDef defNoteImage = new IntegerFieldDef("note_image") ;
FieldDef[] defTab = {defNumImage,defDatImage,defLieImage,defAppImage,defUrlImageS,defUrlImageM,defUrlImage,defNoteImage};
RecordDef rd = new RecordDef(defTab) ;
final MemoryProxy dataProxy = new MemoryProxy(photoData);
463,7 → 458,7
ImageCarnet ic = (ImageCarnet)cacheImage.get(ids[i]) ;
ic.mettreAjourMotsCles(motsClesEnCours) ;
ImageAsynchroneDAO imgDao = new ImageAsynchroneDAO() ;
ImageAsynchroneDAO imgDao = new ImageAsynchroneDAO(this) ;
imgDao.SynchroniserMotsClesImageBaseDeDonnees(ic) ;
}
}
477,9 → 472,7
*/
public void initialiserArbreMotsCles()
{
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
MCDao.setIModele(this) ;
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
MCDao.obtenirListeMotsCles(this) ;
}
500,8 → 493,7
*/
public void ajouterMotCleDansArbre(TreeNode n, com.gwtext.client.data.Tree arbreMC)
{
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
MCDao.setIModele(this) ;
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
String[] usObj = (String[])n.getUserObject() ;
String motCle = usObj[0] ;
533,8 → 525,7
public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC)
{
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
MCDao.setIModele(this) ;
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
String[] usObj = (String[])n.getUserObject() ;
String motCle = usObj[0] ;
555,8 → 546,7
public void modifierMotCleDansArbre(TreeNode n, Tree arbreMC)
{
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
MCDao.setIModele(this) ;
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
String[] usObj = (String[])n.getUserObject() ;
String motCle = usObj[0] ;
588,8 → 578,7
*/
public void deplacerMotCleDansArbre(TreeNode n, Tree arbreMC)
{
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO() ;
MCDao.setIModele(this) ;
MotsClesAsynchroneDAO MCDao = new MotsClesAsynchroneDAO(this) ;
String[] usObj = (String[])n.getUserObject() ;
String motCle = usObj[0] ;
676,6 → 665,7
*/
public void requeteTerminee()
{
getIMediateur().demasquerChargement() ;
getIMediateur().rafraichirToutesVues() ;
}
 
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java
1,14 → 1,14
package org.tela_botanica.client.image;
 
import org.tela_botanica.client.interfaces.IdVue;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.interfaces.VueListable;
import org.tela_botanica.client.vues.ArbreMotsClesFiltreVue;
import org.tela_botanica.client.vues.ArbreMotsClesVue;
import org.tela_botanica.client.vues.BarreNotationVue;
import org.tela_botanica.client.vues.BarreOutilsVue;
import org.tela_botanica.client.vues.BarreRechercheFiltreVue;
import org.tela_botanica.client.vues.GalerieImageVue;
import org.tela_botanica.client.vues.ListeImageVue;
import org.tela_botanica.client.vues.MenuFiltreVue;
import org.tela_botanica.client.vues.MenuImageVue;
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
import org.tela_botanica.client.vues.ZoomImageVue;
55,6 → 55,7
*/
private ImageModele iModele = null ;
private String identifiant = "0" ;
 
/**
* panneau principal des images (onglet "images")
125,7 → 126,7
* Filtre pour les commentaires
*/
private BarreRechercheFiltreVue filtreCommentaires = null ;
 
/**
* constructeur privé (on accède a la classe par la méthode getInstance
*/
141,6 → 142,8
final BorderLayoutData regionEst = new BorderLayoutData(
RegionPosition.EAST);
regionEst.setSplit(true);
afficherMenuId() ;
 
// on crée un modèle
235,6 → 238,7
else
{
return null ;
}
}
244,8 → 248,19
*/
public String getIdentifiant()
{
return "0" ;
return identifiant ;
}
public void setIdentifiant(String id)
{
identifiant = id ;
}
public void changerUtilisateur()
{
getIModele().initialiserArbreMotsCles() ;
obtenirPhotoGalerie(getGalerieImage()) ;
}
 
/**
* Accesseur pour le modèle associé au médiateur
316,7 → 331,7
}
 
/**
* Accesseur pour le menu
* Accesseur pour le menu image
* @return the menuImageVue
*/
public MenuImageVue getMenuImageVue() {
522,6 → 537,7
String ids[] = getVueSelectionnee().getIdSelectionnees() ;
getIModele().mettreAJourCacheImage(commentaires, date, note, ids) ;
getListeImage().mettreAjourInfos(commentaires, date, note) ;
}
/**
855,6 → 871,7
mn.addListener(new MenuListenerAdapter() {
public void onItemClick(BaseItem item, EventObject e)
{
if(item.equals(suppN))
1025,6 → 1042,12
}
public void afficherMenuId()
{
IdVue i = new IdVue(this) ;
i.show() ;
}
/**
* C'est dans cette fonction que doivent être renvoyé les valeurs des filtres
* sous forme de tableau [nom, valeur]
/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesVue.java
109,6 → 109,8
String[] usObject = {"Mots clés" , "racine" } ;
root.setUserObject(usObject) ;
arbreMotsCles.setAutoScroll(true) ;
arbreMotsCles.setRootNode(root) ;
arbreMotsCles.setRootVisible(false) ;
arbreMotsCles.getRootNode().setIcon("tela.png") ;
230,29 → 232,8
{
// on notifie le médiateur et on lui passe l'arbre
GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
}
 
// gestion du changement de valeur dans la checkbox
}
/*public void onCheckChange(TreeNode node, boolean checked) {
// si on a coché un noeud
if(checked)
{
// on remonte pour cocher tous les parents du noeud
node.bubble(new NodeTraversalCallback() {
public boolean execute(Node node)
{
TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
tn.getUI().toggleCheck(true) ;
return true ;
}
}) ;
}
}*/
}) ;
// gestion de la validation
330,27 → 311,30
*/
public void ajouterNoeud(TreeNode parent)
{
// on met l'ajout du noeud à vrai
ajoutNoeud = true ;
// on crée un nouveau noeud vide
TreeNode nd = new TreeNode("");
nd.setIcon("tela.png") ;
nd.setChecked(true);
// on associe un objet au noeud qui contient des infos
String[] usObject = new String[2] ;
// l'objet contient le nom du noeud
usObject[0] = "" ;
// l'identifiant d'un noeud c'est son hashcode
usObject[1] = Integer.toString(nd.hashCode()) ;
// l'objet associé au noeud contient aussi son identifiant
nd.setId(usObject[1]) ;
nd.setUserObject(usObject) ;
// on le concatène au parent et on étend ses enfants
parent.appendChild(nd);
parent.expand();
// enfin on place le curseur et on fait apparaitre le champ d'édition pour que l'utilisateur nomme son mot clé
te.startEdit(nd);
// on met l'ajout du noeud à vrai
ajoutNoeud = true ;
// on crée un nouveau noeud vide
TreeNode nd = new TreeNode("");
nd.setIcon("tela.png") ;
nd.setChecked(true);
// on associe un objet au noeud qui contient des infos
String[] usObject = new String[2] ;
// l'objet contient le nom du noeud
usObject[0] = "" ;
usObject[1] = Integer.toString(nd.hashCode()) ;
nd.setId(usObject[1]) ;
nd.setUserObject(usObject) ;
// l'identifiant d'un noeud c'est son hashcode
// l'objet associé au noeud contient aussi son identifiant
// on le concatène au parent et on étend ses enfants
parent.appendChild(nd);
parent.expand();
// enfin on place le curseur et on fait apparaitre le champ d'édition pour que l'utilisateur nomme son mot clé
te.startEdit(nd);
 
}
/**
420,6 → 404,11
Tree nouvelArbre = (Tree)nouvelleDonnees ;
// on prend sa racine et on l'attache à l'arbre des mots clés
Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes() ;
for (int i = 0; i < rootChild.length; i++) {
rootChild[i].remove() ;
}
getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
getArbreMotsCles().expandAll() ;
434,7 → 423,6
if(motsCleInitialises == false && motsClesEnAttente != null)
{
// on les coche
// TODO: corriger le bug qui fait que ça ne marche pas la premiere fois !!!!
cocherMotsCles(motsClesEnAttente) ;
motsCleInitialises = true ;
}
/trunk/src/org/tela_botanica/client/vues/BarreNotationVue.java
9,20 → 9,52
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.widgets.Panel;
 
/**
* Une barre de notation avec des étoiles, tout ce qu'il ya de plus classique,
* utilisant Ajax (et pas CSS)
* @author aurelien
*
*/
public class BarreNotationVue extends Panel implements Rafraichissable {
 
/**
* Le médiateur associé
*/
private ImageMediateur iMediateur = null ;
/**
* La note actuellement affichée
*/
private int noteEnCours = 0 ;
/**
* La note maximum
*/
private int noteMax = 0 ;
/**
* La note au dessus de laquelle se trouve le curseur (pour gérer le rollover)
*/
private int noteCurseur = 0 ;
/**
* Booléen indiquant si une note est affectée à la barre en ce moment
*/
private boolean estNote = false ;
/**
* Tablmeau d'images contenant les étoiles affichées
*/
private Image[] etoiles = null ;
/**
* Constructeur sans argument (privé car ne doit pas être utilisé)
*/
private BarreNotationVue()
{
super() ;
}
/**
* Constructeur avec arguments
* @param im le médiateur à associer à la vue
* @param noteMax la note maximale
*/
public BarreNotationVue(ImageMediateur im, int noteMax)
{
iMediateur = im ;
44,24 → 76,27
etoiles[i].addMouseListener(new MouseListenerAdapter() {
 
 
// si la souris passe sur la barre
public void onMouseEnter(Widget sender) {
Image enCours = (Image)sender ;
int nEnCours = 0 ;
// on met en surbrillance toutes les étoiles allant de la première jusqu'à
// celle sous le curseur
for(int i = 0 ; etoiles[i] != enCours ; i++)
{
etoiles[i].setUrl("etoile_curseur.jpg") ;
etoiles[i].setUrl("etoile_curseur.png") ;
nEnCours = i ;
}
enCours.setUrl("etoile_curseur.jpg") ;
enCours.setUrl("etoile_curseur.png") ;
}
 
// si la souris sort de la barre
public void onMouseLeave(Widget sender) {
// on affiche la véritable note
afficherNote() ;
}
 
69,16 → 104,17
}) ;
etoiles[i].addClickListener(new ClickListener() {
 
// si on clique sur une étoiles
public void onClick(Widget sender) {
int i = 0 ;
// on récupère le numéro de l'étoile sur laquelle on a cliqué
while(etoiles[i] != (Image)sender)
{
i++ ;
}
// et on affecte la note
noter(i) ;
}
89,24 → 125,33
}
/**
* Fonction héritée de l'interface rafraichissable
*/
public void rafraichir(Object nouvelleDonnees,
boolean repandreRaffraichissement) {
// si on recoit un tableau de string
if(nouvelleDonnees instanceof String[])
{
estNote = false ;
{
// on récupère le premier élément (un entier, qui contient la note)
String[] note = (String[])nouvelleDonnees ;
int noteInt = Integer.parseInt(note[0]) ;
if(noteInt != -1)
// si l'entier est une note valide
if(noteInt != -1 && noteInt >= 0)
{
noter(noteInt) ;
}
// sinon si l'entier vaut -1
else
{
// alors on note avec 0
// et on met le booleen de notation a false (qui signifie que l'image n'est pas encore notée)
estNote = false ;
noteEnCours = 0 ;
// et demande l'affichage
afficherNote() ;
}
114,18 → 159,32
}
/**
* Affecte une note à la barre et rafraichit l'affichage
* @param note la nouvelle note
*/
public void noter(int note)
{
// on affecte la note
noteEnCours = note ;
// on met le boolean de notation à true (l'image est notée)
estNote = true ;
// et on demande l'affichage
afficherNote() ;
}
/**
* Setteur pour la note maximale
* @param nMax la nouvelle note maximale
*/
public void setNoteMax(int nMax)
{
// on affecte la note
noteMax = nMax ;
// on prépare le tableau d'image
etoiles = new Image[noteMax] ;
// qu'on remplit par defaut avec des images d'étoiles vides
for(int i = 0 ; i < noteMax ; i++)
{
etoiles[i] = new Image("etoile_vide.jpg") ;
133,25 → 192,32
}
}
/**
* Affiche la note d'une image sous la forme d'étoiles
*/
public void afficherNote()
{
// si l'image est notée
if(estNote)
{
// on affiche autant d'étoiles que le chiffre de la note
for(int i = 0 ; i <= noteEnCours ; i++)
{
etoiles[i].setUrl("etoile_notee.jpg") ;
etoiles[i].setUrl("etoile_notee.png") ;
}
// et si elle est inférieure à la note maximale, on remplit le reste par des étoiles vides
for (int j = noteEnCours + 1 ; j < noteMax ; j++)
{
etoiles[j].setUrl("etoile_vide.jpg") ;
etoiles[j].setUrl("etoile_vide.png") ;
}
}
// sinon
else
{
// on remplit toute la barre avec des étoiles vides
for(int i = 0 ; i < noteMax ; i++)
{
etoiles[i].setUrl("etoile_vide.jpg") ;
etoiles[i].setUrl("etoile_vide.png") ;
}
}
158,6 → 224,10
}
/**
* Accesseur pour la note en cours sous forme de string
* @return
*/
public String getNote()
{
return ""+noteEnCours ;
/trunk/src/org/tela_botanica/client/vues/MenuImageVue.java
28,18 → 28,8
* Item pour la suppression
*/
private Item supprimerImage = null ;
 
/**
* Item pour la recherche par mots clés
*/
private Item chercherImage = null ;
/**
* Item pour la recherche sur les commentaires
*/
private Item chercherCommentaire = null ;
/**
* Constructeur sans argument (privé car ne doit être utilisé)
*/
private MenuImageVue()
60,13 → 50,8
// on construit le menu
uploaderImage = new Item("Uploader des images") ;
supprimerImage = new Item("Supprimer les images selectionnées") ;
chercherImage = new Item("Filtrer par les mots clés") ;
chercherCommentaire = new Item("Filtrer par les commentaires") ;
addItem(uploaderImage);
addItem(supprimerImage) ;
addSeparator() ;
addItem(chercherImage) ;
addItem(chercherCommentaire) ;
// on ajoute les listeners
ajouterListeners() ;
97,20 → 82,6
getIMediateur().supprimerImages() ;
}
// si c'est la recherche par mots clé
if(item.equals(chercherImage))
{
// on notifie le médiateur
getIMediateur().afficherFiltreMotsCles() ;
}
// si c'est la recherche par commentaires
if(item.equals(chercherCommentaire))
{
// on notifie le médiateur
getIMediateur().afficherFiltreCommentaires() ;
}
// enfin, on cache le menu
hide() ;
/trunk/src/org/tela_botanica/client/vues/ZoomImageVue.java
19,7 → 19,6
 
/**
* Panneau d'affichage d'une image avec des boutons précdents et suivant
* TODO: assurer le redimensionnement automatique de l'image et la centrer
* @author aurelien
*
*/
/trunk/src/org/tela_botanica/client/vues/MenuFiltreVue.java
New file
0,0 → 1,98
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.image.ImageMediateur;
 
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.menu.BaseItem;
import com.gwtext.client.widgets.menu.Item;
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
 
public class MenuFiltreVue extends Menu {
 
/**
* Le médiateur associé à la vue
*/
private ImageMediateur iMediateur ;
/**
* Item pour la recherche par mots clés
*/
private Item chercherImage = null ;
/**
* Item pour la recherche sur les commentaires
*/
private Item chercherCommentaire = null ;
/**
* Constructeur sans argument (privé car ne doit être utilisé)
*/
private MenuFiltreVue()
{
super();
}
/**
* Constructeur avec paramètre
* @param im le médiateur à associer
*/
public MenuFiltreVue(ImageMediateur im)
{
super() ;
iMediateur = im ;
// on construit le menu
chercherImage = new Item("Filtrer par les mots clés") ;
chercherCommentaire = new Item("Filtrer par les commentaires") ;
addItem(chercherImage) ;
addItem(chercherCommentaire) ;
// on ajoute les listeners
ajouterListeners() ;
}
/**
* Ajoute les listeners pour la gestions des évènements
*/
private void ajouterListeners()
{
this.addListener(new MenuListenerAdapter() {
 
// gestion du clic sur un item
public void onItemClick(BaseItem item, EventObject e) {
// si c'est la recherche par mots clé
if(item.equals(chercherImage))
{
// on notifie le médiateur
getIMediateur().afficherFiltreMotsCles() ;
}
// si c'est la recherche par commentaires
if(item.equals(chercherCommentaire))
{
// on notifie le médiateur
getIMediateur().afficherFiltreCommentaires() ;
}
// enfin, on cache le menu
hide() ;
}
}) ;
}
/**
* Accesseur pour le médiateur
* @return le médiateur associé à la vue
*/
public ImageMediateur getIMediateur()
{
return iMediateur ;
}
}
/trunk/src/org/tela_botanica/client/vues/PanneauMetadonneesVue.java
126,7 → 126,7
Label labelComm = new Label("Commentaires :") ;
labelComm.setHeight("20px") ;
commentaireGeneral = new TextArea() ;
commentaireGeneral.setAutoWidth(true) ;
commentaireGeneral.setWidth("90%") ;
Label labelDate = new Label("Date :") ;
Label labelNote = new Label("Note :") ;
322,12 → 322,12
for(int i = 0; i < maxLength ; i++)
{
if(i < exif.length)
if(i < exif.length && !exif[i][0].equals("null"))
{
exifSource[i] = new NameValuePair(exif[i][0],exif[i][1]) ;
}
if(i < iptc.length)
if(i < iptc.length && !iptc[i][0].equals("null"))
{
iptcSource[i] = new NameValuePair(iptc[i][0],iptc[i][1]) ;
}
/trunk/src/org/tela_botanica/client/vues/BarreOutilsVue.java
19,6 → 19,15
*/
ToolbarMenuButton images = null ;
/**
* Un bouton qui sert à déployer le menu
*/
ToolbarMenuButton filtres = null ;
/**
* Un bouton qui sert à déployer le menu
*/
ToolbarMenuButton utilisateur = null ;
/**
* Le médiateur associé à la toolbar
*/
ImageMediateur iMediateur = null ;
26,6 → 35,16
* Le menu de gestion des images
*/
MenuImageVue imageMenu = null ;
/**
* Le menu de gestion des filtres
*/
MenuFiltreVue filtreMenu = null ;
/**
* Le menu de gestion utilisateur
*/
MenuIdVue idMenu = null ;
 
/**
* Constructeur sans argument (ne doit pas être utilisé donc privé)
37,7 → 56,7
/**
* Constructeur avec paramètres
* @param im
* @param im le médiateur à associer à la vue
*/
public BarreOutilsVue(ImageMediateur im) {
46,9 → 65,15
iMediateur = im ;
imageMenu = new MenuImageVue(im) ;
filtreMenu = new MenuFiltreVue(im) ;
idMenu = new MenuIdVue(im) ;
images = new ToolbarMenuButton("Fichiers",imageMenu) ;
filtres = new ToolbarMenuButton("Filtres", filtreMenu) ;
utilisateur = new ToolbarMenuButton("Utilisateur",idMenu) ;
this.addButton(images) ;
this.addButton(filtres) ;
this.addButton(utilisateur) ;
}
 
/trunk/src/org/tela_botanica/client/vues/MenuIdVue.java
New file
0,0 → 1,85
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.image.ImageMediateur;
 
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.menu.BaseItem;
import com.gwtext.client.widgets.menu.Item;
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
 
public class MenuIdVue extends Menu {
/**
* Le médiateur associé à la vue
*/
private ImageMediateur iMediateur ;
/**
* Item pour le changement d'utilisateur
*/
private Item changerId = null ;
/**
* Constructeur sans argument (privé car ne doit être utilisé)
*/
private MenuIdVue()
{
super();
}
/**
* Constructeur avec paramètre
* @param im le médiateur à associer
*/
public MenuIdVue(ImageMediateur im)
{
super() ;
iMediateur = im ;
// on construit le menu
changerId = new Item("Changer d'utilisateur") ;
addItem(changerId) ;
// on ajoute les listeners
ajouterListeners() ;
}
/**
* Ajoute les listeners pour la gestions des évènements
*/
private void ajouterListeners()
{
this.addListener(new MenuListenerAdapter() {
 
// gestion du clic sur un item
public void onItemClick(BaseItem item, EventObject e) {
// si c'est la recherche par commentaires
if(item.equals(changerId))
{
// on notifie le médiateur
getIMediateur().afficherMenuId() ;
}
// enfin, on cache le menu
hide() ;
}
}) ;
}
/**
* Accesseur pour le médiateur
* @return le médiateur associé à la vue
*/
public ImageMediateur getIMediateur()
{
return iMediateur ;
}
 
}
/trunk/src/org/tela_botanica/client/vues/ListeImageVue.java
192,7 → 192,7
htmlImage += "<div class=\"img-note centered-list\">" ;
for(int i = 0 ; i <= noteImg ; i++)
{
htmlImage += "<img src=\"etoile_notee.jpg\">" ;
htmlImage += "<img src=\"etoile_petite.png\">" ;
}
htmlImage += "</div>" ;
}
/trunk/src/org/tela_botanica/client/interfaces/IdVue.java
New file
0,0 → 1,99
package org.tela_botanica.client.interfaces;
 
import org.tela_botanica.client.image.ImageMediateur;
 
import com.gwtext.client.core.EventObject;
 
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.KeyListener;
import com.gwtext.client.widgets.event.WindowListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
 
public class IdVue extends Window implements Rafraichissable {
private ImageMediateur iMediateur ;
private TextField champId = null ;
private Button ok = null ;
public IdVue(ImageMediateur im)
{
super("Identification") ;
iMediateur = im ;
champId = new TextField() ;
ok = new Button("OK") ;
add(champId) ;
add(ok) ;
setSize(156,75) ;
setClosable(false) ;
setModal(true) ;
this.setCloseAction(HIDE) ;
ajouterListeners() ;
}
private void ajouterListeners() {
 
// gestion du clic sur le bouton
ok.addListener(new ButtonListenerAdapter() {
 
public void onClick(Button button, EventObject e) {
valider() ;
}
}) ;
// gestion de la touche entrée
champId.addKeyListener(EventObject.ENTER, new KeyListener() {
 
public void onKey(int key, EventObject e) {
valider() ;
}
}) ;
this.addListener(new WindowListenerAdapter() {
 
public void onClose(Panel panel) {
}
});
 
}
public ImageMediateur getIMediateur()
{
return iMediateur ;
}
protected void valider() {
String id = champId.getText() ;
getIMediateur().setIdentifiant(""+id.hashCode()) ;
getIMediateur().changerUtilisateur() ;
this.close() ;
}
 
public void rafraichir(Object nouvelleDonnees,
boolean repandreRaffraichissement) {
}
 
 
}
/trunk/src/org/tela_botanica/client/modeles/ImageUploaderAsynchroneDAO.java
1,20 → 1,13
package org.tela_botanica.client.modeles;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.image.ImageModele;
import org.tela_botanica.client.interfaces.iMediateur;
 
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Timer;
import com.gwtext.client.core.UrlParam;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.WindowListener;
import com.gwtext.client.widgets.event.WindowListenerAdapter;
import com.gwtextux.client.widgets.upload.UploadDialog;
import com.gwtextux.client.widgets.upload.UploadDialogListener;
import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter;
 
 
31,6 → 24,11
*/
private static ImageModele iModele ;
public ImageUploaderAsynchroneDAO(ImageModele im)
{
iModele = im ;
}
/**
* Setteur pour le modele
* @param im le modèle à associer au DAO
52,10 → 50,10
UrlParam id = new UrlParam("identifiant",iModele.getIdentifiant()) ;
UrlParam[] params = {id} ;
up.setBaseParams(params);
up.setModal(true) ;
up.addListener(new UploadDialogListenerAdapter() {
 
 
public void onClose(Panel panel) {
iModele.requeteTerminee() ;
63,8 → 61,7
});
up.show();
}
/**
73,9 → 70,12
*/
private static void appelerUploadMultiple()
{
final Window nPan = new Window("Upload multiple");
nPan.setWidth(640) ;
 
final String warning = "<p class=\"warning_upload\"> A la fin de l'envoi, veuillez fermer la fenêtre pour accéder aux images. </p>" ;
final String applet = "<applet code=\"wjhk.jupload2.JUploadApplet\" archive=\"wjhk.jupload.jar\" alt=\"\" mayscript=\"\" height=\"350\" width=\"625\">";
final String paramPostTarget = "<param name=\"postURL\" value=\"jrest/InventoryImage/\">";
final String paramUploadPolicy = "<param name=\"uploadPolicy\" value=\"PictureUploadPolicy\">";
107,11 → 107,14
+"<input type=\"hidden\" name=\"identifiant\" value=\""+iModele.getIdentifiant()+"\">"
+"</form>" ;
 
nPan.setHtml(appelApplet+htmlForm);
nPan.setHtml(warning+appelApplet+htmlForm);
nPan.setModal(true) ;
nPan.addListener(new WindowListenerAdapter() {
 
 
public void onClose(Panel panel) {
iModele.requeteTerminee() ;
/trunk/src/org/tela_botanica/client/modeles/ImageCarnet.java
50,6 → 50,7
/**
* Surcharge de toString qui affiche toutes les propriétés de l'image
*/
public String toString()
{
String valeur = " ";
242,7 → 243,7
*/
public String[][] getMetadonnesIptc() {
String[][] metaIptc = new String[12][2] ;
String[][] metaIptc = new String[14][2] ;
int elem = 0 ;
for (Iterator it = this.keySet().iterator(); it.hasNext();)
278,7 → 279,7
* @return les métadonnées Exif
*/
public String[][] getMetadonnesExif() {
String[][] metaExif = new String[31][2] ;
int elem = 0 ;
/trunk/src/org/tela_botanica/client/modeles/ImageAsynchroneDAO.java
3,10 → 3,11
import java.util.Iterator;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.image.ImageModele;
 
import com.google.gwt.user.client.HTTPRequest;
import com.google.gwt.user.client.ResponseTextHandler;
import com.google.gwt.user.client.Window;
import com.gwtext.client.widgets.Window;
 
/**
* DAO d'accès à une image, n'est utilisé que pour l'écriture et pas pour la lecture des images
16,6 → 17,18
*/
public class ImageAsynchroneDAO {
 
ImageModele iModele = null ;
public ImageAsynchroneDAO(ImageModele im)
{
iModele = im ;
}
public void setIModele(ImageModele im)
{
iModele = im ;
}
/**
* Met à jour la base de données avec toutes les données d'une image
* @param ic l'image à mettre à jour
35,10 → 48,17
}
 
// et on envoie une requête asynchrone
HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() {
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() {
public void onCompletion(String responseText) {
//TODO: ajouter une vérification de la mise à jour
if(responseText.equals("OK"))
{
return ;
}
else
{
com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des données") ;
}
}
59,10 → 79,17
postData += "&ci_id_image="+id+"&ci_meta_mots_cles="+motsCles ;
 
// on envoie une requête asynchrone
HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() {
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() {
public void onCompletion(String responseText) {
//TODO: ajouter une vérification de la mise à jour
if(responseText.equals("OK"))
{
return ;
}
else
{
com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des mots clés") ;
}
}
80,10 → 107,17
postData += "&action=DELETE" ;
// on envoie un post avec l'id de l'image à supprimer
HTTPRequest.asyncPost("jrest/inventoryImage/0/"+ic.getId(), postData, new ResponseTextHandler() {
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/"+ic.getId(), postData, new ResponseTextHandler() {
public void onCompletion(String responseText) {
//TODO: ajouter une vérification de la mise à jour
if(responseText.equals("OK"))
{
return ;
}
else
{
com.google.gwt.user.client.Window.alert("Problème lors de la suppression des images ") ;
}
}
}) ;
/trunk/src/org/tela_botanica/client/modeles/ListeImageCarnet.java
1,7 → 1,6
package org.tela_botanica.client.modeles;
 
import java.util.HashMap;
import java.util.Vector;
 
/**
* table de hachage composée d'ImageCarnet, renvoyé par les objets de type DAO
/trunk/src/org/tela_botanica/client/modeles/ListeImageAsynchroneDAO.java
2,7 → 2,6
 
import java.util.Iterator;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.image.ImageModele;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
9,17 → 8,9
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.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.HTTPRequest;
import com.google.gwt.user.client.ResponseTextHandler;
import com.google.gwt.user.client.Window;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
 
/**
* Data Object Access communiquant avec le serveur jrest fournissant la liste des images
34,6 → 25,11
*/
ImageModele iModele = null ;
public ListeImageAsynchroneDAO(ImageModele im)
{
iModele = im ;
}
/**
* Setteur pour le modèle
* @param im le modèle à associer
71,7 → 67,7
}
// on envoie le get asynchrone
HTTPRequest.asyncGet("jrest/InventoryImageList/0/"+requete, new ResponseTextHandler() {
HTTPRequest.asyncGet("jrest/InventoryImageList/"+iModele.getIdentifiant()+"/"+requete, new ResponseTextHandler() {
// si tout se passe bien on reçoit une réponse JSON
public void onCompletion(String responseText) {
148,10 → 144,17
}
// on fait un post asynchrone et on les envoie à jrest
HTTPRequest.asyncPost("jrest/inventoryImage/0/", postData, new ResponseTextHandler() {
HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() {
public void onCompletion(String responseText) {
//TODO: vérifier mieux le succès del a requête
if(responseText.equals("OK"))
{
return ;
}
else
{
com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des données") ;
}
}
/trunk/src/org/tela_botanica/client/modeles/NombreImageAsynchroneDAO.java
1,18 → 1,13
package org.tela_botanica.client.modeles;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.image.ImageModele;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
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.JSONString;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.HTTPRequest;
import com.google.gwt.user.client.ResponseTextHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Image;
 
/**
* DAO qui renvoie le nombre d'image associées à différents critères donnés (utile pour la pagination)
26,6 → 21,11
*/
private ImageModele iModele = null ;
public NombreImageAsynchroneDAO(ImageModele im)
{
iModele = im ;
}
/**
* Setteur pour le modèle
* @param im le modèlme à associer
77,7 → 77,7
// qui contient une valeur : le nombre d'images correspondant au critères
JSONValue res = responseValue.isArray().get(0) ;
JSONString reponseNombre = res.isString() ;
int maxImages = (int)Integer.parseInt(reponseNombre.stringValue()) ;
int maxImages = Integer.parseInt(reponseNombre.stringValue()) ;
int[] nbImages = {maxImages} ;
// on le met dans un tableau d'entiers qu'on tranmset au demandeur de la mise à jour
r.rafraichir(nbImages, true) ;
/trunk/src/org/tela_botanica/client/modeles/MotsClesAsynchroneDAO.java
1,9 → 1,9
package org.tela_botanica.client.modeles;
 
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.image.ImageModele;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
23,6 → 23,11
*/
private ImageModele iModele = null ;
public MotsClesAsynchroneDAO(ImageModele im)
{
iModele = im ;
}
/**
* Setteur pour le modèle
* @param im le modèle à associer