10,6 → 10,7 |
import org.tela_botanica.client.vues.FormulaireSaisieObservationVue; |
import org.tela_botanica.client.vues.ListeObservationVue; |
|
import com.google.gwt.user.client.Window; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
26,7 → 27,7 |
* @author aurelien |
* |
*/ |
public class ObservationMediateur implements Rafraichissable { |
public class ObservationMediateur { |
|
/** |
* booleen qui verifie l'unicite de l'instance (donc static) |
86,25 → 87,9 |
* booleen explicitant s'il y a une selection en cours |
*/ |
private boolean selection = false ; |
|
|
/** |
* 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 ; |
|
|
/** |
* Le store contenant les données à afficher, que le modèle transmet au médiateur quand il le demande |
*/ |
209,7 → 194,7 |
|
|
listeObservation.masquerChargement(); |
observationModele.obtenirNombreObservation(this) ; |
observationModele.obtenirNombreObservation(listeObservation) ; |
|
} |
|
221,8 → 206,9 |
public void obtenirListeObservation() { |
|
|
observationModele.obtenirListeObservation(this, taillePage, pageEncours) ; |
|
observationModele.obtenirListeObservation(listeObservation,listeObservation.getTaillePage(),listeObservation.getPageEncours()) ; |
|
|
} |
|
/** |
252,97 → 238,8 |
|
|
|
// FIXME TODO : plutot dans la listevu non ? |
|
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() ; |
|
// par défaut le store est trié sur l'ordre d'observations |
st.sort("ordre_observation") ; |
|
|
// si on doit répandre les données, on notifie le médiateur qui les distribuera à son tour |
if(repandreRafraichissement) |
{ |
listeObservation.rafraichir(st, false) ; |
} |
|
} |
|
|
// 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 |
changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ; |
|
obtenirListeObservation(); |
} |
} |
|
|
/** |
* Met à jour les barre d'outils avec des nouvelles valeurs |
* @param pageMax le nombre de pages |
359,90 → 256,9 |
} |
|
|
|
/** |
* 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 |
obtenirNombreObservation(); |
|
listeObservation.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 |
obtenirNombreObservation(); |
|
|
// et on met à jour la taille de page dans les barres d'outils |
listeObservation.getToolBarVue().selectionnerTaillePage(nouvelleTaillePage); |
|
|
} |
|
|
/** |
* |
* Lance un appel de recherche d'une liste de commune correspondant aux criteres de selectionne |
* @param r : la vue demandeuse de donnee |
478,9 → 294,9 |
* @param critere : les criteres de selection |
*/ |
|
public void ajouterObservation(Rafraichissable r, Observation obs) { |
public void ajouterObservation(Observation obs) { |
|
observationModele.ajouterObservation(r, obs) ; |
// observationModele.ajouterObservation(this, obs) ; |
|
} |
|