Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 53 → Rev 54

/trunk/src/org/tela_botanica/client/vues/ImageGeneriqueVue.java
New file
0,0 → 1,90
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.observation.ObservationMediateur;
 
import com.google.gwt.user.client.ui.Image;
import com.gwtext.client.widgets.Panel;
 
/**
* Un panneau affichant une image generique provenant d eflore
*
* @author David Delon
*
*/
public class ImageGeneriqueVue extends Panel implements Rafraichissable {
 
/**
* Le médiateur associé
*/
private ObservationMediateur observationMediateur = null;
/**
* l'image à afficher
*/
private Image image = new Image();
/**
* Constructeur sans argument (privé car ne doit pas être utilisé)
*/
@SuppressWarnings("unused")
private ImageGeneriqueVue() {
super();
}
 
/**
* Constructeur avec argument
* @param obs le médiateur à associer
*/
public ImageGeneriqueVue(ObservationMediateur obs) {
this.observationMediateur = obs;
image.setPixelSize(150, 150);
add(image);
// on ajoute les listeners
ajouterListeners();
 
}
 
 
/**
* Affichage image generique
*
*/
public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {
 
// si on recoit une String contenant une URL
if (nouvelleDonnees instanceof String) {
String urlImage=(String) nouvelleDonnees;
if (urlImage.length()==0) {
image.setUrl("");
}
else {
image.setUrl(urlImage);
}
}
}
 
/**
* Ajoute les listeners pour la gestions d'évènement
*/
public void ajouterListeners() {
}
 
}
/trunk/src/org/tela_botanica/client/vues/ArbreLocaliteObservationFiltreVue.java
New file
0,0 → 1,331
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.interfaces.Filtrable;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.observation.ObservationMediateur;
 
import com.google.gwt.user.client.ui.Label;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.Tree;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
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 ArbreLocaliteObservationFiltreVue extends Panel implements Rafraichissable,
Filtrable {
 
/**
* Le médiateur associé à la vue
*/
private ObservationMediateur observationMediateur = null;
 
/**
* Les localites en cours
*/
private String localitesEncours = "";
 
/**
* Le treepanel qui affiche l'arbre
*/
private TreePanel arbreLocalites = null;
 
/**
* booléen d'initialisation
*/
private boolean estInstancie = false;
 
/**
* booléen d'etat
*/
private boolean filtreModifie = false;
 
/**
* Constructeur sans argument (privé car ne doit pas être utilisé)
*/
@SuppressWarnings("unused")
private ArbreLocaliteObservationFiltreVue() {
super();
}
 
/**
* Constructeur avec paramètres
*
* @param im
* le médiateur à associer
*/
public ArbreLocaliteObservationFiltreVue(ObservationMediateur obs) {
 
// on crée le panel
super();
this.observationMediateur = obs;
 
// on crée le conteneur de l'arbre
Label labelRecherche = new Label("Localités :");
arbreLocalites = new TreePanel();
 
this.setPaddings(5);
 
this.setBorder(false);
this.setCollapsible(true);
this.setAutoWidth(true);
 
add(labelRecherche);
 
// on ajoute les listeners
ajouterListenersPanel();
estInstancie = false;
}
 
/**
* Ajoute les listeners pour le rendu du panel
*/
private void ajouterListenersPanel() {
this.addListener(new PanelListenerAdapter() {
 
// on instancie réellement les composants au moment du rendu pour
// accélérer l'affichage
// et éviter des bugs
@Override
public void onRender(Component component) {
 
// on interdit le drag and drop dans l'arbre
arbreLocalites.setEnableDD(false);
arbreLocalites.setId("x-view-tree-filter");
arbreLocalites.setAutoWidth(false);
arbreLocalites.setAutoScroll(true);
arbreLocalites.setBorder(false);
 
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags");
root.setId("racine_filtre");
String[] usObject = { "Localités", "racine" };
root.setUserObject(usObject);
 
arbreLocalites.setRootNode(root);
arbreLocalites.setRootVisible(true);
arbreLocalites.setBorder(false);
 
// on met en forme le layout
((Panel) component).add(arbreLocalites);
 
// on ajoute les listeners d'évenements
ajouterListeners();
 
// et on demande l'arbre des localites
observationMediateur.obtenirArbreLocalites(observationMediateur.getPanneauFiltres().getArbreLocaliteObservationFiltreVue());
// enfin on considère le composant comme instancié
estInstancie = true;
 
}
 
});
}
 
/**
* ajoute les listeners pour les boutons et le cochage des mots clés
*/
private void ajouterListeners() {
 
}
 
/**
* Méthode héritée de l'interface rafraichissable
*/
public void rafraichir(Object nouvelleDonnees,
boolean repandreRaffraichissement) {
 
// si on a reçu un arbre
if (nouvelleDonnees instanceof Tree) {
Tree nouvelArbre = (Tree) nouvelleDonnees;
 
// on vide tous les noeuds
arbreLocalites.getRootNode().eachChild(new NodeTraversalCallback() {
 
public boolean execute(Node node) {
 
node.remove();
return true;
}
 
});
 
// et on recopie le nouvel arbre
copierFilsNoeud(nouvelArbre.getRootNode(), arbreLocalites
.getRootNode());
 
// si l'arbre n'était pas encore considéré comme instancié
if (!estInstancie) {
// on signale que oui
estInstancie = true;
}
 
// l'état du filtre est réinitialisé
filtreModifie = false;
 
show();
}
 
if (nouvelleDonnees instanceof TreeNode) {
TreeNode nd = (TreeNode) nouvelleDonnees;
 
// si le noeud n'existe pas déjà c'est un ajout
if (arbreLocalites.getTree().getNodeById(nd.getId() + "_filtre") == null) {
// donc on ne fait rien de spécial
}
// si le noeud existe déjà c'est un déplacement
else {
// alors on supprime d'abord le noeud concerné
arbreLocalites.getTree().getNodeById(nd.getId() + "_filtre")
.remove();
}
 
// on cherche le père du nouveau noeud
Node ndPereOriginal = nd.getParentNode();
String idPereFiltre = ndPereOriginal.getId() + "_filtre";
 
String[] usObj = (String[]) nd.getUserObject();
TreeNode child = new TreeNode(usObj[0]);
child.setId(usObj[1] + "_filtre");
child.setChecked(false);
child.setUserObject(usObj);
arbreLocalites.getNodeById(idPereFiltre).appendChild(child);
 
// et on ajoute le nouveau noeud à son père
copierFilsNoeud(nd, child);
}
 
// si on reçoit une string
if (nouvelleDonnees instanceof String) {
String idSupp = (String) nouvelleDonnees + "_filtre";
// c'est une suppression et si le noeud existe bien
if (arbreLocalites.getTree().getNodeById(idSupp) != null) {
// on le supprime
arbreLocalites.getTree().getNodeById(idSupp).remove();
}
}
 
}
 
 
/**
* Accesseur pour le panneau contenant l'arbre
*
* @return le panneau de l'arbre des mots clés
*/
public TreePanel getArbreMotsCles() {
return arbreLocalites;
}
 
/**
* Méthode héritée de Filtrable renvoie le nom du filtre
*/
public String renvoyerNomFiltre() {
 
return "Localité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() {
 
valider();
 
String[] valeursFiltrees = { "localites", localitesEncours };
 
return valeursFiltrees;
}
 
/**
* 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) {
if (ndPereCopie != null && ndPereOriginal != null) {
Node[] ndNodeFils = ndPereOriginal.getChildNodes();
 
for (int i = 0; i < ndNodeFils.length; i++) {
 
String[] usObj = (String[]) ndNodeFils[i].getUserObject();
TreeNode child = new TreeNode(usObj[0]);
child.setId(usObj[1] + "_filtre");
child.setChecked(false);
child.setUserObject(usObj);
ndPereCopie.appendChild(child);
 
if (!ndNodeFils[i].isLeaf()) {
copierFilsNoeud(ndNodeFils[i], child);
}
 
}
}
}
 
/**
* Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)
*/
public boolean renvoyerEtatFiltre() {
 
return filtreModifie;
}
 
public void valider() {
if (estInstancie) {
// on vide les mots clés en cours
localitesEncours = "";
// pour chaque noeud à partir de la racine
getArbreMotsCles().getRootNode().cascade(
new NodeTraversalCallback() {
 
// on éxécute une fonction
public boolean execute(Node node) {
 
// on récupère le mot clé associé au noeud et ses
// infos
TreeNode tn = getArbreMotsCles().getNodeById(
node.getId());
 
String[] usObject = (String[]) tn.getUserObject();
//observationMediateur.mettreAjourLocalites(usObject[0],
// usObject[1]);
 
if (tn.getUI().isChecked()) {
// et les concatène à la string des mots clés en
// cours
localitesEncours += usObject[1] + ",";
}
 
return true;
}
 
});
 
// on suppose que le filtre a change
filtreModifie = true;
}
}
 
}
/trunk/src/org/tela_botanica/client/vues/ListeObservationVue.java
251,7 → 251,7
public void onRowClick(GridPanel grid, int rowIndex,
EventObject e) {
// on notifie le médiateur et on lui passe le nuémro de ligne
getObservationMediateur().clicListeObservation(rowIndex);
observationMediateur.clicListeObservation(rowIndex);
}
 
261,7 → 261,7
// on stoppe l'évenement pour empecher le navigateur d'afficher son propre menu
e.stopEvent() ;
// on notifie le médiateur en lui passant l'évenement
getObservationMediateur().montrerContextMenu(e);
observationMediateur.montrerContextMenu(e);
}
 
// gestion du double clic
268,7 → 268,7
public void onRowDblClick(GridPanel grid, int rowIndex,
EventObject e) {
// on notifie le médiateur en lui passant le numéro de ligne
getObservationMediateur().doubleClicListeObservation(rowIndex);
observationMediateur.doubleClicListeObservation(rowIndex);
}
});
368,11 → 368,8
}
}
private ObservationMediateur getObservationMediateur() {
return observationMediateur ;
}
 
 
/**
* Méthode héritée de l'interface rafraichissable
* @param nouvelleDonnees les nouvelles données
391,7 → 388,7
{
ListeObservation data = (ListeObservation) nouvelleDonnees ;
Object[][] observationData = new Object[data.size()][8];
Object[][] observationData = new Object[data.size()][7];
int i = 0 ;
if(data.size() == 0)
399,7 → 396,7
pageEncours = 0 ;
}
// on la parse et on récupère les informations quiç nous interessent
// on la parse et on récupère les informations qui nous interessent
for (Iterator it = data.keySet().iterator(); it.hasNext();)
{
411,6 → 408,7
observationData[i][3]= obs.getLieudit();
observationData[i][4]= obs.getDate();
observationData[i][5]= obs.getNumeroOrdre();
observationData[i][6]= obs.getNumeroNomenclaturalSaisi();
i++ ;
425,10 → 423,14
FieldDef defDateObservation = new StringFieldDef("date_observation");
FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
// Non affiches :
FieldDef defNumeroNomenclaturalSaisiObservation = new StringFieldDef("numeroNomenclaturalSaisi_observation");
// on associe le store
 
FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
defLieuObservation, defDateObservation, defOrdreObservation };
defLieuObservation, defDateObservation, defOrdreObservation, defNumeroNomenclaturalSaisiObservation };
RecordDef rd = new RecordDef(defTab);
465,6 → 467,7
// et on notifie de le mediateur du changement des valeurs
changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ;
masquerChargement();
observationMediateur.obtenirListeObservation();
}
476,6 → 479,8
// On affiche la dernière page
pageEncours = pageMax ;
masquerChargement();
 
observationMediateur.obtenirNombreObservation();
}
537,6 → 542,8
pageEncours = pageCourante ;
masquerChargement();
 
// On lance le chargerment des observations
observationMediateur.obtenirNombreObservation();
556,6 → 563,8
taillePage = nouvelleTaillePage ;
pageEncours = calculerPageCourante(nbElements) ;
 
masquerChargement();
 
// On lance le chargerment des observations
observationMediateur.obtenirNombreObservation();
/trunk/src/org/tela_botanica/client/vues/AutoCompleteAsyncTextBox.java
18,9 → 18,13
 
*/
 
 
// TODO : C
package org.tela_botanica.client.vues;
 
 
// TODO : Classe A supprimer ( reprendre le mecanisme du cache avant)
 
// TODO : traiter latence (augmenter en fonction rapidit� saisie + texte vide)
// TODO : traitement espace apres l'espece (%20)
// TODO : Utiliser Suggestbox et les Associating Data Transfer Objects (DTOs) with Suggestion Objects
/trunk/src/org/tela_botanica/client/vues/PanneauFiltresVues.java
19,7 → 19,6
/**
* Le médiateur associé
*/
@SuppressWarnings("unused")
private ImageMediateur iMediateur = null;
 
/**
/trunk/src/org/tela_botanica/client/vues/InformationRepartitionVue.java
New file
0,0 → 1,90
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.observation.ObservationMediateur;
 
import com.google.gwt.user.client.ui.Image;
import com.gwtext.client.widgets.Panel;
 
/**
* Un panneau affichant la repartition d'une plante
*
* @author David Delon
*
*/
public class InformationRepartitionVue extends Panel implements Rafraichissable {
 
/**
* Le médiateur associé
*/
private ObservationMediateur observationMediateur = null;
/**
* l'image à afficher
*/
private Image image = new Image();
/**
* Constructeur sans argument (privé car ne doit pas être utilisé)
*/
@SuppressWarnings("unused")
private InformationRepartitionVue() {
super();
}
 
/**
* Constructeur avec argument
* @param obs le médiateur à associer
*/
public InformationRepartitionVue(ObservationMediateur obs) {
this.observationMediateur = obs;
image.setPixelSize(150, 150);
add(image);
// on ajoute les listeners
ajouterListeners();
 
}
 
 
/**
* Affichage carte de repartition
*
*/
public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {
 
// si on recoit une String contenant une URL
if (nouvelleDonnees instanceof String) {
String urlImage=(String) nouvelleDonnees;
if (urlImage.length()==0) {
image.setUrl("");
}
else {
image.setUrl(urlImage);
}
}
}
 
/**
* Ajoute les listeners pour la gestions d'évènement
*/
public void ajouterListeners() {
}
 
}
/trunk/src/org/tela_botanica/client/vues/PanneauFiltresObservationVues.java
New file
0,0 → 1,112
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.observation.ObservationMediateur;
 
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.layout.VerticalLayout;
 
/**
* Panneau contenant les filtres qu'on peut appliquer aux images
*
* @author aurelien
*
*/
public class PanneauFiltresObservationVues extends Panel {
 
/**
* Le médiateur associé
*/
private ObservationMediateur observationMediateur = null;
 
/**
* L'arbre pour la recherche par mots clés
*/
private ArbreLocaliteObservationFiltreVue arbreLocaliteObservationFiltreVue = null;
/**
* Bouton de validation
*/
private Button valider = null;
 
/**
* Construcuteur sans argument (privé car on ne doit pas l'utiliser)
*/
@SuppressWarnings("unused")
private PanneauFiltresObservationVues() {
super();
}
 
/**
* Constructeur avec arguments
*
* @param im
* le médiateur à associer
*/
public PanneauFiltresObservationVues(ObservationMediateur obs) {
super("Rechercher des Observations");
observationMediateur = obs;
 
this.setCollapsible(true);
setLayout(new VerticalLayout());
 
arbreLocaliteObservationFiltreVue = new ArbreLocaliteObservationFiltreVue(obs);
add(arbreLocaliteObservationFiltreVue);
 
Panel panelValidation = new Panel();
valider = new Button("Rechercher");
panelValidation.add(valider);
panelValidation.setBorder(false);
add(panelValidation);
 
valider.addListener(new ButtonListenerAdapter() {
 
public void onClick(Button button, EventObject e) {
 
// iMediateur.obtenirPhotoGalerie(iMediateur.getGalerieImage());
 
}
 
});
}
 
/**
* Accesseur pour le filtre des mots clés
*
* @return le filtre des mots clés
*/
public ArbreLocaliteObservationFiltreVue getArbreLocaliteObservationFiltreVue() {
return arbreLocaliteObservationFiltreVue;
}
 
 
/**
* Renvoie un booléen indiquant si un des filtres a été modifié
*
* @return true sur un des filtres est modifié, false sinon
*/
public boolean renvoyerEtatFiltre() {
 
return (arbreLocaliteObservationFiltreVue.renvoyerEtatFiltre());
}
 
/**
* Renvoie un tableau à 2 niveaux contenant des paires "nom_de_filtre",
* "valeur"
*
* @return un tableau contenant les noms et les valeurs à filtrer
*/
public String[][] renvoyerValeursAFiltrer() {
String[][] filtres = { arbreLocaliteObservationFiltreVue.renvoyerValeursAFiltrer(),
};
return filtres;
}
 
}