1 | package com.medias.integration.principal; |
---|
2 | |
---|
3 | import com.medias.Chrono; |
---|
4 | import com.medias.Constantes; |
---|
5 | import com.medias.DateTime; |
---|
6 | import com.medias.EcritureLog; |
---|
7 | import com.medias.database.objects.Capteur; |
---|
8 | import com.medias.database.objects.Fichier; |
---|
9 | import com.medias.database.objects.Jeu; |
---|
10 | import com.medias.database.objects.Localisation; |
---|
11 | import com.medias.database.objects.Mesure; |
---|
12 | import com.medias.database.objects.Parametre; |
---|
13 | import com.medias.database.objects.Personne; |
---|
14 | import com.medias.database.objects.Plateforme; |
---|
15 | import com.medias.database.objects.Valeur; |
---|
16 | import com.medias.integration.insertion.Insertion; |
---|
17 | import com.medias.integration.lecture_ecriture.LectureCapteurs; |
---|
18 | import com.medias.integration.lecture_ecriture.LectureModeleXML; |
---|
19 | import com.medias.integration.lecture_ecriture.LectureOrganismes; |
---|
20 | import com.medias.integration.lecture_ecriture.LectureParametres; |
---|
21 | import com.medias.integration.lecture_ecriture.LecturePlateformes; |
---|
22 | import com.medias.integration.lecture_ecriture.LectureUnites; |
---|
23 | import com.medias.integration.lecture_ecriture.LecturePersonnes; |
---|
24 | import com.medias.integration.prevalidation.PreValidation; |
---|
25 | import com.medias.integration.repartition.Repartition; |
---|
26 | import com.medias.integration.utils.CommunicationBD; |
---|
27 | import com.medias.integration.utils.Nombre; |
---|
28 | import com.medias.integration.utils.Statiques; |
---|
29 | import com.medias.integration.validation.Validation; |
---|
30 | import com.medias.integration.vues.MesureModele; |
---|
31 | import com.medias.integration.vues.ParametreModele; |
---|
32 | import com.medias.integration.vues.ValeurModele; |
---|
33 | import com.medias.integration.vues.PlateformeModele; |
---|
34 | |
---|
35 | import java.io.File; |
---|
36 | import java.io.FileInputStream; |
---|
37 | import java.io.FileNotFoundException; |
---|
38 | import java.io.IOException; |
---|
39 | import java.util.ArrayList; |
---|
40 | import java.util.Collections; |
---|
41 | import java.util.Properties; |
---|
42 | |
---|
43 | /** |
---|
44 | * Created on 24 Jan. 2007 |
---|
45 | * |
---|
46 | */ |
---|
47 | |
---|
48 | /** |
---|
49 | * @author ******************************************************************************************************************* |
---|
50 | * Classe permettant de prevalider, valider, répartir et inserer un ensemble de fichier d'un jeu donné. * |
---|
51 | * ******************************************************************************************************************* |
---|
52 | */ |
---|
53 | |
---|
54 | public class Principal |
---|
55 | { |
---|
56 | public static void main( String[] args ) |
---|
57 | { |
---|
58 | // Argument 0 : LE NOM DE LA CATEGORIE |
---|
59 | String nomCategorie = args[0]; |
---|
60 | // Argument 1 : LE NOM DU JEU |
---|
61 | String nomJeu = args[1]; |
---|
62 | // Argument 2 : LE NUMERO DE VERSION |
---|
63 | String numVersion = args[2]; |
---|
64 | |
---|
65 | /** |
---|
66 | * Lancement du chronométre |
---|
67 | */ |
---|
68 | Chrono chrono = new Chrono(); |
---|
69 | chrono.start(); |
---|
70 | // Attribution des constantes |
---|
71 | // String fichierProp = new File("megapoli.properties").getAbsolutePath(); |
---|
72 | String emplacementProp = Principal.class.getResource( "" ).getPath(); |
---|
73 | emplacementProp = emplacementProp.substring( 0, emplacementProp.lastIndexOf( "/" ) ) + "/../../../"; |
---|
74 | String fichierProp = emplacementProp + "megapoli.properties"; |
---|
75 | Properties prop = new Properties(); |
---|
76 | try |
---|
77 | { |
---|
78 | prop.load( new FileInputStream( fichierProp ) ); |
---|
79 | } |
---|
80 | catch( FileNotFoundException e ) |
---|
81 | { |
---|
82 | e.printStackTrace(); |
---|
83 | } |
---|
84 | catch( IOException e ) |
---|
85 | { |
---|
86 | e.printStackTrace(); |
---|
87 | } |
---|
88 | Constantes.cheminFichierSortie = prop.getProperty( "data.output" ); |
---|
89 | Constantes.cheminDonnees = prop.getProperty( "data.upload" ); |
---|
90 | Constantes.cheminListes = prop.getProperty( "data.metadata" ); |
---|
91 | Constantes.cheminModeles = prop.getProperty( "data.model" ); |
---|
92 | Constantes.cheminDonneesSortie = prop.getProperty( "data.download" ); |
---|
93 | // Fichier de log |
---|
94 | EcritureLog.init( nomJeu, nomCategorie ); |
---|
95 | // *********************************************** |
---|
96 | // ************ On recherche les fichiers du jeu * |
---|
97 | // *********************************************** |
---|
98 | String cheminJeu = Constantes.cheminDonnees + "/" + nomCategorie + "/" + nomJeu + "/"; |
---|
99 | String cheminJeuSortie = Constantes.cheminDonneesSortie + "/" + nomCategorie + "/" + nomJeu + "/"; |
---|
100 | // On récupére tous les fichiers du répertoire |
---|
101 | File fileCourant = new File( cheminJeu ); |
---|
102 | // Création du répertoire de sortie |
---|
103 | File fileDest = new File( cheminJeuSortie ); |
---|
104 | if( !fileDest.exists() ) fileDest.mkdir(); |
---|
105 | String[] listeFics = fileCourant.list(); |
---|
106 | ArrayList<String> listeFichiers = new ArrayList<String>(); |
---|
107 | // On enléve de la liste les fichiers inutiles |
---|
108 | for( String fic : listeFics ) |
---|
109 | { |
---|
110 | if( !fic.endsWith( ".xml" ) && !fic.endsWith( ".svn" ) ) |
---|
111 | { |
---|
112 | listeFichiers.add( fic ); |
---|
113 | } |
---|
114 | } |
---|
115 | // S'il y a au moins un fichier dans le jeu |
---|
116 | if( listeFichiers.size() != 0 ) |
---|
117 | { |
---|
118 | Chrono chronoMeta = new Chrono(); |
---|
119 | chronoMeta.start(); |
---|
120 | // Trier les fichiers par ordre alphabétique |
---|
121 | Collections.sort( listeFichiers ); |
---|
122 | // Etape 1 : On lit le modéle XML du jeu |
---|
123 | LectureModeleXML lectureModeleXML = new LectureModeleXML( nomCategorie, nomJeu ); |
---|
124 | lectureModeleXML.lireModele(); |
---|
125 | // Etape 2 : On lit les listes EXCEL de capteurs, paramétres, plateformes, ... |
---|
126 | LectureUnites lectureUnites = new LectureUnites(); |
---|
127 | lectureUnites.lireFichier(); |
---|
128 | LectureParametres lectureParametres = new LectureParametres(); |
---|
129 | lectureParametres.lireFichier(); |
---|
130 | LectureCapteurs lectureCapteurs = new LectureCapteurs(); |
---|
131 | lectureCapteurs.lireFichier(); |
---|
132 | LecturePlateformes lecturePlateformes = new LecturePlateformes(); |
---|
133 | lecturePlateformes.lireFichier(); |
---|
134 | LectureOrganismes lectureOrganismes = new LectureOrganismes(); |
---|
135 | lectureOrganismes.lireFichier(); |
---|
136 | LecturePersonnes lecturePersonnes = new LecturePersonnes(); |
---|
137 | lecturePersonnes.lireFichier(); |
---|
138 | |
---|
139 | // Etape 3 : Répartition des métadonnées du jeu |
---|
140 | Repartition repartition = new Repartition( lectureModeleXML, lectureCapteurs, |
---|
141 | lecturePlateformes, lectureParametres, lecturePersonnes, lectureUnites, lectureOrganismes ); |
---|
142 | ArrayList<Personne> personnes = repartition.repartirPersonnes(); |
---|
143 | Jeu jeu = repartition.repartirJeu( personnes, numVersion ); |
---|
144 | Statiques.plateformesModele = new ArrayList<PlateformeModele>(); |
---|
145 | ArrayList<Parametre> parametres = repartition.repartirParametres(); |
---|
146 | ArrayList<Capteur> capteurs = repartition.repartirCapteurs( parametres ); |
---|
147 | ArrayList<Plateforme> plateformes = repartition.repartirPlateformes( jeu.getOrganisme().getAdresse().getAdressePays(), capteurs, parametres ); |
---|
148 | |
---|
149 | // Etape 4 : Insertion des métadonnées du jeu |
---|
150 | Insertion insertion = new Insertion(); |
---|
151 | try |
---|
152 | { |
---|
153 | synchronized( Principal.class ) |
---|
154 | { |
---|
155 | // Insertion des personnes (PI, contact, intégrateur) |
---|
156 | insertion.insererPersonne( jeu.getPersonneByIntegrateurId() ); |
---|
157 | insertion.insererPersonne( jeu.getPersonneByContactId() ); |
---|
158 | // on teste si le pi n est pas null : on l'insere |
---|
159 | if( jeu.getPersonneByPiId() != null ) |
---|
160 | insertion.insererPersonne( jeu.getPersonneByPiId() ); |
---|
161 | // Insertion du jeu |
---|
162 | insertion.insererJeu( jeu ); |
---|
163 | // Insertion des parametres |
---|
164 | for( Parametre parametre : parametres ) |
---|
165 | insertion.insererParametre( parametre ); |
---|
166 | // Insertion des capteurs |
---|
167 | for( Capteur capteur : capteurs ) |
---|
168 | insertion.insererCapteur( capteur, parametres ); |
---|
169 | // Insertion des plateformes |
---|
170 | for( Plateforme plateforme : plateformes ) |
---|
171 | insertion.insererPlateforme( plateforme, capteurs, parametres ); |
---|
172 | // On ouvre la connexion |
---|
173 | CommunicationBD.open(); |
---|
174 | // Mise é jour des liaisons capteurs/jeu |
---|
175 | insertion.mettreAJourRequeteCaptJeu( jeu, capteurs ); |
---|
176 | // Mise é jour des liaisons parametres/jeu |
---|
177 | insertion.mettreAJourRequeteParamJeu( jeu, parametres ); |
---|
178 | // Mise é jour des liaisons plateformes/jeu |
---|
179 | insertion.mettreAJourRequetePlatJeu( jeu, plateformes ); |
---|
180 | // Mise é jour des liaisons paramétres/capteurs |
---|
181 | insertion.mettreAJourRequeteParamCapt( capteurs, parametres ); |
---|
182 | // Mise é jour des liaisons capteurs/plateformes et paramétres/plateformes |
---|
183 | insertion.mettreAJourRequeteCaptPlatParam( plateformes, capteurs, parametres ); |
---|
184 | // Insertion de la table bilan |
---|
185 | insertion.insererBilan( jeu, plateformes, capteurs, parametres ); |
---|
186 | // On ferme la connexion |
---|
187 | CommunicationBD.close(); |
---|
188 | chronoMeta.stop(); |
---|
189 | chronoMeta.afficheChrono( "METADONNEES" ); |
---|
190 | |
---|
191 | // Etape 5 : Traitement des fichiers de données |
---|
192 | /***************************************************************************************************** |
---|
193 | * On parcourt les fichiers du jeu * |
---|
194 | ****************************************************************************************************** |
---|
195 | */ |
---|
196 | // Initialisations |
---|
197 | // Initialialisation des : altitude,latitude, longitude et hauteur sol. On convertit une altitude, latitude, longitude ou hauteur sol de Double vers Integer. |
---|
198 | // altitude du jeu |
---|
199 | Statiques.altMaxJeu = Nombre.altDoubleToInt( Double.valueOf( Constantes.altitudeMoinsInf ) ); |
---|
200 | Statiques.altMinJeu = Nombre.altDoubleToInt( Double.valueOf( Constantes.altitudePlusInf ) ); |
---|
201 | // latitude du jeu |
---|
202 | Statiques.latMaxJeu = Nombre.latDoubleToInt( Double.valueOf( Constantes.latitudeMoinsInf ) ); |
---|
203 | Statiques.latMinJeu = Nombre.latDoubleToInt( Double.valueOf( Constantes.latitudePlusInf ) ); |
---|
204 | // longitude du jeu |
---|
205 | Statiques.lonMaxJeu = Nombre.latDoubleToInt( Double.valueOf( Constantes.longitudeMoinsInf ) ); |
---|
206 | Statiques.lonMinJeu = Nombre.latDoubleToInt( Double.valueOf( Constantes.longitudePlusInf ) ); |
---|
207 | // hauteur sol du jeu |
---|
208 | Statiques.hsMaxJeu = Nombre.altDoubleToInt( Double.valueOf( Constantes.hsMoinsInf ) ); |
---|
209 | Statiques.hsMinJeu = Nombre.altDoubleToInt( Double.valueOf( Constantes.hsPlusInf ) ); |
---|
210 | // Dates |
---|
211 | Statiques.dateMinJeu = DateTime.stringToDate( Constantes.datePlusInf, Constantes.formatDateJJMMAAAAHHMMSS ); |
---|
212 | Statiques.dateMaxJeu = DateTime.stringToDate( Constantes.dateMoinsInf, Constantes.formatDateJJMMAAAAHHMMSS ); |
---|
213 | |
---|
214 | ArrayList<ArrayList<String>> listeDonnees; |
---|
215 | PreValidation preValidation; |
---|
216 | Validation validation; |
---|
217 | String cheminFichier, cheminFichierSortie; |
---|
218 | Chrono chronoFichier; |
---|
219 | Fichier fichier; |
---|
220 | MesureModele mesureModele; |
---|
221 | Mesure mesure; |
---|
222 | ArrayList<Localisation> listeLocs = new ArrayList<Localisation>(); |
---|
223 | ArrayList<ParametreModele> paramsMesure, paramsValeur; |
---|
224 | ParametreModele parametreModele; |
---|
225 | Parametre parametre; |
---|
226 | Capteur capteur; |
---|
227 | ArrayList<ValeurModele> valeursMesure; |
---|
228 | ValeurModele valeurModele; |
---|
229 | Valeur valeur; |
---|
230 | int nbMesures = 0, nbValeurs = 0, nbErreurs = 0, numFichier = 0; |
---|
231 | int nbFichiers = listeFichiers.size();// - 1; // On enléve le fichier de métadonnées xml |
---|
232 | // Pour chaque fichier de données... |
---|
233 | for( int numFic = 0; numFic < nbFichiers; numFic++ ) |
---|
234 | { |
---|
235 | cheminFichier = cheminJeu + listeFichiers.get( numFic ); |
---|
236 | fileCourant = new File( cheminFichier ); |
---|
237 | // Si le fichier existe et n'est pas vide |
---|
238 | if( fileCourant.exists() && !cheminFichier.endsWith( "metadata.xml" ) && !cheminFichier.endsWith( ".svn" ) ) |
---|
239 | { |
---|
240 | numFichier++; |
---|
241 | chronoFichier = new Chrono(); |
---|
242 | chronoFichier.start(); |
---|
243 | EcritureLog.ecrire( "\n- [" + numFichier + "/" + nbFichiers + "] Fichier " + fileCourant.getName(), "out-ln" ); |
---|
244 | // Etape 6 : prévalidation : On prévalide le fichier |
---|
245 | preValidation = new PreValidation( fileCourant ); |
---|
246 | preValidation.prevalider( lectureParametres, lectureUnites, lectureCapteurs, parametres, capteurs, nomJeu ); |
---|
247 | EcritureLog.ecrire( " -> Prévalidation OK", "out-ln" ); |
---|
248 | // Etape 7 : validation : On valide le fichier |
---|
249 | validation = new Validation( preValidation ); |
---|
250 | listeDonnees = validation.valider( lectureModeleXML, fileCourant.getName() ); |
---|
251 | preValidation.vider(); |
---|
252 | validation.vider(); |
---|
253 | |
---|
254 | int nbErreursValidation = validation.getNbErreursTotales(); |
---|
255 | nbErreurs += nbErreursValidation; |
---|
256 | if( nbErreursValidation == 0 ) |
---|
257 | { |
---|
258 | EcritureLog.ecrire( " -> Validation OK", "out-ln" ); |
---|
259 | // Etape 8 : répartition du fichier |
---|
260 | fichier = repartition.repartirFichier( jeu, fileCourant ); |
---|
261 | // On ouvre la connexion |
---|
262 | CommunicationBD.open(); |
---|
263 | // Etape 9 : insertion du fichier |
---|
264 | insertion.insererFichier( fichier ); |
---|
265 | nbMesures += listeDonnees.size(); |
---|
266 | paramsMesure = validation.getListeParams(); |
---|
267 | // Pour chaque mesure... |
---|
268 | for( ArrayList<String> donneesMesure : listeDonnees ) |
---|
269 | { |
---|
270 | // Etape 10 : Rangement des données sur la ligne et répartition des séquences |
---|
271 | mesureModele = repartition.repartirDonnees( donneesMesure, paramsMesure );//,numSeqPrecedent,parametresModele,indiceNiv); |
---|
272 | paramsValeur = mesureModele.getParamsValeur(); |
---|
273 | // Etape 11 : repartition de la mesure |
---|
274 | mesure = repartition.repartirMesure( mesureModele, fichier, plateformes ); |
---|
275 | // Etape 12 : Insertion de la mesure |
---|
276 | insertion.insererMesure( mesure, listeLocs );//,flagLocId); |
---|
277 | valeursMesure = mesureModele.getValeursMesure(); |
---|
278 | // Pour chaque valeur... |
---|
279 | for( int numValeur = 0; numValeur < valeursMesure.size(); numValeur++ ) |
---|
280 | { |
---|
281 | valeurModele = valeursMesure.get( numValeur ); |
---|
282 | // On récupére les infos du paramétre associé é la valeur |
---|
283 | parametreModele = paramsValeur.get( numValeur ); |
---|
284 | parametre = parametres.get( parametreModele.getIndiceParam() ); |
---|
285 | capteur = capteurs.get( parametreModele.getIndiceCapt() ); |
---|
286 | // Etape 13 : repartition de la valeur |
---|
287 | valeur = repartition.repartirValeur( mesure, valeurModele, parametreModele, parametre, capteur ); |
---|
288 | |
---|
289 | // Etape 14 : insertion de la valeur |
---|
290 | if( valeur != null ) |
---|
291 | { |
---|
292 | insertion.insererValeur( valeur );//,flagValidId); |
---|
293 | nbValeurs++; |
---|
294 | } |
---|
295 | } |
---|
296 | // } |
---|
297 | } |
---|
298 | // On ferme la connexion |
---|
299 | CommunicationBD.close(); |
---|
300 | EcritureLog.ecrire( " -> Insertion OK", "out-ln" ); |
---|
301 | // Le fichier est validé et ses données sont insérées: on déplace le fichier dans le répertoire "download" |
---|
302 | cheminFichierSortie = cheminJeuSortie + listeFichiers.get( numFic ); |
---|
303 | fileDest = new File( cheminFichierSortie ); |
---|
304 | if( !fileDest.exists() ) |
---|
305 | { |
---|
306 | fileCourant.renameTo( fileDest ); |
---|
307 | } |
---|
308 | } |
---|
309 | chronoFichier.stop(); |
---|
310 | chronoFichier.afficheChrono( " -> FICHIER" ); |
---|
311 | } |
---|
312 | else if( !cheminFichier.endsWith( "metadata.xml" ) && !cheminFichier.endsWith( ".svn" ) ) |
---|
313 | { |
---|
314 | EcritureLog.ecrire( "- Fichier " + fileCourant.getName() + " non trouvé !", "err" ); |
---|
315 | } |
---|
316 | } |
---|
317 | if( nbErreurs != 0 ) |
---|
318 | { |
---|
319 | EcritureLog.ecrire( "\n-> Il y a au total " + nbErreurs + " erreur(s) dans les fichiers du jeu " + nomJeu + "\n", "err" ); |
---|
320 | } |
---|
321 | Chrono chronoFin = new Chrono(); |
---|
322 | chronoFin.start(); |
---|
323 | // On ouvre la connexion |
---|
324 | CommunicationBD.open(); |
---|
325 | // Mise é jour du jeu |
---|
326 | insertion.mettreAjourJeu( jeu ); |
---|
327 | // Mise é jour des infos sur la quantité de données insérée |
---|
328 | insertion.mettreAJourRequeteNbValsJeu( jeu, nbFichiers, nbMesures, nbValeurs ); |
---|
329 | // Mise é jour du bilan |
---|
330 | insertion.mettreAJourBilan( jeu ); |
---|
331 | // On ferme la connexion |
---|
332 | CommunicationBD.close(); |
---|
333 | // Fin du chrono |
---|
334 | chronoFin.stop(); |
---|
335 | chronoFin.afficheChrono( "FINALISATION" ); |
---|
336 | }// Fin synchronized |
---|
337 | } |
---|
338 | catch( Exception e ) |
---|
339 | { |
---|
340 | e.printStackTrace(); |
---|
341 | } |
---|
342 | } |
---|
343 | else |
---|
344 | { |
---|
345 | EcritureLog.ecrire( "Pas de fichiers é valider dans le jeu " + nomJeu, "err" ); |
---|
346 | } |
---|
347 | /** Arrét du chronométre */ |
---|
348 | chrono.stop(); |
---|
349 | chrono.afficheChrono( "TOTAL" ); |
---|
350 | } |
---|
351 | } |
---|