Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2725 → Rev 2726

/trunk/src/org/tela_botanica/client/modeles/objets/Ontologies.java
6,8 → 6,12
 
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 {
145,4 → 149,18
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;
}
}
/trunk/src/org/tela_botanica/client/image/ImageMediateur.java
30,8 → 30,13
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;
592,8 → 597,7
}
 
public void obtenirPhotoGalerie() {
public void obtenirPhotoGalerie() {
obtenirPhotoGalerie(getGalerieImage());
}
 
607,6 → 611,16
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
1816,5 → 1830,48
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/image/ImageModele.java
144,15 → 144,9
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;
167,7 → 161,41
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);
180,16 → 208,22
int tailleFiltres = valeursFiltres.length;
String[][] criteres2 = new String[tailleFiltres + 2][2];
String[][] criteres2 = new String[tailleFiltres + 4][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 + 2] = valeursFiltres[i];
criteres2[i + 4] = valeursFiltres[i];
}
// et on crée un DAO auquel on les transmet et qui envoie une requete
414,7 → 448,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()][13];
Object[][] photoData = new Object[data.size()][14];
int i = 0;
 
if (data.size() == 0) {
437,29 → 471,14
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);
 
470,9 → 489,6
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) {
910,8 → 926,11
 
public void obtenirMiniListeObservations(Rafraichissable r, String[] critere, int taillePage, int numeroPage) {
String[][] criteres = {{critere[0],critere[1]},{"limite",""+taillePage},{"numero_page",""+numeroPage}} ;
String[] tri = { "tri", "" + getIMediateur().getTriMiniListeObs() };
String[] triDir = { "tri_dir", "" + getIMediateur().getDirectionTriMiniListeObs()};
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/vues/observation/ListeObservationVue.java
345,6 → 345,9
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/vues/image/ListeImageVue.java
1,13 → 1,19
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;
27,6 → 33,7
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;
 
117,6 → 124,12
*/
private boolean garderRatio = true;
private SortDir directionTri;
 
private String champTri;
private boolean triActif;
/**
* Constructeur sans arguments (privé car ne doit pas être utilisé)
*/
144,6 → 157,8
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,
163,7 → 178,7
 
});
transmisImage = new ColumnConfig(" ", "obs_associees", 10, true, new Renderer() {
transmisImage = new ColumnConfig(" ", "transmis", 10, true, new Renderer() {
 
@Override
public String render(Object value, CellMetadata cellMetadata,
354,24 → 369,7
this.setAutoWidth(true);
this.setEnableColumnResize(true);
 
// 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);
RecordDef rd = new RecordDef(ImageMediateur.getDefinitionsChampsGrilleImages());
st = new Store(rd);
// on associe le store
this.setStore(st);
395,6 → 393,28
* 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
593,13 → 613,12
 
// 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());
 
}
 
744,5 → 763,33
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,5 → 1,6
package org.tela_botanica.client.vues.image;
 
import java.util.HashMap;
import java.util.Iterator;
 
import org.tela_botanica.client.i18n.Msg;
8,9 → 9,11
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;
31,6 → 34,7
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;
40,6 → 44,7
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;
 
/**
93,6 → 98,12
*/
private int pageMax = 1 ;
private SortDir directionTri;
 
private String champTri;
private boolean triActif;
/**
* Constructeur avec arguments
* @param im le médiateur à associer à la vue
101,6 → 112,8
{
iMediateur = im ;
directionTri = SortDir.ASC;
this.setId("x-view-mini-obs") ;
// on construit le modèle de colonnes
148,7 → 161,7
} ;
// on crée un store simple contenant un petit set de données et deux colonnes
store = new SimpleStore(new String[]{"transmis","plante","date","lieu","ordre_obs","id_obs"}, getObs());
store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, getObs());
ColumnConfig[] columns = {
new ColumnConfig("", "transmis", 30, true, new Renderer() {
 
166,10 → 179,10
}
}),
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), } ;
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), } ;
ColumnModel columnModel = new ColumnModel(columns);
209,6 → 222,27
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
231,7 → 265,7
@Override
public void onContextMenu(EventObject e) {
// si pas de selection, on selection au moins la ligne sur laquelle on a fait le clic
// si pas de selection, on selectionne 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) ;
341,7 → 375,8
i++ ;
}
store = new SimpleStore(new String[]{"transmis","plante","date","lieu","ordre_obs","id_obs"}, listeObs);
store = new SimpleStore(new String[]{"transmis","nomSaisi_observation","date_observation","lieu_observation","ordre_observation","id_obs"}, listeObs);
store.sort(champTri, directionTri);
store.load();
this.reconfigure(store, colModel) ;
}
653,4 → 688,33
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;
}
}