An error occurred while loading the file. Please try again.
-
Dorchies David authored
- Log via INRA SSO - OK - Browse the temps-activite website to pointage page - OK - Post form for one date - not working yet Refs #1
5f16d33f
package calcul;
import java.util.Calendar;
import java.util.Date;
import db.SensorMeasures;
public class AverageRainfall {
/** Nombre maximal de valeurs de la hauteur de pluie. */
public static final int MAX_SIZE = 56;
/** Liste des mesures de la pluie. */
protected double[] values;
/**
* Constructeur
*/
public AverageRainfall() {
// 1. Initialisation des attributs
this.values = new double[MAX_SIZE];
// 2. Initialisation de la liste de valeurs
for (int i = 0; i < MAX_SIZE; i++) {
values[i] = -1.;
}
}
/**
* Réinitialisation de la liste de valeurs
*/
public void clear() {
// 1. Création de la liste de valeurs
this.values = new double[MAX_SIZE];
// 2. Initialisation de la liste de valeurs
for (int i = 0; i < MAX_SIZE; i++) {
values[i] = -1.;
}
}
/**
* Enregistrement des mesures de la pluviométrie
*
* @param aMeasures
* Liste des mesures sur la pluie
* @param aFrom
* Date de début de mesure
*/
public void setMeasures(SensorMeasures aMeasures, Date aFrom) {
// 1. Création itérateur de date
Calendar idate = Calendar.getInstance();
// 2. Initialisation itérateur à la date de la mesure
idate.setTime(aFrom);
for (int i = 0; i < MAX_SIZE; i++) {
if (aMeasures.hasMeasure(idate.getTime())) {
// 1. Enregistrement valeur de la mesure
this.values[i] = aMeasures.getMeasure(idate.getTime());
} else {
// 1. Enregistrement valeur indeterminé
this.values[i] = -1.;
}
// 1. Positionnement sur le jour précédent
idate.add(Calendar.DATE, -1);
}
}
/**
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
* Enregistrement d'une liste de mesures de la pluviométrie
*
* @param aMeasures
* Liste des mesures sur la pluie
* @param aFrom
* Date de référence
* @param aDayCount
* Nombre de jours
*/
public void addMeasures(SensorMeasures aMeasures, Date aFrom, int dayCount) {
// 1. Création itérateur de date
Calendar idate = Calendar.getInstance();
// 2. Initialisation itérateur sur les dates
idate.setTime(aFrom);
// 3. Création nouvelle liste de valeurs
double newValues[] = new double[MAX_SIZE];
for (int i = 0; i < MAX_SIZE; i++) {
if ( i < dayCount) {
if (aMeasures.hasMeasure(idate.getTime())) {
newValues[i] = aMeasures.getMeasure(idate.getTime());
} else {
newValues[i] = -1;
}
// 1. Positionnement sur le jour suivant
idate.add(Calendar.DATE, -1);
} else {
// 1. Récupération ancienne valeurs
newValues[i] = values[i-dayCount];
}
}
// 4. Actualisation liste des valeurs
this.values = newValues;
}
/**
* Calcul valeur moyenne des mesures de la pluie
*
* @param aAnteriotité
* Antériorité (Jours) de début de calcul de la moyenne
* @param aDuree
* Durée (Jours) de calcul de la moyenne
*/
public double mean(int aAnteriorite, int aDuree) {
// 1. Initialisation cumul des mesures de pluie sur la période
double cumul = 0.;
// 2. Initialisation nombre de mesures effectives
int nbMeasures = 0;
for (int i = aAnteriorite - aDuree; i < aAnteriorite; i++) {
if (values[i] >= 0.) {
// 1. Actualisation cumul des mesures
cumul += values[i];
// 2. Actualisation nombre de mesures effectives
nbMeasures++;
}
}
if (nbMeasures < 0.7 * aDuree) {
// 1. Nombre insuffisant de mesures
throw new IllegalArgumentException();
}
return cumul / nbMeasures;
141142143144145146147148149150151152153154155156157158159
}
/**
* Ajout d'une mesure
*
* @param aValue
* Valeur de la hauteur de pluie
*/
protected void add(double aValue) {
// 1. Décalage des valeurs
for (int i = MAX_SIZE - 1; i >= 1; i--) {
values[i] = values[i - 1];
}
// 2. Enregistrement de la nouvelle valeeur
values[0] = aValue;
}
}