source: ether_megapoli/trunk/service/implementation/com/medias/integration/prevalidation/PreValidationNASAAMES1001.java @ 488

Last change on this file since 488 was 488, checked in by vmipsl, 12 years ago

BO insertion données _ ajout code medias
clean

File size: 8.7 KB
Line 
1/**
2 * Created on 16 Jan. 2007
3 * @author
4 */
5
6package com.medias.integration.prevalidation;
7
8import com.medias.Constantes;
9import com.medias.DateTime;
10import com.medias.EcritureLog;
11import com.medias.database.objects.Capteur;
12import com.medias.database.objects.Parametre;
13import com.medias.integration.lecture_ecriture.LectureCapteurs;
14import com.medias.integration.lecture_ecriture.LectureParametres;
15import com.medias.integration.lecture_ecriture.LectureUnites;
16import com.medias.integration.vues.ParametreModele;
17
18import java.io.BufferedReader;
19import java.io.File;
20import java.io.FileInputStream;
21import java.io.IOException;
22import java.io.InputStreamReader;
23import java.util.ArrayList;
24import java.util.Date;
25
26/**
27 * Prévalidation d'un jeu ayant des données de type NASA-AMES 1001
28 *
29 */
30
31public class PreValidationNASAAMES1001 extends PreValidation
32{
33        public PreValidationNASAAMES1001(File fichier) {
34                super(fichier);
35        }
36
37        /**
38         * Méthode de prévalidation permmettent de distinguer l'entéte et les données d'un fichier NASA-AMES 1001
39         * NB: Le 1er nombre indiqué sur la 1ére ligne indique la ligne é laquelle commence la série de données
40         * @return
41         */
42       
43        public void lireFichier(LectureParametres lectureParametres, LectureUnites lectureUnites, LectureCapteurs lectureCapteurs
44                        , ArrayList<Parametre> parametres, ArrayList<Capteur> capteurs) {
45                try {
46                        //**************************************************************************************
47                        // On récupére le contenu du fichier pour le lire.
48                        //****************************************************************************************
49                        FileInputStream fis = new FileInputStream(fichier);
50                        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
51                        BufferedReader buf = new BufferedReader(isr);//new FileReader(fichier));
52                        boolean isEntete = true;
53                        // Lecture du fichier ligne aprés ligne
54                        String ligne = buf.readLine();
55                        int nbLignesEntete = 0;
56                        if (ligne != null) {
57                                nbLignesEntete = Integer.parseInt(ligne.substring(0,ligne.indexOf(" ")));
58                        }
59                        while (ligne != null) {
60                                if (isEntete == false) {
61                                        mesures.add(ligne);
62                                } else {
63                                        entete.add(ligne);
64                                }
65                                // Si le décompte des lignes d'entéte est terminé, on arrive aux lignes de données
66                                if (nbLignesEntete == 1) {
67                                        isEntete = false;
68                                }
69                                ligne = buf.readLine();
70                                nbLignesEntete--;
71                        }
72                        // Récupération des informations de l'entéte
73                        // Dates de début et de fin
74                        String dates = entete.get(6).trim();
75                        Date dateDeb = DateTime.stringToDate( dates.substring( 0, 10 ).trim(), "yyyy MM dd" );
76                        Date dateFin = DateTime.stringToDate(dates.substring(dates.length()-10).trim(), "yyyy MM dd");
77                        //System.out.println("dates="+dates+", deb="+dateDeb+", fin="+dateFin);
78                        // Nom du paramétre de la 1ére colonne (variable temporelle)
79                        String nomParamInd = entete.get(8).trim();
80                        String unitInd = nomParamInd.substring(nomParamInd.indexOf("(")+1,nomParamInd.indexOf(")")).trim();
81                        // Date é partir de laquelle démarre la variable temporelle
82                        Date dateSince = null;
83                        String typeTime, formatTime;
84                        if (nomParamInd.indexOf("since ") != -1) {
85                                String dateSinceStr = unitInd.substring(unitInd.indexOf("since ")+6).trim();
86                                dateSinceStr = dateSinceStr.replaceAll("\\+", "GMT\\+");
87                                dateSince = DateTime.stringToDate(dateSinceStr, Constantes.formatDateDefault);
88                                if (unitInd.toLowerCase().startsWith("hours")) {
89                                        typeTime = "HoursSince";
90                                } else if (unitInd.toLowerCase().startsWith("seconds")) {
91                                        typeTime = "SecondsSince";
92                                } else if (unitInd.toLowerCase().startsWith("year")) {
93                                        typeTime = "YearsSince";
94                                } else {
95                                        typeTime = "DaysSince";
96                                }
97                                formatTime = null;
98                        } else {
99                                formatTime = unitInd;
100                                if (nomParamInd.startsWith("Year")) {
101                                        typeTime = "Year";
102                                } else {
103                                        typeTime = "Date";
104                                }                               
105                        }
106                        // Nb de colonnes de données = nb de variables primaires + 1 (variable temporelle)
107                        nbParams = Integer.parseInt(entete.get(9).trim()) + 1;
108                        // Coefficients
109                        String[] coefficients = entete.get(10).trim().split(" ");
110                        ArrayList<String> coefs = new ArrayList<String>();
111                        for (String co : coefficients) {
112                                if (!co.equals("")) coefs.add(co.trim());
113                        }
114                        // Valeurs absentes
115                        String[] valAbsentes = entete.get(11).trim().split(" ");
116                        ArrayList<String> valAbs = new ArrayList<String>();
117                        for (String va : valAbsentes) {
118                                if (!va.equals("")) valAbs.add(va.trim());
119                        }
120                        // Infos supplémentaires (pour trouver les capteurs)
121                        infoSup = new ArrayList<String>();
122                        infoSup.add(entete.get(3));
123                        int nbLignesSup = Integer.parseInt(entete.get(11+nbParams).trim());
124                        for (int numSup = 0; numSup < nbLignesSup; numSup++) {
125                                infoSup.add(entete.get(12+nbParams+numSup));
126                        }
127                        // On recherche les capteurs apparaissant dans les infos supplémentaires du fichier
128                        ArrayList<Integer> indicesCaptInFile = findIndicesCaptInFile(lectureCapteurs,capteurs);
129                        // Infos sur les paramétres
130                        infoParams = new ArrayList<ParametreModele>();
131                        ParametreModele infoParam = new ParametreModele();
132                        infoParam.setNom(nomParamInd);
133                        infoParam.setDateDeb(dateDeb);
134                        infoParam.setDateFin(dateFin);
135                        infoParam.setDateSince(dateSince);
136                        infoParam.setFonction(Constantes.nomFonctionDate);
137                        infoParam.setType(typeTime);
138                        infoParam.setFormat(formatTime);
139                        infoParams.add(infoParam);
140                        String nomParam, nomUnite, codeParam;
141                        String[] unite;
142                        int indiceParam, indiceCapt;
143                        for (int numParam = 0; numParam < nbParams - 1; numParam++) {
144                                infoParam = new ParametreModele();
145                                nomParam = entete.get(12+numParam).trim();
146                                nomUnite = nomParam.substring(nomParam.indexOf("(")+1,nomParam.indexOf(")")).trim();
147                                nomParam = nomParam.substring(0,nomParam.indexOf("(")).trim();
148                                infoParam.setNom(nomParam);
149                                infoParam.setValAbsente(valAbs.get(numParam));
150                                infoParam.setCoef(coefs.get(numParam));
151                                unite = findUnite(nomUnite, lectureUnites);
152                                infoParam.setNomUnite(unite[0]);
153                                infoParam.setType(unite[1]);
154                                if (nomParam.toLowerCase().equals(Constantes.nomParametreLatitude) || nomParam.toLowerCase().equals(Constantes.nomParametreLongitude)
155                                                || nomParam.toLowerCase().equals(Constantes.nomParametreAltitude) || nomParam.toLowerCase().equals(Constantes.nomParametreHauteurSol)) {
156                                        infoParam.setFonction(Constantes.nomFonctionInsererLoc);
157                                } else if (nomParam.startsWith("time") || nomParam.startsWith("end_time") || nomParam.startsWith("event_marker")
158                                                || nomParam.startsWith("number of DMA") || nomParam.startsWith("numflag") || nomParam.startsWith("platform")) {
159                                        infoParam.setFonction(Constantes.nomFonctionNone);
160                                } else if (nomParam.startsWith("Month") || nomParam.startsWith("Day") 
161                                                || nomParam.startsWith("Hour") || nomParam.startsWith("Minute") || nomParam.startsWith("Second")) {
162                                        infoParam.setDateDeb(dateDeb);
163                                        infoParam.setDateFin(dateFin);
164                                        infoParam.setDateSince(dateSince);
165                                        infoParam.setFonction(Constantes.nomFonctionDate);
166                                        infoParam.setFormat(nomUnite);
167                                        infoParam.setType(nomParam);
168                                } else {
169                                        infoParam.setFonction(Constantes.nomFonctionInsererVal);
170                                        // Nom des paramétres correspondant aux variables primaires
171                                        indiceParam = findIndiceParam(nomParam,lectureParametres,parametres);
172                                        infoParam.setIndiceParam(indiceParam);
173                                        if (indiceParam == -1) {
174                                                codeParam = "???";
175                                                EcritureLog.ecrire("\nErreur : le paramétre '"+nomParam+"' n'a pas été trouvé","err");
176                                        } else {
177                                                codeParam = parametres.get(indiceParam).getParametreCode();
178                                                infoParam.setDelta(parametres.get(indiceParam).getDelta());
179                                                infoParam.setLod(parametres.get(indiceParam).getLod());
180                                        }
181                                        indiceCapt = findIndiceCapt(codeParam,indicesCaptInFile,capteurs);
182                                        infoParam.setIndiceCapt(indiceCapt);
183                                }
184                                infoParams.add(infoParam);
185                        }
186//                      System.out.println("\n\ndate="+DateTime.dateToString(dateDeb,"dd/MM/yyyy")+" to "+DateTime.dateToString(dateFin,"dd/MM/yyyy")+" since "+DateTime.dateToString(dateSince,"dd/MM/yyyy HH:mm:ss")+"\n");
187//                      System.out.println("\n\nligne entete 1="+entete.get(0));
188//                      System.out.println("ligne entete 2="+entete.get(1));
189//                      System.out.println("ligne entete 3="+entete.get(2));
190//                      System.out.println("ligne entete avder="+entete.get(entete.size()-2));
191//                      System.out.println("ligne entete der="+entete.get(entete.size()-1));
192//                      System.out.println("\nligne data 1="+mesures.get(0));
193//                      System.out.println("ligne data 2="+mesures.get(1));
194//                      System.out.println("ligne data 3="+mesures.get(2));
195//                      System.out.println("ligne data avder="+mesures.get(mesures.size()-2));
196//                      System.out.println("ligne data der="+mesures.get(mesures.size()-1)+"\n");
197                } catch (IOException e) {
198                        System.out.println(e.getMessage()+ "\nErreur dans la lecture du fichier "+ fichier.getName() + " !");
199                }
200        }
201}
Note: See TracBrowser for help on using the repository browser.