Subversion Repositories eFlore/Archives.cel-v2

Compare Revisions

Ignore whitespace Rev 31 → Rev 30

/trunk/src/org/tela_botanica/client/image/ImageModele.java
2,7 → 2,6
 
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;
11,12 → 10,9
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 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;
37,81 → 33,35
*/
public class ImageModele implements Rafraichissable {
/**
* Booleen indiquant si le médiateur est instancié (l'instance doit être unique donc le booleen est static)
*/
private static boolean estInstancie = false ;
/**
* Le médiateur associé au modèle
*/
private ImageMediateur iMediateur = null ;
/**
* La liste des image affichées en cours
*/
private ListeImageCarnet cacheImage = new ListeImageCarnet(0) ;
/**
* Table de correspondance entre les mots clés et leurs identifiants
*/
private HashMap motsCles = new HashMap(0) ;
/**
* Le store contenant les données à afficher, que le modèle transmet au médiateur quand il le demande
*/
private Store st = null ;
/**
* Arbre des mots clés
*/
private com.gwtext.client.data.Tree arbreMotsCles = new Tree() ;
/**
* Numéro de page en cours
*/
private int pageEncours = 0 ;
/**
* Nombre de pages totales
*/
private int pageMax = 1 ;
/**
* Taille de page (par défaut 50)
*/
private int taillePage = 50 ;
/**
* Nombre d'éléments total correspondant à la requete
*/
private int nbElements = 0 ;
/**
* Retourne une instance de manière unique
* @param im le médiateur à associer
* @return l'instance du modèle
*/
static ImageModele Instance(ImageMediateur im)
{
// si le modèle n'est pas encore instancié
if(!estInstancie)
{
// on en crée un nouveau
return new ImageModele(im);
}
else
{
// sinon on renvoit null, interdisant explicitement la création d'un autre exemplaire
return null ;
}
}
/**
* Le constructeur est privé et seule la méthode instance y accède
* @param im le médiateur à associé
*/
private ImageModele(ImageMediateur im) {
iMediateur = im ;
}
/**
* Accesseur pour le médiateur
* @return
*/
public ImageMediateur getIMediateur()
{
return iMediateur ;
123,17 → 73,8
*/
public void obtenirPhotoGalerie(Rafraichissable r)
{
// on rassemble les critères
String[][] criteres = {{"ci_ce_utilisateur", ""+getIMediateur().getIdentifiant()} } ;
// 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.obtenirNombreImages(this, criteres) ;
// ensuite on demande la page correspondante avec les mêmes critères
String[][] criteres2 = { {"ci_limite" ,""+taillePage },{"ci_numero_page",""+pageEncours} } ;
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images
ListeImageAsynchroneDAO liaDAO = new ListeImageAsynchroneDAO();
liaDAO.ObtenirListeImages(this, criteres2);
liaDAO.ObtenirListeImages(this);
}
/**
276,12 → 217,10
String key = ids[i] ;
ImageCarnet ic = (ImageCarnet)cacheImage.get(key) ;
rids[i] = ic.getId() ;
cacheImage.remove(key) ;
}
if(rids.length != 0)
{
{
liDao.supprimerBaseDeDonnees(rids);
}
}
292,13 → 231,11
*/
public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement)
{
// si l'on a reçu une liste d'images
if(nouvelleDonnees instanceof ListeImageCarnet)
{
ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees ;
Object[][] photoData = new Object[data.size()][7];
int i = 0 ;
// on la parse et on récupère les informations quiç nous interessent
for (Iterator it = data.keySet().iterator(); it.hasNext();)
{
ImageCarnet im = (ImageCarnet) data.get(it.next());
313,7 → 250,7
i++ ;
}
// creation du store qui les contient
// creation du store
FieldDef defNumImage = new IntegerFieldDef("num_image");
FieldDef defDatImage = new StringFieldDef("dat_image");
FieldDef defLieImage = new StringFieldDef("lie_image");
332,13 → 269,7
rafraichirListeImage(nouvelleDonnees);
st = photoStore ;
st.load() ;
// par défaut le store est trié sur le numéro d'image
st.sort("num_image") ;
 
// si on doit répandre les données, on notifie le médiateur qui les distribuera à son tour
if(repandreRafraichissement)
{
getIMediateur().synchroniserDonneesZoomListeGalerie(st, this) ;
345,18 → 276,14
}
}
// si on reçoit un tableau JSON
if(nouvelleDonnees instanceof JSONArray)
{
// alors on a reçu les informations sur les mots clés
JSONArray reponse = (JSONArray)nouvelleDonnees ;
final int taillemax = reponse.size();
// si le tableau est vide
if(taillemax == 0)
{
// on crée un arbre vide
TreeNode root = new TreeNode() ;
root.setId("racine") ;
root.setText("Tags") ;
366,10 → 293,9
arbreMotsCles.setRootNode(root) ;
}
// pour chacun des élements du tableau
for (int j = 0; j < taillemax ; j++)
{
// on extrait les élements du tableau
if(reponse.get(j).isObject() != null)
{
JSONObject noeud = (JSONObject)reponse.get(j) ;
380,7 → 306,6
String[] usObj = {mot_cle, id_noeud} ;
// et on construit l'arbre à partir de la racine (qui est toujoursl e premier élément)
if(id_noeud.equals("racine"))
{
TreeNode root = new TreeNode() ;
392,8 → 317,6
}
else
{
// et en ajoutant les noeuds un à un (qui sont renvoyé dans l'ordre hierarchique de leur niveau
// ce qui permet de les traiter séquentiellement)
TreeNode node = new TreeNode() ;
node.setId(id_noeud) ;
node.setText(mot_cle) ;
404,26 → 327,10
parentNode.appendChild(node) ;
}
}
}
// enfin on met à jour l'arbre des mots clés contenu dans le modèle
}
rafraichirArbreMotsCles(arbreMotsCles) ;
// et on notifie le médiateur de la mise à jour en lui passant une copie des données
getIMediateur().rafraichirArbreMotsCles(arbreMotsCles) ;
}
// Si on reçoit un tableau d'entiers
// c'est un tableau d'un seul entier qui est le nombre d'images correspondant aux critères
if(nouvelleDonnees instanceof int[])
{
int[] pages = (int[])nouvelleDonnees ;
// on calcule le nombre de pages nécessaires et on les met à jour dans le modèle
pageMax = calculerNbPages(pages[0]) ;
nbElements = pages[0] ;
// et on notifie de le mediateur du changement des valeurs
getIMediateur().changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ;
}
getIMediateur().getMetadonneesIptcExif().getPanneauMotsCles().rafraichir(arbreMotsCles, true) ;
}
}
/**
603,64 → 510,4
MCDao.deplacerBaseDeDonnees(motCleModifie) ;
}
/**
* Change le numéro de la page en cours et envoie une demande de mise à jour des données
* @param nouvellePageCourante la nouvelle page à afficher
*/
public void changerNumeroPage(int nouvellePageCourante)
{
pageEncours = nouvellePageCourante ;
obtenirPhotoGalerie(this) ;
}
/**
* Calcule le nombre de pages nécessaires pour afficher un nombre d'élements donnés en fonction de la taille de page
* en cours
* @param nbElements le nombre d'élements total
* @return le nombre de pages
*/
public int calculerNbPages(int nbElements)
{
// A cause de la betise de java pour les conversion implicite on fait quelques conversions manuellement
// pour eviter qu'il arrondisse mal la division
// nombre de pages = (nombre d'element / taille de la page) arrondie à l'entier superieur
double nPage = (1.0*nbElements)/(1.0*taillePage) ;
double nPageRound = Math.ceil(nPage) ;
Double nPageInt = new Double(nPageRound) ;
// on convertit en entier
return nPageInt.intValue() ;
}
/**
* Recalcule la page en cours lors du changement du nombre d'élements
* @param nbElements le nombre d'élements total
* @return la nouvelle page encours
*/
public int calculerPageCourante(int nbElements)
{
// on calcule le nombre de page
int nouvelNbPages = calculerNbPages(nbElements) ;
// la nouvelle page en cours
double nPageCourante = (1.0*pageEncours)/(1.0*pageMax) * (1.0*nouvelNbPages) ;
// on arrondit au supérieur
double nPageRound = Math.ceil(nPageCourante) ;
Double nPageInt = new Double(nPageRound) ;
// on convertit en entier
return nPageInt.intValue() ;
}
/**
* Change la taille de page et recalcule la page encours
* @param nouvelleTaillePage la nouvelle taille de page à utiliser
*/
public void changerTaillePage(int nouvelleTaillePage)
{
taillePage = nouvelleTaillePage ;
pageEncours = calculerPageCourante(nbElements) ;
obtenirPhotoGalerie(this) ;
}
}
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java
15,8 → 15,6
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.Store;
43,7 → 41,7
public class ImageMediateur {
/**
* booleen qui verifie l'unicite de l'instance (donc static)
* booleen qui verifie l'unicite de l'instance
*/
private static boolean estInstancie = false ;
52,7 → 50,8
*/
private ImageModele iModele = null ;
 
// Widget crées par le médiateur
/**
* panneau principal des images (onglet "images")
*/
118,7 → 117,6
*/
private ImageMediateur()
{
// quelques variables de position pour les borderlayouts
final BorderLayoutData regionNord = new BorderLayoutData(
RegionPosition.NORTH) ;
130,67 → 128,49
regionEst.setSplit(true);
 
// on crée un modèle
iModele = ImageModele.Instance(this);
// et on demande l'arbre des mots clés
iModele.initialiserArbreMotsCles() ;
// on gère la mise en page du panneau principal
panneauPrincipalImage.setLayout(new BorderLayout());
// on crée le panneau qui contient les differentes onglets ainsi que le menu supérieur
panneauMenuEtOngletsImage = new Panel() ;
panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
// le panneau à onglet qui contient les trois vues
ongletsImage = new TabPanel();
// la galerie
galerieImage = new GalerieImageVue(this) ;
// la liste des images
Panel panneauListeImage = new Panel("Liste");
listeImage = new ListeImageVue(this);
panneauListeImage.setLayout(new FitLayout());
panneauListeImage.add(listeImage);
// le panneau zoom
zoomImage = new ZoomImageVue(this);
// on ajoute les panneaux au panneau à onglets
ongletsImage.add(galerieImage);
ongletsImage.add(zoomImage);
ongletsImage.add(panneauListeImage);
// on crée les menu et la barre de vue
menuImageVue = new MenuImageVue(this) ;
barreOutilsVue = new BarreOutilsVue(this) ;
// on initialise le volet qui contient les mots clés
detailsEtMotsCles.setWidth("25%");
detailsEtMotsCles.setAnimCollapse(true);
detailsEtMotsCles.setTitleCollapse(true);
detailsEtMotsCles.setCollapsible(true);
// on crée le panneau conteneur des métadonnées et infos
metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
// et on l'inclut dans le volet approprié
detailsEtMotsCles.add(metadonneesIptcExif) ;
// on ajoute la barre de vue au nord du panneau qui contient menu et onglets d'images
panneauMenuEtOngletsImage.add(barreOutilsVue,regionNord) ;
// les onglets au centre
panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
// on ajoute le panneau qui contient le menu et les onglets d'images au centre
panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
// et le panneau de métadonnées et d'info sur le coté droit
panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
}
/**
* @param change la valeur du booleen de selection
* @param selection the selection to set
*/
public void setSelection(boolean selection) {
this.selection = selection;
197,16 → 177,12
}
 
/**
* @return la valeur du booleen de selection
* @return the selection
*/
public boolean isSelection() {
return selection;
}
 
/**
* Retourne une instance de manière unique
* @return l'instance du médiateur
*/
public static ImageMediateur Instance()
{
if(!estInstancie)
220,43 → 196,23
}
}
/**
* Renvoie l'identifiant de l'utilisateur en cours
* @return l'identifiant de l'utilisateur
*/
public String getIdentifiant()
{
return "0" ;
}
 
/**
* Accesseur pour le modèle associé au médiateur
* @return le modèle associé
*/
public ImageModele getIModele() {
return iModele;
}
 
/**
* Accesseur pour le panneau principal
* @return le panneau principal
*/
public Panel getPanneauPrincipalImage() {
return panneauPrincipalImage;
}
 
/**
* Accesseur pour le panneau à onglets
* @return le panneau à onglets
*/
public TabPanel getOngletsImage() {
return ongletsImage;
}
 
/**
* Accesseur pour la galerie d'images
* @return la galerie d'image
*/
public GalerieImageVue getGalerieImage() {
return galerieImage;
}
265,25 → 221,16
return listeImage;
}
 
/**
* Accesseur pour le panneau "zoom"
* @return le panneau zoom
*/
public ZoomImageVue getZoomImage() {
return zoomImage;
}
 
/**
* Accesseur pour le panneau détails et mot clés
* @return le panneau détails et mots clés
*/
public Panel getDetailsEtMotsCles() {
return detailsEtMotsCles;
}
/**
* Accesseur pour le booleen d'instanciation
* @return le booleen d'instanciation
* @return the estInstancie
*/
public static boolean isEstInstancie() {
return estInstancie;
290,8 → 237,7
}
 
/**
* Accesseur pour la panneaèu contenant le menu et les onglets images
* @return le panneauMenuEtOngletsImage
* @return the panneauMenuEtOngletsImage
*/
public Panel getPanneauMenuEtOngletsImage() {
return panneauMenuEtOngletsImage;
298,7 → 244,6
}
 
/**
* Accesseur pour le menu
* @return the menuImageVue
*/
public MenuImageVue getMenuImageVue() {
306,7 → 251,6
}
 
/**
* Accesseur pour la barre d'outils
* @return the barreOutilsVue
*/
public BarreOutilsVue getBarreOutilsVue() {
314,7 → 258,6
}
 
/**
* Accesseur pour le panneau infos et métadonnées
* @return the metadonneesIptcExif
*/
public PanneauMetadonneesVue getMetadonneesIptcExif() {
322,8 → 265,7
}
 
/**
* Renvoie l'index du dernier onglet sélectionné
* @return l'index du dernier onglet
* @return the dernierIndexOnglet
*/
public int getDernierIndexOnglet() {
return dernierIndexOnglet;
330,7 → 272,7
}
/**
* Renvoie la vue sélectionné par l'utilisateur
*
* @return la vue selectionnée par l'utilisateur
*/
public VueListable getVueSelectionnee()
364,41 → 306,7
}
/**
* Renvoie l'identifiant de la vue en cours
* @return l'identifiant de la vue en cours de visualisation
*/
public String getIdVueSelectionnee()
{
Panel active = ongletsImage.getActiveTab() ;
if(active != zoomImage)
{
if(active == galerieImage)
{
return galerieImage.getId() ;
}
else
{
return listeImage.getId() ;
}
}
else
{
if(dernierIndexOnglet == 0)
{
return galerieImage.getId() ;
}
else
{
return listeImage.getId() ;
}
 
}
}
/**
* Met a jour les données provenant du modèle et synchronise les vues entre elles
* met a jour les données provenant du modèle et synchronise les vues entre elles
* @param o données de mises a jour pour les vues
* @param r le refraichissable qui a demandé la mise a jour
*/
434,7 → 342,6
}
aucuneSelection() ;
demasquerChargement() ;
}
/**
466,10 → 373,6
getIModele().obtenirMotsClesId(r, id) ;
}
/**
* Envoie au modèle une demande pour obtenir l'arbre des mots clés
* @param r le raffraichissable qui a demandé la mise à jour
*/
public void obtenirArbreMotsCles(Rafraichissable r)
{
getIModele().obtenirArbreMotCle(r) ;
488,10 → 391,6
getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
}
/**
* Met à jour l'arbre des mots clés affichés dans le volet de droite à partir de l'arbre passé en paramètre
* @param arbreMC le nouvel arbre des mots clés
*/
public void rafraichirArbreMotsCles(Tree arbreMC)
{
metadonneesIptcExif.getPanneauMotsCles().rafraichir(arbreMC, false) ;
599,7 → 498,6
int storeIndex ;
Record nRec = null ;
// tout d'abord on obtient les index selectionnés suivant la vue
if(getVueSelectionnee() == galerieImage)
{
DataView dv = getGalerieImage().getDView();
733,7 → 631,6
if(com.google.gwt.user.client.Window
.confirm("Supprimer les images selectionnees ?"))
{
masquerChargement() ;
getIModele().supprimerImages(ids) ;
aucuneSelection() ;
}
760,7 → 657,7
}
/**
* reactive les onglet metadonnees et zoom (lors d'une selection alors qu'il n'y en avait pas)
* reacative les onglet metadonnees et zoom (lors d'une selection alors qu'il n'y en avait pas)
*/
public void selection() {
772,12 → 669,6
}
}
 
/**
* Fait apparaitre le menu contextuel de l'arbre des mots clés au niveau d'un noeud donné
* @param n le noeud ou le menu doit apparaitre
* @param ev l'objet contenant les données sur l'évenement
* @param te l'éditeur associé à l'arbre qui permet de modifier les libellés des noeuds
*/
public void montrerContextMenuArbre(final TreeNode n, EventObject ev, final TreeEditor te)
{
Menu mn = new Menu() ;
806,11 → 697,8
}
/**
* Appelle le modèle pour mettre à jour la paire mot-clé / identifiant du mot clé
* @param text le texte du mot clé
* @param id l'identifiant du mot clé
*/
 
public void mettreAjourMotsClesId(String text, String id) {
getIModele().mettreAjourMotsClesId(text, id) ;
817,12 → 705,6
}
 
/**
* Récupère les identifiants des images selectionnés
* et appelle le modèle pour qu'il mette à jour les associations mots clés/images
* @param motsClesEnCours les mots clés à associer aux images selectionnés séparés par une ','
* @param arbreMC l'arbre des mots clés à mettre à jour
*/
public void mettreAjourMotsCles(String motsClesEnCours, Tree arbreMC) {
String[] ids = getGalerieImage().getIdSelectionnees() ;
830,21 → 712,11
}
/**
* Appelle le médiateur pour qu'il ajoute un mot clé dans l'arbre des mots clés
* @param n le noeud parent pour l'ajout
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void ajouterMotCleDansArbre(TreeNode n,Tree arbreMC)
{
getIModele().ajouterMotCleDansArbre(n, arbreMC) ;
}
 
/**
* Appelle le médiateur pour qu'il supprime un mot clé et son sous arbre dans l'arbre des mots clés
* @param n le noeud à supprimer
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void supprimerMotCleDansArbre(TreeNode n, Tree arbreMC) {
getIModele().supprimerMotCleDansArbre(n,arbreMC) ;
851,11 → 723,6
}
 
/**
* Appelle le médiateur pour qu'il modifie un mot clé dans l'arbre des mots clés
* @param n le noeud à modifier
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void modifierMotCleDansArbre(TreeNode n , Tree arbreMC) {
getIModele().modifierMotCleDansArbre(n,arbreMC) ;
862,97 → 729,16
}
/**
* Appelle le médiateur pour qu'il déplace un mot clé et son sous arbre dans l'arbre des mots clés
* @param n le noeud à déplacer
* @param arbreMC le nouvel arbre de mots clés à mettre à jour
*/
public void deplacerMotCleDansArbre(TreeNode n , Tree arbreMC) {
getIModele().deplacerMotCleDansArbre(n, arbreMC) ;
}
 
/**
* initialise les mots clés cochés par rapport aux images sélectionnées
*/
public void initialiserMotsCleCoches() {
obtenirMotsClesId(metadonneesIptcExif.getPanneauMotsCles(), getGalerieImage().getIdSelectionnees()[0]) ;
}
 
/**
* Appelle le modèle pour lui demander les données d'une page à afficher
* @param pageCourante le numéro de page à affciher
*/
public void changerNumeroPage(int pageCourante) {
// on met le mesage d'attente
masquerChargement() ;
// on appelle le modèle
getIModele().changerNumeroPage(pageCourante) ;
// et met à jour les numéros de page dans les barre d'outils
getGalerieImage().getToolBarVue().changerPageCourante(pageCourante);
getListeImage().getToolBarVue().changerPageCourante(pageCourante);
}
/**
* Appelle le modèle pour qu'il change la taille de page utilisée
* @param nouvelleTaillePage la nouvelle taille de page
*/
public void changerTaillePage(int nouvelleTaillePage)
{
// on met le message d'attente
masquerChargement() ;
// on appelle le modèle
getIModele().changerTaillePage(nouvelleTaillePage) ;
// et on met à jour la taille de page dans les barres d'outils
getGalerieImage().getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
getListeImage().getToolBarVue().selectionnerTaillePage(nouvelleTaillePage);
}
 
/**
* Met à jour les barre d'outils avec des nouvelles valeurs
* @param pageMax le nombre de pages
* @param pageEncours la page en cours
* @param taillePage la taille de page
* @param nbElement le nombre d'élements par page
*/
public void changerPageMaxEtCourante(int pageMax, int pageEncours, int taillePage, int nbElement)
{
int[] pages = {pageMax,pageEncours, taillePage, nbElement} ;
getGalerieImage().getToolBarVue().rafraichir(pages, false) ;
getListeImage().getToolBarVue().rafraichir(pages, false) ;
}
/**
* Recherche l'élement actuellement affiché et affiche son message de chargement
*/
public void masquerChargement()
{
ExtElement masked = Ext.get(getIdVueSelectionnee()) ;
 
masked.mask("Chargement") ;
 
}
/**
* Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
*/
public void demasquerChargement()
{
ExtElement masked = Ext.get(getIdVueSelectionnee()) ;
if(masked.isMasked())
{
masked.unmask() ;
}
}
 
}
/trunk/src/org/tela_botanica/client/vues/pageToolBarVue.java
File deleted
/trunk/src/org/tela_botanica/client/vues/ListeImageVue.java
11,9 → 11,6
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.JsObject;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
23,7 → 20,6
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StoreMgr;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.util.JavaScriptObjectHelper;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
73,8 → 69,6
// store qui gère les données de la liste d'images
private Store st = null;
private ColumnConfig cl = null;
private pageToolBarVue bt = null ;
 
public ListeImageVue(ImageMediateur im) {
 
83,15 → 77,12
this.setId("listeImageGrid");
 
this.iMediateur = im;
bt = new pageToolBarVue(im);
this.setBottomToolbar(bt) ;
 
numImage = new ColumnConfig("numéro", "num_image", 30, true);
numImage = new ColumnConfig("numéro", "num_image", 100, true);
datImage = new ColumnConfig("date", "dat_image", 120, true);
lieImage = new ColumnConfig("lieu", "lie_image", 120, true);
appImage = new ColumnConfig("appareil", "app_image", 200, true);
urlImage = new ColumnConfig("Image", "url_image_S", 30, true,
urlImage = new ColumnConfig("Image", "url_image_S", 200, true,
new Renderer() {
 
public String render(Object value,
106,12 → 97,11
 
});
 
ColumnConfig[] cm = {numImage, urlImage, datImage, lieImage, appImage};
ColumnConfig[] cm = { numImage, datImage, lieImage, appImage, urlImage };
modeleColonnes = new ColumnModel(cm);
this.setColumnModel(modeleColonnes);
this.setAutoScroll(true);
this.setAutoWidth(true);
this.setEnableColumnResize(true);
 
// creation du store
FieldDef defNumImage = new IntegerFieldDef("num_image");
128,6 → 118,7
this.setStore(st);
this.getView().setAutoFill(true);
 
// this.setLoadMask(true) ;
this.setLoadMask("chargement");
 
ajouterListeners();
242,7 → 233,6
st = (Store) nouvelleDonnees;
st.load();
this.reconfigure(st, this.getColumnModel());
}
 
if (repandreRafraichissement) {
258,11 → 248,6
getSelectionModel().selectRecords(sel);
}
}
public pageToolBarVue getToolBarVue()
{
return bt ;
}
 
/**
* @param estInstancie
/trunk/src/org/tela_botanica/client/vues/BarreOutilsVue.java
12,13 → 12,6
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.menu.Menu;
 
 
/**
* Barre d'outils contenant le menu de gestion des images (accessible aussi par un clic droit dans la galerie)
* et d'autres menus et boutons utiles
* @author aurelien
*
*/
public class BarreOutilsVue extends Toolbar {
ToolbarMenuButton images = null ;
25,18 → 18,6
ImageMediateur iMediateur = null ;
MenuImageVue imageMenu = null ;
 
/**
* Constructeur sans argument (ne doit pas être utilisé donc privé)
*/
private BarreOutilsVue()
{
super() ;
}
/**
* Constructeur avec paramètres
* @param im
*/
public BarreOutilsVue(ImageMediateur im) {
super() ;
44,7 → 25,7
iMediateur = im ;
imageMenu = new MenuImageVue(im) ;
images = new ToolbarMenuButton("Fichiers",imageMenu) ;
images = new ToolbarMenuButton("Images",imageMenu) ;
this.addButton(images) ;
}
/trunk/src/org/tela_botanica/client/vues/GalerieImageVue.java
1,13 → 1,10
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.image.ImageMediateur;
import com.gwtext.client.core.Ext;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.interfaces.VueListable;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Label;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.XTemplate;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
18,131 → 15,90
import com.gwtext.client.util.Format;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.DataView;
import com.gwtext.client.widgets.PagingToolbar;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.ToolTip;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.ToolbarTextItem;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
import com.gwtext.client.widgets.form.Field;
import com.gwtext.client.widgets.form.NumberField;
import com.gwtext.client.widgets.form.event.FieldListenerAdapter;
 
/**
* Galerie d'images miniatures
* Avec barre de pagination
*
* @author aurelien
*/
public class GalerieImageVue extends Panel implements Rafraichissable,
VueListable {
 
/**
* instance du médiateur
*/
// instance du médiateur
private ImageMediateur iMediateur = null;
/**
* Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données
*/
private DataView dView = null;
/**
* Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données
*/
private Store st = null;
/**
* Barre de pagination gérant l'affichage d'un nombre donné d'élements par page et la navigation entre eux
*/
private pageToolBarVue pt = null ;
/**
* Booleen indiquant si la galerie est instanciée ou pas
*/
private boolean estInstancie = false ;
 
/**
* Constructeur sans argument, privé car ne doit pas être utilisé
*/
private GalerieImageVue()
{
super() ;
}
/**
* Constructeur avec argument
* @param im le médiateur avec lequel la vue va communiquer
*/
public GalerieImageVue(ImageMediateur im) {
super("Galerie");
iMediateur = im;
// on ajoute des listeners au composant tout entier
 
this.addListener(new ContainerListenerAdapter() {
 
// pour gagner du temps on n'instancie la vue en elle même que lors du premier affichage (lazy rendering)
public void onHide(Component component) {
// TODO Auto-generated method stub
 
}
 
public void onRender(Component component) {
// TODO Auto-generated method stub
 
}
 
public void onShow(Component component) {
 
if (!estInstancie) {
if (dView == null) {
initialiser();
}
}
 
});
// et on ajoute la tool bar
pt = new pageToolBarVue(im) ;
this.setBottomToolbar(pt) ;
 
}
 
/**
* Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la vue de données
*/
public void ajouterListenersDataView() {
 
// ajout de listeners pour la gestion de la selection
// dans la galerie
dView.addListener(new DataViewListenerAdapter() {
// gestion du clic sur une image
 
public void onClick(DataView source, int index, Element node,
EventObject e) {
// on en notifie le médiateur
 
getIMediateur().clicGalerieImage(index, node, e);
 
}
 
// gestion du clic droit
public void onContainerClick(DataView source, EventObject e) {
// TODO: appeler le mediateur
 
}
 
public void onContextMenu(DataView source, int index, Element node,
EventObject e) {
 
// on stoppe l'évenement
e.stopEvent();
// et on notifie le médiateur
getIMediateur().montrerContextMenu(e);
 
}
 
// gestion du double clic
public void onDblClick(DataView source, int index, Element node,
EventObject e) {
 
// on notife le mediateur
// TODO: appeler le mediateur
getIMediateur().clicGalerieImage(index, node, e);
 
}
 
// gestion des actions en fonction de la selection
public void onSelectionChange(DataView view, Element[] selections) {
 
// s'il n'y a aucun élement sélectionné
if (selections.length <= 0) {
// on en notifie le médiateur
getIMediateur().aucuneSelection();
} else {
// sinon on notifie le médiateur
getIMediateur().selection();
// et on lui demande de synchroniser la séléction avec les autres vues
getIMediateur().synchroniserSelection("galerie");
}
}
150,18 → 106,10
});
}
 
/**
* Accesseur pour la dataview
* @return la dataview
*/
public DataView getDView() {
return dView;
}
 
/**
* Renvoie les ids des images sélectionnées
* @return un tableau de String contenant les identifiants des images sélectionnées
*/
public String[] getIdSelectionnees() {
Record[] selection = getDView().getSelectedRecords();
int taille = selection.length;
175,37 → 123,16
return id_selection;
}
 
/**
* Accesseur pour le médiateur
* @return le mdéiateur associé à la vue
*/
public ImageMediateur getIMediateur() {
return iMediateur;
}
 
/**
* Accesseur pour le store
* @return le store associée à la vue
*/
public Store getSt() {
return st;
}
/**
* Accesseur pour la toolbar
* @return la toolbar associée à la vue
*/
public pageToolBarVue getToolBarVue()
{
return pt ;
}
 
/**
* Fonction d'initialisation du contenu (appelée lors du premier affichage de la liste)
*/
// instantiation paresseuse
public void initialiser() {
// Preparation de la dataview et du template
// le template va créer une div contenant une image
// pour chacune des photos
216,7 → 143,6
"<div class='thumb'><img src='{url_image_M}' title='{num_image}'></div>",
"<span>{nom}</span></div>", "</tpl>",
"<div class='x-clear'></div>" });
// pour des raisons de performances on compile le template en une fonction
template.compile();
 
// la dataview affichera les images en accord avec le template
250,7 → 176,6
RecordDef rd = new RecordDef(defTab);
st = new Store(rd);
dView.setStore(st);
 
this.getDView().setLoadingText("chargement");
 
258,53 → 183,29
ajouterListenersDataView();
 
this.add(dView);
// enfin on envoie une demande de données au médiateur
 
getIMediateur().obtenirPhotoGalerie(this);
// et on déclare le composant comme instancié
estInstancie = true ;
}
 
/**
* Méthode héritée de l'interface rafraichissable
*/
public void rafraichir(Object nouvelleDonnees,
boolean repandreRafraichissement) {
 
// si l'objet reçu est un store
if (nouvelleDonnees instanceof Store) {
st = (Store) nouvelleDonnees;
// on le charge
st.load();
// on l'affecte à la vue
dView.setStore(st);
// et on rafrachit la vue
dView.refresh();
}
 
// si le com)posant doit répandre le rafraichissement
if (repandreRafraichissement) {
// il en notifie le médiateur en lui donnant une copie des données
getIMediateur().synchroniserDonneesZoomListeGalerie(
nouvelleDonnees, this);
}
if(!estInstancie)
{
estInstancie = true ;
}
}
 
/**
* Sélectionne les images dans la galerie suivant les identifiants donnés en paramètres
* @param ids les identifiants des images à sélectionner
*/
public void selectionnerImages(int[] ids) {
 
getDView().select(ids);
 
}
}
/trunk/src/org/tela_botanica/client/modeles/NombreImageAsynchroneDAO.java
File deleted
/trunk/src/org/tela_botanica/client/modeles/ImageUploaderAsynchroneDAO.java
58,9 → 58,9
private static void appelerUploadMultiple()
{
final Window nPan = new Window("Upload multiple");
nPan.setWidth(640) ;
nPan.setSize(640, 800);
 
final String applet = "<applet code=\"wjhk.jupload2.JUploadApplet\" archive=\"wjhk.jupload.jar\" alt=\"\" mayscript=\"\" height=\"350\" width=\"625\">";
final String applet = "<applet code=\"wjhk.jupload2.JUploadApplet\" archive=\"wjhk.jupload.jar\" alt=\"\" mayscript=\"\" height=\"770\" width=\"625\">";
final String paramPostTarget = "<param name=\"postURL\" value=\"jrest/InventoryImage/\">";
final String paramUploadPolicy = "<param name=\"uploadPolicy\" value=\"PictureUploadPolicy\">";
final String paramMaxChunkSize = "<param name=\"maxChunkSize\" value=\"0\">";
/trunk/src/org/tela_botanica/client/modeles/ListeImageAsynchroneDAO.java
35,24 → 35,9
iMediateur = im ;
}
public void ObtenirListeImages(final Rafraichissable r, String[][] criteres)
public void ObtenirListeImages(final Rafraichissable r)
{
String requete = "" ;
if(criteres != null)
{
for (int i = 0; i < criteres.length; i++) {
requete += criteres[i][0]+"="+criteres[i][1] ;
if(i != criteres.length - 1)
{
requete += "&" ;
}
}
}
HTTPRequest.asyncGet("jrest/InventoryImageList/0/"+requete, new ResponseTextHandler() {
HTTPRequest.asyncGet("jrest/inventoryImageList/1/ci_publiable_eflore=0", new ResponseTextHandler() {
public void onCompletion(String responseText) {
final ListeImageCarnet photoData ;