Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2726 → Rev 2725

/trunk/src/org/tela_botanica/client/image/ImageModele.java
144,9 → 144,15
public ImageMediateur getIMediateur() {
return iMediateur;
}
public String[][] obtenirFiltresPourComptage() {
 
/**
* Appelle le DAO asynchrone pour obtenir la liste des images
*
* @param r
* le rafraichissable auxquel on enverra les données
*/
public void obtenirNombrePhotoGalerie(Rafraichissable r) {
 
String valeursFiltres[][] = getIMediateur().renvoyerFiltres();
 
int tailleFiltres = valeursFiltres.length;
161,41 → 167,7
for (int i = 0; i < valeursFiltres.length; i++) {
criteres[i] = valeursFiltres[i];
}
return criteres;
}
public String[][] obtenirFiltresPourDonnees() {
 
String valeursFiltres[][] = getIMediateur().renvoyerFiltres();
int tailleFiltres = valeursFiltres.length;
String[][] criteres2 = new String[tailleFiltres + 2][2];
String[] limite = { "limite", "" + taillePage };
String[] taillePage = { "numero_page", "" + pageEncours };
criteres2[0] = limite;
criteres2[1] = taillePage;
 
for (int i = 0; i < valeursFiltres.length; i++) {
criteres2[i + 2] = valeursFiltres[i];
}
return valeursFiltres;
}
 
/**
* Appelle le DAO asynchrone pour obtenir la liste des images
*
* @param r
* le rafraichissable auxquel on enverra les données
*/
public void obtenirNombrePhotoGalerie(Rafraichissable r) {
 
String[][] criteres = obtenirFiltresPourComptage();
 
// 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(this);
208,22 → 180,16
int tailleFiltres = valeursFiltres.length;
String[][] criteres2 = new String[tailleFiltres + 4][2];
String[][] criteres2 = new String[tailleFiltres + 2][2];
String[] tri = { "tri", "" + getIMediateur().getTri() };
String[] triDir = { "dir", "" + getIMediateur().getDirectionTri()};
String[] limite = { "limite", "" + taillePage };
String[] taillePage = { "numero_page", "" + pageEncours };
criteres2[0] = limite;
criteres2[1] = taillePage;
criteres2[2] = tri;
criteres2[3] = triDir;
 
for (int i = 0; i < valeursFiltres.length; i++) {
criteres2[i + 4] = valeursFiltres[i];
criteres2[i + 2] = valeursFiltres[i];
}
// et on crée un DAO auquel on les transmet et qui envoie une requete
448,7 → 414,7
// si l'on a reçu une liste d'images
if (nouvelleDonnees instanceof ListeImageCarnet) {
ListeImageCarnet data = (ListeImageCarnet) nouvelleDonnees;
Object[][] photoData = new Object[data.size()][14];
Object[][] photoData = new Object[data.size()][13];
int i = 0;
 
if (data.size() == 0) {
471,14 → 437,29
photoData[i][10] = im.getTailleImage()[1];
photoData[i][11] = im.getTailleImage()[0];
photoData[i][12] = im.getIdsObsAssociees();
photoData[i][13] = im.getIdsObsAssociees();
 
i++;
}
 
// creation du store qui les contient
FieldDef defNumImage = new IntegerFieldDef("num_image");
FieldDef defNomImage = new StringFieldDef("nom_original");
FieldDef defDatImage = new StringFieldDef("dat_image");
FieldDef defLieImage = new StringFieldDef("lie_image");
FieldDef defAppImage = new StringFieldDef("app_image");
FieldDef defUrlImageS = new StringFieldDef("url_image_S");
FieldDef defUrlImageM = new StringFieldDef("url_image_M");
FieldDef defUrlImage = new StringFieldDef("url_image");
FieldDef defNoteImage = new IntegerFieldDef("note_image");
FieldDef defIdImage = new IntegerFieldDef("id_image");
FieldDef defTailleX = new IntegerFieldDef("taille_x");
FieldDef defTailleY = new IntegerFieldDef("taille_y");
FieldDef defObsAssociees = new StringFieldDef("obs_associees");
FieldDef[] defTab = { defNumImage,defNomImage, defDatImage, defLieImage,
defAppImage, defUrlImageS, defUrlImageM, defUrlImage,
defNoteImage, defIdImage, defTailleX, defTailleY, defObsAssociees };
RecordDef rd = new RecordDef(defTab);
 
RecordDef rd = new RecordDef(ImageMediateur.getDefinitionsChampsGrilleImages());
 
final MemoryProxy dataProxy = new MemoryProxy(photoData);
final ArrayReader reader = new ArrayReader(rd);
 
489,6 → 470,9
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) {
926,11 → 910,8
 
public void obtenirMiniListeObservations(Rafraichissable r, String[] critere, int taillePage, int numeroPage) {
String[] tri = { "tri", "" + getIMediateur().getTriMiniListeObs() };
String[] triDir = { "tri_dir", "" + getIMediateur().getDirectionTriMiniListeObs()};
String[][] criteres = {{critere[0],critere[1]},{"limite",""+taillePage},{"numero_page",""+numeroPage}} ;
String[][] criteres = {{critere[0],critere[1]},{"limite",""+taillePage},{"numero_page",""+numeroPage}, tri, triDir} ;
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images
ListeObservationAsynchroneDAO loaDAO = new ListeObservationAsynchroneDAO(this);
loaDAO.obtenirListeObservation(r, iMediateur.getIdentifiant(), criteres);
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java
30,13 → 30,8
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.core.SortDir;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.data.Tree;
import com.gwtext.client.dd.DragData;
import com.gwtext.client.dd.DragSource;
597,7 → 592,8
}
 
public void obtenirPhotoGalerie() {
public void obtenirPhotoGalerie() {
obtenirPhotoGalerie(getGalerieImage());
}
 
611,16 → 607,6
masquerChargement();
getIModele().obtenirNombrePhotoGalerie(r);
}
/** envoie au modèle une demande de mise a jour
*
* @param r
* la vue demandeuse de mise a jour
*/
public void obtenirPhotoGalerieSansCalculerPages(Rafraichissable r) {
masquerChargement();
getIModele().obtenirPhotoGalerie(r);
}
 
/**
* demande au modèle les métadonnées associées a une image
1830,48 → 1816,5
obtenirMotsClesId(fnMc, ids[ids.length - 1]);
}
}
public String getTri() {
// centralise le tri suivant la vue active
// pour le moment seule la liste est triable
return listeImage.renvoyerTri();
}
public String getDirectionTri() {
// centralise la direction de tri suivant la vue active
return listeImage.renvoyerDirectionTri();
}
public static FieldDef[] getDefinitionsChampsGrilleImages() {
// creation du store
FieldDef defNumImage = new IntegerFieldDef("num_image");
FieldDef defNomImage = new StringFieldDef("nom_original");
FieldDef defDatImage = new StringFieldDef("dat_image");
FieldDef defLieImage = new StringFieldDef("lie_image");
FieldDef defAppImage = new StringFieldDef("app_image");
FieldDef defUrlImageS = new StringFieldDef("url_image_S");
FieldDef defUrlImageM = new StringFieldDef("url_image_M");
FieldDef defUrlImage = new StringFieldDef("url_image");
FieldDef defNoteImage = new StringFieldDef("note_image");
FieldDef defidImage = new StringFieldDef("id_image");
FieldDef defTailleX = new IntegerFieldDef("taille_x");
FieldDef defTailleY = new IntegerFieldDef("taille_y");
FieldDef defObsAssociees = new StringFieldDef("obs_associees");
FieldDef defTransmis = new StringFieldDef("transmis");
FieldDef[] defTab = { defNumImage, defNomImage, defDatImage, defLieImage,
defAppImage, defUrlImageS, defUrlImageM, defUrlImage,
defNoteImage, defidImage, defTailleX, defTailleY, defObsAssociees, defTransmis};
 
return defTab;
}
 
public String getTriMiniListeObs() {
return metadonneesIptcExif.getMiniListeObservation().renvoyerTri();
}
 
public String getDirectionTriMiniListeObs() {
return metadonneesIptcExif.getMiniListeObservation().renvoyerDirectionTri();
}
 
}
/trunk/src/org/tela_botanica/client/vues/image/ListeImageVue.java
1,19 → 1,13
package org.tela_botanica.client.vues.image;
 
import java.util.HashMap;
 
import org.tela_botanica.client.i18n.Msg;
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.ListePaginable;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.interfaces.VueListable;
import org.tela_botanica.client.modeles.objets.Ontologies;
import org.tela_botanica.client.util.Util;
import org.tela_botanica.client.vues.BarrePaginationVue;
 
import com.google.gwt.user.client.Timer;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.SortDir;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.Record;
33,7 → 27,6
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.Renderer;
import com.gwtext.client.widgets.grid.RowSelectionModel;
import com.gwtext.client.widgets.grid.event.GridHeaderListenerAdapter;
import com.gwtext.client.widgets.grid.event.GridRowListener;
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
 
124,12 → 117,6
*/
private boolean garderRatio = true;
private SortDir directionTri;
 
private String champTri;
private boolean triActif;
/**
* Constructeur sans arguments (privé car ne doit pas être utilisé)
*/
157,8 → 144,6
bt.setLabelElement(Msg.get("images"));
bt.setTaillePageParDefaut(50);
setBottomToolbar(bt);
directionTri = SortDir.ASC;
 
// on construit le modèle de colonnes
numImage = new ColumnConfig(Msg.get("numero"), "num_image", 30, true,
178,7 → 163,7
 
});
transmisImage = new ColumnConfig(" ", "transmis", 10, true, new Renderer() {
transmisImage = new ColumnConfig(" ", "obs_associees", 10, true, new Renderer() {
 
@Override
public String render(Object value, CellMetadata cellMetadata,
369,7 → 354,24
this.setAutoWidth(true);
this.setEnableColumnResize(true);
 
RecordDef rd = new RecordDef(ImageMediateur.getDefinitionsChampsGrilleImages());
// creation du store
FieldDef defNumImage = new IntegerFieldDef("num_image");
FieldDef defTransmisImage = new IntegerFieldDef("obs_associees");
FieldDef defNomImage = new StringFieldDef("nom_original");
FieldDef defDatImage = new StringFieldDef("dat_image");
FieldDef defLieImage = new StringFieldDef("lie_image");
FieldDef defAppImage = new StringFieldDef("app_image");
FieldDef defUrlImageS = new StringFieldDef("url_image_S");
FieldDef defUrlImageM = new StringFieldDef("url_image_M");
FieldDef defUrlImage = new StringFieldDef("url_image");
FieldDef defNoteImage = new StringFieldDef("note_image");
FieldDef defTailleX = new IntegerFieldDef("taille_x");
FieldDef defTailleY = new IntegerFieldDef("taille_y");
FieldDef defObsAssociees = new StringFieldDef("obs_associees");
FieldDef[] defTab = { defNumImage,defTransmisImage, defNomImage, defDatImage, defLieImage,
defAppImage, defUrlImageS, defUrlImageM, defUrlImage,
defNoteImage, defTailleX, defTailleY, defObsAssociees};
RecordDef rd = new RecordDef(defTab);
st = new Store(rd);
// on associe le store
this.setStore(st);
393,28 → 395,6
* Ajoute les listeners pour la gestion des évènements
*/
private void ajouterListeners() {
this.addGridHeaderListener(new GridHeaderListenerAdapter() {
@Override
public void onHeaderClick(GridPanel grid, int colIndex, EventObject e) {
triActif = true;
Timer t = new Timer() {
@Override
public void run() {
enregistrerEtatTri();
// Trier ne change pas le nombre de page, on peut donc se passer d'un appel
// au comptage (ce serait mieux si ces deux appels étaient combinés)
iMediateur.obtenirPhotoGalerieSansCalculerPages(ListeImageVue.this);
}
};
// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite
// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas)
// #mondeDeMerde
t.schedule(200);
}
});
this.addListener(new ContainerListenerAdapter() {
 
@Override
613,12 → 593,13
 
// si on reçoit un store
if (nouvelleDonnees instanceof Store) {
 
// on affecte celui-ci comme gestionnaire de données
st = (Store) nouvelleDonnees;
st.sort(champTri, directionTri);
st.load();
// et on reconfigure et rafraichit la vue
this.reconfigure(st, this.getColumnModel());
 
}
 
763,33 → 744,5
return associeesTranmises;
}
private void enregistrerEtatTri() {
if(triActif) {
this.directionTri = st.getSortState().getDirection();
this.champTri = st.getSortState().getField();
}
}
public String renvoyerTri() {
String tri = "ordre";
if(triActif) {
HashMap<String, String> corr = Ontologies.getCorrespondanceGrilleImageChampsTri();
if(corr.containsKey(champTri)) {
tri = corr.get(champTri);
}
}
return tri;
}
 
public String renvoyerDirectionTri() {
String triDir = "ASC";
try {
triDir = (triActif) ? directionTri.getDirection() : "ASC";
} catch (Exception e) {
triDir = "ASC";
}
return triDir;
}
}
/trunk/src/org/tela_botanica/client/vues/image/MiniListeObservationVue.java
1,6 → 1,5
package org.tela_botanica.client.vues.image;
 
import java.util.HashMap;
import java.util.Iterator;
 
import org.tela_botanica.client.i18n.Msg;
9,11 → 8,9
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.ListeObservation;
import org.tela_botanica.client.modeles.objets.Observation;
import org.tela_botanica.client.modeles.objets.Ontologies;
import org.tela_botanica.client.util.Util;
import org.tela_botanica.client.vues.MiniBarrePaginationVue;
 
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.SimpleStore;
34,7 → 31,6
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.Renderer;
import com.gwtext.client.widgets.grid.RowSelectionModel;
import com.gwtext.client.widgets.grid.event.GridHeaderListenerAdapter;
import com.gwtext.client.widgets.grid.event.GridListenerAdapter;
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
import com.gwtext.client.widgets.menu.BaseItem;
44,7 → 40,6
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.core.SortDir;
import com.gwtext.client.dd.DragData;
 
/**
98,12 → 93,6
*/
private int pageMax = 1 ;
private SortDir directionTri;
 
private String champTri;
private boolean triActif;
/**
* Constructeur avec arguments
* @param im le médiateur à associer à la vue
112,8 → 101,6
{
iMediateur = im ;
directionTri = SortDir.ASC;
this.setId("x-view-mini-obs") ;
// on construit le modèle de colonnes
161,7 → 148,7
} ;
// on crée un store simple contenant un petit set de données et deux colonnes
store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, getObs());
store = new SimpleStore(new String[]{"transmis","plante","date","lieu","ordre_obs","id_obs"}, getObs());
ColumnConfig[] columns = {
new ColumnConfig("", "transmis", 30, true, new Renderer() {
 
179,10 → 166,10
}
}),
new ColumnConfig(Msg.get("taxon"), "nomSaisi_observation", 145, true, colRend),
new ColumnConfig(Msg.get("date"), "date_observation", 68, true, dateRend),
new ColumnConfig(Msg.get("lieu"), "lieu_observation", 145, true, colRend),
new ColumnConfig(Msg.get("numero"), "ordre_observation", 50, true, colRend), } ;
new ColumnConfig(Msg.get("taxon"), "plante", 145, true, colRend),
new ColumnConfig(Msg.get("date"), "date", 68, true, dateRend),
new ColumnConfig(Msg.get("lieu"), "lieu", 145, true, colRend),
new ColumnConfig(Msg.get("numero"), "ordre_obs", 50, true, colRend), } ;
ColumnModel columnModel = new ColumnModel(columns);
222,27 → 209,6
setTopToolbar(bt) ;
this.addGridHeaderListener(new GridHeaderListenerAdapter() {
@Override
public void onHeaderClick(GridPanel grid, int colIndex, EventObject e) {
triActif = true;
Timer t = new Timer() {
@Override
public void run() {
enregistrerEtatTri();
// Trier ne change pas le nombre de pages, on peut donc se passer d'un appel
// au comptage (ce serait mieux si ces deux appels étaient combinés)
obtenirMiniListeObservations();
}
};
// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite
// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas)
// #mondeDeMerde
t.schedule(200);
}
});
selecteurMode.addListener(new ComboBoxListenerAdapter() {
 
@Override
265,7 → 231,7
@Override
public void onContextMenu(EventObject e) {
// si pas de selection, on selectionne au moins la ligne sur laquelle on a fait le clic
// si pas de selection, on selection au moins la ligne sur laquelle on a fait le clic
if(getSelectionModel().getSelections().length <= 0) {
int index = getView().findRowIndex(e);
Record rddrop = getStore().getRecordAt(index) ;
375,8 → 341,7
i++ ;
}
store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, listeObs);
store.sort(champTri, directionTri);
store = new SimpleStore(new String[]{"transmis","plante","date","lieu","ordre_obs","id_obs"}, listeObs);
store.load();
this.reconfigure(store, colModel) ;
}
688,33 → 653,4
return false;
}
}
private void enregistrerEtatTri() {
if(triActif) {
this.directionTri = store.getSortState().getDirection();
this.champTri = store.getSortState().getField();
}
}
 
public String renvoyerTri() {
String tri = "ordre";
if(triActif) {
HashMap<String, String> corr = Ontologies.getCorrespondanceGrilleObservationChampsTri();
if(corr.containsKey(champTri)) {
tri = corr.get(champTri);
}
}
return tri;
}
 
public String renvoyerDirectionTri() {
String triDir = "ASC";
try {
triDir = (triActif) ? directionTri.getDirection() : "ASC";
} catch (Exception e) {
triDir = "ASC";
}
return triDir;
}
}
/trunk/src/org/tela_botanica/client/vues/observation/ListeObservationVue.java
345,9 → 345,6
observationMediateur.obtenirListeObservation();
}
};
// Le changement de tri n'est pas immédiat et si on recharge le liste tout de suite
// on a l'ancien tri et pas le nouveau (200 millisecondes suffisent et ne se voient pas)
// #mondeDeMerde
t.schedule(200);
}
});
/trunk/src/org/tela_botanica/client/modeles/objets/Ontologies.java
6,12 → 6,8
 
import org.tela_botanica.client.i18n.Msg;
 
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
 
public class Ontologies {
149,18 → 145,4
return correspondances;
}
public static HashMap<String, String> getCorrespondanceGrilleImageChampsTri() {
HashMap<String, String> correspondances = new HashMap<String, String>();
correspondances.put("num_image", "ordre");
correspondances.put("transmis", "transmission");
correspondances.put("obs_associees", "nom_sel");
correspondances.put("dat_image", "date_prise_de_vue");
correspondances.put("lie_image", "zone_geo");
correspondances.put("app_image", "appareil_fabriquant");
correspondances.put("note_image", "note_qualite");
correspondances.put("nom_original", "nom_original");
 
return correspondances;
}
}