Package engine

Source Code of engine.WeeklyDatabaseUpdater

package engine;

import dao.DaoTheoricalTrainData;
import externaldata.gareSelection.GareSelection;
import externaldata.theoricaltimefile.TheoricalTimeTrainFileHelper;
import externaldata.theoricaltimefile.TheoricalTrainData;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.servlet.ServletContext;

import com.sun.xml.internal.bind.CycleRecoverable.Context;


public class WeeklyDatabaseUpdater implements Runnable {
 
  private Object sharedBarrier;
  private List<GareSelection> gares;
  private int dayNumberForDataFileUpdate = 6; // Correspond � vendredi sur le Calendar java
  private ServletContext context;
 
  public WeeklyDatabaseUpdater(List<GareSelection> gares, Object sharedBarrier, ServletContext context) {
    this.sharedBarrier = sharedBarrier;
    this.gares = gares;
    this.context = context;
  }
 
  @Override
  public void run() {
   
    // Premi�re maj
    updateSchedule();
   
    synchronized (sharedBarrier) {
      // La premi�re maj est termin�e
      sharedBarrier.notify();
    }
   
    while (true) {
     
      try {
        int currentDayNumber = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
        int daysToWaitForNextUpdate = (currentDayNumber < dayNumberForDataFileUpdate) ? (dayNumberForDataFileUpdate - currentDayNumber) : ((dayNumberForDataFileUpdate + 7) - currentDayNumber);
        System.out.println("Nombre de jours d'attente avant prochain DL fichier : " + daysToWaitForNextUpdate);
       
        // Le thread s'endort jusqu'au prochain vendredi (==> fichier mis � jour le jeudi soir � la SNCF)
        Thread.sleep(daysToWaitForNextUpdate*24*60*60*1000);
        updateSchedule();
       
      } catch (InterruptedException e) {
        // Thread interrompu par la m�thode 'interrupt'
        // On termine l'ex�cution en sortant de la boucle infinie
        break;
      }
    }
  }
 
  private void updateSchedule() {
   
    // R�cup�ration des nouvelles donn�es
    List<TheoricalTrainData> newTheoricalTrainData = TheoricalTimeTrainFileHelper.extractStopTimes(gares, context.getRealPath(""));
    List<TheoricalTrainData> theoricalTrainDataToSave = new ArrayList<TheoricalTrainData>(newTheoricalTrainData);
   
    // R�cup�ration des anciennes donn�es stock�es en BDD
    DaoTheoricalTrainData dao = new DaoTheoricalTrainData();
    List<TheoricalTrainData> oldTheoricalTrainData = dao.getAll();
    List<TheoricalTrainData> theoricalTrainDataToDelete = new ArrayList<TheoricalTrainData>(oldTheoricalTrainData);
   
   
   
    // Parcours des listes et comparaisons
    for (TheoricalTrainData tmp_old_data : oldTheoricalTrainData) {
     
      for (TheoricalTrainData tmp_new_data : newTheoricalTrainData) {
        // Si on a les m�mes data dans la BD et dans le nouveau fichiers,
        // alors on peut garder la data en BD sans y toucher
        if (tmp_old_data.equals(tmp_new_data)) {
          theoricalTrainDataToSave.remove(tmp_new_data);
          theoricalTrainDataToDelete.remove(tmp_old_data);
          break;
        }
      }
    }
   
    // Les datas qui sont rest�es dans la liste theoricalTrainDataToSave
    // sont les nouvelles donn�es � stocker dans la BD
    dao.saveAll(theoricalTrainDataToSave);
   
    // Les datas qui sont rest�es dans la liste theoricalTrainDataToDelete
    // sont les anciennes donn�es � supprimer de la BD
    dao.deleteList(theoricalTrainDataToDelete);
  }
}
TOP

Related Classes of engine.WeeklyDatabaseUpdater

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.