1,15 → 1,21 |
package org.tela_botanica.client.vues; |
|
|
import java.util.Iterator; |
|
import org.tela_botanica.client.modeles.ListeObservation; |
import org.tela_botanica.client.modeles.Observation; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.interfaces.VueListable; |
import org.tela_botanica.client.vues.BarrePaginationObservationVue; |
import org.tela_botanica.client.vues.BarrePaginationListeObservationVue; |
|
import com.gwtext.client.core.EventObject; |
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.MemoryProxy; |
import com.gwtext.client.data.Record; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
21,9 → 27,7 |
import com.gwtext.client.widgets.grid.ColumnModel; |
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.GridRowListenerAdapter; |
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter; |
|
/** |
* Liste d'observation composée de ligne d'observation |
78,9 → 82,30 |
/** |
* Barre de pagination |
*/ |
private BarrePaginationObservationVue bt = null ; |
private BarrePaginationListeObservationVue bt = null ; |
|
|
|
/** |
* Numéro de page en cours |
*/ |
private int pageEncours = 0 ; |
/** |
* Nombre de pages totales |
*/ |
private int pageMax = 1 ; |
/** |
* Taille de page (par défaut 20) |
*/ |
private int taillePage = 20 ; |
/** |
* Nombre d'éléments total correspondant à la requete |
*/ |
private int nbElements = 0 ; |
|
|
|
/** |
* Constructeur sans arguments (privé car ne doit pas être utilisé) |
*/ |
private ListeObservationVue() |
100,7 → 125,7 |
setTitle("Observations"); |
|
// on place la barre de pagination |
bt = new BarrePaginationObservationVue(observationMediateur); |
bt = new BarrePaginationListeObservationVue(this); |
this.setBottomToolbar(bt) ; |
|
// on construit le modèle de colonnes |
159,6 → 184,11 |
this.setAutoScroll(true); |
this.setEnableColumnResize(true); |
|
//temp dd viewport desactive ajout de ces 2 lignes |
this.setAutoWidth(true); |
this.setAutoHeight(true) ; |
// temp |
|
// creation du store |
FieldDef defEtatObservation = new StringFieldDef("etat_observation"); |
FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation"); |
282,32 → 312,7 |
return id_selection; |
} |
|
/** |
* Méthode héritée de l'interface rafraichissable |
* @param nouvelleDonnees les nouvelles données |
* @param repandreRafraichissement le booleen de notification du rafraichissement |
*/ |
|
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRafraichissement) { |
|
// si on reçoit un store |
if (nouvelleDonnees instanceof Store) { |
|
|
// on affecte celui-ci comme gestionnaire de données |
st = (Store) nouvelleDonnees; |
st.load(); |
// et on reconfigure et rafraichit la vue |
this.reconfigure(st, this.getColumnModel()); |
|
demasquerChargement(); |
|
|
} |
|
} |
|
|
/** |
* Sélectionne des enregistrements donné |
325,7 → 330,7 |
* @return la toolbar de pagination |
*/ |
|
public BarrePaginationObservationVue getToolBarVue() |
public BarrePaginationListeObservationVue getToolBarVue() |
{ |
return bt ; |
} |
367,5 → 372,203 |
return observationMediateur ; |
} |
|
/** |
* Méthode héritée de l'interface rafraichissable |
* @param nouvelleDonnees les nouvelles données |
* @param repandreRafraichissement le booleen de notification du rafraichissement |
*/ |
|
|
|
public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) { |
|
|
|
|
// si l'on a reçu une liste d'observation |
if(nouvelleDonnees instanceof ListeObservation) |
{ |
|
ListeObservation data = (ListeObservation) nouvelleDonnees ; |
Object[][] observationData = new Object[data.size()][8]; |
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();) |
{ |
|
Observation obs=(Observation) data.get(it.next()); |
|
observationData[i][0]= obs.getTransmis(); |
observationData[i][1]= obs.getNomSaisi(); |
observationData[i][2]= obs.getNomRetenu(); |
observationData[i][3]= obs.getLieudit(); |
observationData[i][4]= obs.getDate(); |
observationData[i][5]= obs.getNumeroOrdre(); |
|
|
i++ ; |
} |
|
// creation du store qui les contient |
|
FieldDef defEtatObservation = new StringFieldDef("etat_observation"); |
FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation"); |
FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation"); |
FieldDef defLieuObservation = new StringFieldDef("lieu_observation"); |
FieldDef defDateObservation = new StringFieldDef("date_observation"); |
FieldDef defOrdreObservation = new StringFieldDef("ordre_observation"); |
|
// on associe le store |
|
FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation, |
defLieuObservation, defDateObservation, defOrdreObservation }; |
|
RecordDef rd = new RecordDef(defTab); |
|
final MemoryProxy dataProxy = new MemoryProxy(observationData); |
final ArrayReader reader = new ArrayReader(rd); |
|
final Store observationStore = new Store(dataProxy, reader); |
|
|
st = observationStore ; |
st.load() ; |
|
|
// et on reconfigure et rafraichit la vue |
this.reconfigure(st, this.getColumnModel()); |
|
demasquerChargement(); |
|
|
} |
|
|
// Si on reçoit un tableau d'entiers |
// c'est un tableau d'un seul entier qui est le nombre d'observation 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 |
observationMediateur.changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ; |
|
observationMediateur.obtenirListeObservation(); |
} |
|
|
// si l'on a reçu une Observation, qui vient d'être cree on lance un raffraichissement |
|
if(nouvelleDonnees instanceof Observation) { |
|
observationMediateur.obtenirNombreObservation(); |
|
} |
} |
|
|
/** |
* 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 Math.abs(nPageInt.intValue()) ; |
} |
|
|
/** |
* 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) { |
|
|
|
pageEncours = pageCourante ; |
|
// On lance le chargerment des observations |
observationMediateur.obtenirNombreObservation(); |
|
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) |
{ |
|
taillePage = nouvelleTaillePage ; |
pageEncours = calculerPageCourante(nbElements) ; |
|
// On lance le chargerment des observations |
observationMediateur.obtenirNombreObservation(); |
|
|
// et on met à jour la taille de page dans les barres d'outils |
getToolBarVue().selectionnerTaillePage(nouvelleTaillePage); |
|
|
} |
|
|
|
public int getTaillePage() { |
|
return taillePage; |
} |
|
public int getPageEncours() { |
|
return pageEncours; |
} |
|
|
} |