1 | /** |
---|
2 | * Created on 16 Jan. 2007 |
---|
3 | * @author |
---|
4 | */ |
---|
5 | |
---|
6 | package integration.prevalidation; |
---|
7 | |
---|
8 | import integration.hibernate.Capteur; |
---|
9 | import integration.hibernate.Parametre; |
---|
10 | import integration.lecture_ecriture.EcritureLog; |
---|
11 | import integration.lecture_ecriture.LectureCapteurs; |
---|
12 | import integration.lecture_ecriture.LectureParametres; |
---|
13 | import integration.lecture_ecriture.LectureUnites; |
---|
14 | import integration.utils.Constantes; |
---|
15 | import integration.utils.DateTime; |
---|
16 | import integration.vues.ParametreModele; |
---|
17 | |
---|
18 | import java.io.BufferedReader; |
---|
19 | import java.io.File; |
---|
20 | import java.io.FileInputStream; |
---|
21 | import java.io.IOException; |
---|
22 | import java.io.InputStreamReader; |
---|
23 | import java.util.ArrayList; |
---|
24 | import java.util.Date; |
---|
25 | |
---|
26 | /** |
---|
27 | * Prévalidation d'un jeu ayant des données de type NASA-AMES 1001 |
---|
28 | * |
---|
29 | */ |
---|
30 | |
---|
31 | public 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 | } |
---|