/trunk/src/org/tela_botanica/client/modeles/ImageCarnet.java |
---|
124,14 → 124,42 |
{ |
return "http://162.38.234.9/Documents/images_serveur/" ; |
} |
/** |
* 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[] getBaseFileName() |
{ |
String id = getId() ; |
int maxZeros = 9 - id.length() ; |
for(int i = 0 ; i < maxZeros ; i++) |
{ |
id = "0"+id ; |
} |
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 ; |
} |
/** |
* Renvoie le chemin et nom du fichier grand format |
* @return le chemin du fichier grand format |
*/ |
public String getUrl() { |
public String getLUrl() { |
return getBaseUrl()+(String)this.get("ci_id_image")+".jpg" ; |
String[] infosFichier = getBaseFileName() ; |
return getBaseUrl()+infosFichier[1]+"/"+infosFichier[2]+"/L/"+infosFichier[0]+"_L.jpg" ; |
} |
/** |
140,7 → 168,9 |
*/ |
public String getSUrl() { |
return getBaseUrl()+(String)this.get("ci_id_image")+"_S.jpg" ; |
String[] infosFichier = getBaseFileName() ; |
return getBaseUrl()+infosFichier[1]+"/"+infosFichier[2]+"/S/"+infosFichier[0]+"_S.jpg" ; |
} |
/** |
149,7 → 179,9 |
*/ |
public String getMUrl() { |
return getBaseUrl()+(String)this.get("ci_id_image")+"_M.jpg" ; |
String[] infosFichier = getBaseFileName() ; |
return getBaseUrl()+infosFichier[1]+"/"+infosFichier[2]+"/M/"+infosFichier[0]+"_M.jpg" ; |
} |
/** |
/trunk/src/org/tela_botanica/client/modeles/ListeImageAsynchroneDAO.java |
---|
58,10 → 58,14 |
{ |
for (int i = 0; i < criteres.length; i++) { |
requete += criteres[i][0]+"="+criteres[i][1] ; |
if(i != criteres.length - 1) |
if(!criteres[i][1].equals("")) |
{ |
requete += "&" ; |
if(i!= 0) |
{ |
requete += "&"; |
} |
requete += criteres[i][0]+"="+criteres[i][1] ; |
} |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/NombreImageAsynchroneDAO.java |
---|
51,16 → 51,15 |
for (int i = 0; i < criteres.length; i++) { |
if(!criteres[i][0].equals("ci_ordre")) |
{ |
if(i != 0) |
{ |
if(!criteres[i][1].equals("")) |
{ |
requete += "&" ; |
if(i!= 0) |
{ |
requete += "&"; |
} |
requete += criteres[i][0]+"="+criteres[i][1] ; |
} |
requete += criteres[i][0]+"="+criteres[i][1] ; |
if(i != criteres.length - 1) |
{ |
requete += "&" ; |
} |
} |
} |
} |
68,6 → 67,7 |
// on fait un get asynchrone |
HTTPRequest.asyncGet("jrest/InventoryImageCount/"+iModele.getIdentifiant()+"/"+requete, new ResponseTextHandler() { |
public void onCompletion(String responseText) { |
final JSONValue responseValue = JSONParser.parse(responseText); |
/trunk/src/org/tela_botanica/client/CarnetEnLigneMediateur.java |
---|
38,8 → 38,7 |
private void _CarnetEnLigneMediateur() { |
ImageMediateur.Instance() ; |
//new ImageMediateur(this); |
ImageMediateur.Instance() ; |
new ObservationMediateur(this); |
} |
105,10 → 104,7 |
/** |
* Deconnecte l'utilisateur passe en parametre |
* @param String uti (utilisateur connecte) |
*/ |
public void deconnecterUtilisateur() { |
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java |
---|
2,8 → 2,10 |
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.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.MenuImageVue; |
114,6 → 116,16 |
private boolean selection = false ; |
/** |
* Filtre pour les mots cles |
*/ |
private ArbreMotsClesFiltreVue filtreMotsCles = null ; |
/** |
* Filtre pour les commentaires |
*/ |
private BarreRechercheFiltreVue filtreCommentaires = null ; |
/** |
* constructeur privé (on accède a la classe par la méthode getInstance |
*/ |
private ImageMediateur() |
172,6 → 184,9 |
detailsEtMotsCles.setTitleCollapse(true); |
detailsEtMotsCles.setCollapsible(true); |
filtreMotsCles = new ArbreMotsClesFiltreVue(this) ; |
filtreCommentaires = new BarreRechercheFiltreVue(this) ; |
// on crée le panneau conteneur des métadonnées et infos |
metadonneesIptcExif = new PanneauMetadonneesVue(this) ; |
// et on l'inclut dans le volet approprié |
332,6 → 347,24 |
} |
/** |
* Accesseur pour l'arbre des filtres |
* @return l'arbre pour filtrer les mots clés |
*/ |
public ArbreMotsClesFiltreVue getFiltreMotsCles() |
{ |
return filtreMotsCles ; |
} |
/** |
* Accesseur pour la barre de recherche |
* @return la barre de recherche pour filtrer les commentaires |
*/ |
public BarreRechercheFiltreVue getFiltreCommentaires() |
{ |
return filtreCommentaires ; |
} |
/** |
* Renvoie la vue sélectionné par l'utilisateur |
* @return la vue selectionnée par l'utilisateur |
*/ |
965,7 → 998,43 |
masked.unmask() ; |
} |
} |
public void afficherFiltreMotsCles() { |
getIModele().obtenirArbreMotCle(filtreMotsCles) ; |
} |
/** |
* C'est dans cette fonction que doivent être renvoyé les valeurs des filtres |
* sous forme de tableau [nom, valeur] |
* @return Les noms et valeurs des filtres |
*/ |
public String[][] renvoyerFiltres() |
{ |
String[][] valeursFiltres = { filtreMotsCles.renvoyerValeursAFiltrer() , filtreCommentaires.renvoyerValeursAFiltrer() } ; |
return valeursFiltres ; |
} |
/** |
* Indique si les filtres ont changés depuis la dernière requête |
* (il faut faire un OR sur le résultat de toutes les fonctions |
* renvoyerEtatFiltre s'il y a plus d'un filtre) |
* @return Une indication de changements de filtres |
*/ |
public boolean getEtatFiltres() |
{ |
System.out.println("les filtres sont modifiés ? "+(filtreMotsCles.renvoyerEtatFiltre() || filtreCommentaires.renvoyerEtatFiltre())) ; |
return (filtreMotsCles.renvoyerEtatFiltre() || filtreCommentaires.renvoyerEtatFiltre()); |
} |
public void afficherFiltreCommentaires() { |
filtreCommentaires.afficherFiltre() ; |
} |
} |
/trunk/src/org/tela_botanica/client/image/ImageModele.java |
---|
123,8 → 123,10 |
*/ |
public void obtenirPhotoGalerie(Rafraichissable r) |
{ |
String motsClesFiltres[][] = getIMediateur().renvoyerFiltres() ; |
// on rassemble les critères |
String[][] criteres = {{"ci_ce_utilisateur", ""+getIMediateur().getIdentifiant()} } ; |
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) ; |
131,7 → 133,7 |
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} } ; |
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(); |
liaDAO.ObtenirListeImages(this, criteres2); |
298,6 → 300,12 |
ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees ; |
Object[][] photoData = new Object[data.size()][7]; |
int i = 0 ; |
if(data.size() == 0) |
{ |
pageEncours = 0 ; |
} |
// on la parse et on récupère les informations quiç nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
648,7 → 656,7 |
Double nPageInt = new Double(nPageRound) ; |
// on convertit en entier |
return nPageInt.intValue() ; |
return Math.abs(nPageInt.intValue()) ; |
} |
/** |
679,6 → 687,11 |
return getIMediateur().getIdentifiant() ; |
} |
/** |
* renvoie la taille d'une image grâce à son identifiant |
* @param id l'identifiant de l'image |
* @return un tableau contenant la longueur et la hauteur de l'image |
*/ |
public String[] obtenirTailleImage(String id) { |
return ((ImageCarnet)cacheImage.get(id)).getTailleImage() ; |
/trunk/src/org/tela_botanica/client/vues/BarreRechercheFiltreVue.java |
---|
New file |
0,0 → 1,177 |
package org.tela_botanica.client.vues; |
import org.tela_botanica.client.image.ImageMediateur; |
import org.tela_botanica.client.interfaces.Filtrable; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import com.google.gwt.core.client.JavaScriptObject; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.widgets.Button; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.Window; |
import com.gwtext.client.widgets.event.ButtonListener; |
import com.gwtext.client.widgets.event.ButtonListenerAdapter; |
import com.gwtext.client.widgets.event.KeyListener; |
import com.gwtext.client.widgets.form.TextField; |
import com.gwtext.client.widgets.layout.BorderLayout; |
import com.gwtext.client.widgets.menu.Menu; |
/** |
* Fenêtre de recherche pour les mots clés, contenant un champ texte, |
* et un bouton cliquable |
* @author aurelien |
* |
*/ |
public class BarreRechercheFiltreVue extends Window implements Rafraichissable, Filtrable { |
/** |
* Médiateur associé à la vue |
*/ |
private ImageMediateur iMediateur = null ; |
/** |
* Barre de recherche |
* |
*/ |
private TextField champRecherche = null ; |
/** |
* Bouton rechercher |
*/ |
private Button rechercher = null ; |
/** |
* Booleen d'etat du filtre |
*/ |
private boolean filtreModifie = false ; |
/** |
* mot(s) à chercher |
*/ |
private String motsAChercher = "" ; |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
private BarreRechercheFiltreVue() |
{ |
super() ; |
} |
/** |
* Constructeur avec médiateur |
* @param im |
*/ |
public BarreRechercheFiltreVue(ImageMediateur im) |
{ |
super("Recherche dans les commentaires") ; |
iMediateur = im ; |
champRecherche = new TextField() ; |
rechercher = new Button("Rechercher") ; |
add(champRecherche) ; |
add(rechercher) ; |
setSize(250, 100) ; |
setCollapsible(true) ; |
this.setCloseAction(HIDE) ; |
ajouterListeners() ; |
} |
/** |
* ajoute des listeners |
*/ |
private void ajouterListeners() |
{ |
// gestion du clic sur le bouton |
rechercher.addListener(new ButtonListenerAdapter() { |
public void onClick(Button button, EventObject e) { |
validationEtRequete() ; |
} |
}) ; |
// gestion de la touche entrée |
champRecherche.addKeyListener(EventObject.ENTER, new KeyListener() { |
public void onKey(int key, EventObject e) { |
validationEtRequete() ; |
} |
}) ; |
} |
/** |
* Fonction héritée de l'interface rafraichissable |
*/ |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
filtreModifie = false ; |
} |
/** |
* renvoie l'état du filtre (modifié ou non) |
* @return l'état du filtre |
*/ |
public boolean renvoyerEtatFiltre() { |
return filtreModifie ; |
} |
/** |
* Renvoie le nom du filtre |
* @return le nom du filtre |
*/ |
public String renvoyerNomFiltre() { |
return "Recherche Commentaires" ; |
} |
/** |
* Renvoie un tableau contenant le nom du champ à filtrer et la valeur |
* @return un tableau contenant le nom du champ à filtrer et sa valeur |
*/ |
public String[] renvoyerValeursAFiltrer() { |
String[] valeurFiltre = {"ci_meta_comment" , motsAChercher } ; |
return valeurFiltre ; |
} |
/** |
* Accesseur pour le médiateur |
* @return le médiateur associé |
*/ |
public ImageMediateur getIMediateur() |
{ |
return iMediateur ; |
} |
/** |
* Effectue quelque opérations dans la classe et envoie une requête de données |
* au médiateur |
*/ |
public void validationEtRequete() |
{ |
filtreModifie = true ; |
motsAChercher = champRecherche.getText() ; |
getIMediateur().obtenirPhotoGalerie(getIMediateur().getFiltreCommentaires()) ; |
} |
/** |
* Affiche la fenetre |
*/ |
public void afficherFiltre() { |
show() ; |
champRecherche.setValue(motsAChercher) ; |
} |
} |
/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesFiltreVue.java |
---|
27,6 → 27,12 |
import com.gwtext.client.widgets.tree.TreeNode; |
import com.gwtext.client.widgets.tree.TreePanel; |
/** |
* fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton |
* cliquable |
* @author aurelien |
* |
*/ |
public class ArbreMotsClesFiltreVue extends Window implements Rafraichissable, Filtrable { |
/** |
58,11 → 64,18 |
*/ |
private boolean filtreModifie = false ; |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
private ArbreMotsClesFiltreVue() |
{ |
super() ; |
} |
/** |
* Constructeur avec paramètres |
* @param im le médiateur à associer |
*/ |
public ArbreMotsClesFiltreVue(ImageMediateur im) |
{ |
99,7 → 112,7 |
this.setBorder(false) ; |
this.setCollapsible(true) ; |
this.setTitleCollapse(true) ; |
this.setCloseAction(HIDE) ; |
// on ajoute les listeners |
ajouterListeners() ; |
106,7 → 119,10 |
estInstancie = true ; |
} |
public void ajouterListeners() |
/** |
* Ajoute les listeners |
*/ |
private void ajouterListeners() |
{ |
// gestion de la validation |
rechercher.addListener(new ButtonListenerAdapter() { |
146,6 → 162,7 |
}) ; |
// gestion de la fermeture du panneau |
this.addListener(new WindowListenerAdapter() { |
public void onClose(Panel panel) { |
162,6 → 179,9 |
}) ; |
} |
/** |
* Méthode héritée de l'interface rafraichissable |
*/ |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
170,6 → 190,18 |
{ |
Tree nouvelArbre = (Tree)nouvelleDonnees ; |
arbreMotsCles.getRootNode().eachChild(new NodeTraversalCallback() { |
public boolean execute(Node node) { |
node.remove() ; |
return true ; |
} |
}) ; |
copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ; |
getArbreMotsCles().expandAll() ; |
189,21 → 221,37 |
} |
/** |
* Accesseur pour le médiateur |
* @return le médiateur associé |
*/ |
public ImageMediateur getIMediateur() |
{ |
return iMediateur ; |
} |
/** |
* Accesseur pour le panneau contenant l'arbre |
* @return le panneau de l'arbre des mots clés |
*/ |
public TreePanel getArbreMotsCles() |
{ |
return arbreMotsCles ; |
} |
/** |
* Méthode héritée de Filtrable |
* renvoie le nom du filtre |
*/ |
public String renvoyerNomFiltre() { |
return "mots clés" ; |
} |
/** |
* Renvoie un tableau contenant le nom du champ à filtrer et la valeur |
* @return un tableau contenant le nom du champ à filtrer et sa valeur |
*/ |
public String[] renvoyerValeursAFiltrer() { |
String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ; |
211,7 → 259,13 |
return valeursFiltrees ; |
} |
public void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) |
/** |
* Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un copie du sous arbre du premier |
* noeud, qu'elle concatène au deuxième |
* @param ndPereOriginal le père des noeuds de l'arbre original |
* @param ndPereCopie le père qui va recevoir les copies |
*/ |
private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) |
{ |
Node[] ndNodeFils = ndPereOriginal.getChildNodes() ; |
232,7 → 286,10 |
} |
} |
/** |
* Méthode héritée de Filtrable |
* Renvoie l'état du filtre modifié ou nom) |
*/ |
public boolean renvoyerEtatFiltre() { |
return filtreModifie ; |
/trunk/src/org/tela_botanica/client/vues/pageToolBarVue.java |
---|
317,8 → 317,6 |
{ |
surTotalPage.setText(" sur "+pageTotale) ; |
System.out.println("Nombre d'éléments :"+nbElement); |
if(nbElement == 0) |
{ |
champPage.setValue(""+(0)) ; |
/trunk/src/org/tela_botanica/client/vues/MenuImageVue.java |
---|
28,9 → 28,17 |
*/ |
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() |
51,10 → 59,13 |
// on construit le menu |
uploaderImage = new Item("Uploader des images") ; |
supprimerImage = new Item("Supprimer les images selectionnées") ; |
chercherImage = new Item("Filtrer des images") ; |
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() ; |
75,8 → 86,6 |
{ |
// on notifie le médiateur |
getIMediateur().uploaderImages() ; |
// et on cache le menu |
hide() ; |
} |
// si c'est la suppression |
84,17 → 93,25 |
{ |
// on notifie le médiateur |
getIMediateur().supprimerImages() ; |
// et on chache le menu |
hide() ; |
} |
// si c'est la recherche par mots clé |
if(item.equals(chercherImage)) |
{ |
getIMediateur().afficherFiltres() ; |
hide() ; |
// 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/interfaces/Filtrable.java |
---|
1,9 → 1,28 |
package org.tela_botanica.client.interfaces; |
/** |
* Les classes qui implémentent cette interface fonctionnent sous forme de filtres |
* et doivent être capable de rendre compte de leur état (modifié ou non) |
* et de renvoyer les valeurs de filtrage |
* @author aurelien |
* |
*/ |
public interface Filtrable { |
/** |
* Renvoie un tableau contenant le nom du filtre et sa valeur |
* @return un tableau contenant le nom du filtre (exemple : "ci_meta_mots_cle") et sa valeur |
*/ |
public String[] renvoyerValeursAFiltrer() ; |
/** |
* Renvoie le nom du filtre de manière lisible (exemple : Filtre pour les mots clés) |
* @return le nom du filtre |
*/ |
public String renvoyerNomFiltre() ; |
/** |
* Renvoie l'état du filtre (modifié ou non) |
* @return true si le filtre à été modifié depuis le dernier appel, false sinon |
*/ |
public boolean renvoyerEtatFiltre() ; |
} |
/trunk/src/org/tela_botanica/client/CarnetEnLigneModele.java |
---|
29,7 → 29,7 |
/** |
* |
* @param retour |
* |
*/ |
public void getUtilisateurAsynchroneDAO(final iRetourUtilisateur retour) { |
41,9 → 41,8 |
/** |
* |
* @param retour |
* |
*/ |
public Utilisateur getUtilisateurSynchroneDAO() { |
return new Utilisateur("David Delon synchrone",true); |