Advertisement
Guest User

LogParser

a guest
Oct 1st, 2014
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.68 KB | None | 0 0
  1. package dailyprogrammer.medium.averagespeedcameras;
  2.  
  3.  
  4. import java.io.BufferedReader;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.time.LocalTime;
  8. import java.util.ArrayList;
  9. import java.util.HashSet;
  10. import java.util.List;
  11. import java.util.Set;
  12.  
  13. public class LogParser {
  14.  
  15.     private List<CameraLog> cameras;
  16.  
  17.     private double limit;
  18.  
  19.     Set<String> cars;
  20.  
  21.     private DistMeasure distMeasure;
  22.  
  23.     LogParser() {
  24.         this.cameras = new ArrayList<>();
  25.         this.cars    = new HashSet<>();
  26.     }
  27.  
  28.     public List<CameraLog> parseLog(File logFile) throws Exception {
  29.         try (BufferedReader reader = new BufferedReader(new FileReader(logFile))) {
  30.             readSpeedLimit(reader);
  31.             readCameras(reader);
  32.             readCameraLogs(reader);
  33.         }
  34.         return cameras;
  35.     }
  36.  
  37.     private void readSpeedLimit(BufferedReader reader) throws Exception {
  38.         String line     = reader.readLine();
  39.         String[] tokens = line.split(" ");
  40.         limit           = Double.parseDouble(tokens[3]);
  41.         distMeasure     = tokens[4].equals("mph.") ? DistMeasure.MP : DistMeasure.KM;
  42.     }
  43.  
  44.     private void readCameras(BufferedReader reader) throws Exception {
  45.         for (;;) {
  46.             reader.mark(50);
  47.             String line = reader.readLine();
  48.             if (line.matches("Speed camera number [\\d]+ is [\\d]+ metres down the motorway.")) {
  49.                 int dist = Integer.parseInt(line.split(" ")[5]);
  50.                 cameras.add(new CameraLog(dist));
  51.             } else {
  52.                 reader.reset();
  53.                 break;
  54.             }
  55.         }
  56.     }
  57.  
  58.     private void readCameraLogs(BufferedReader reader) throws Exception {
  59.         CameraLog camera = cameras.get(0);
  60.         String line;
  61.         while ((line = reader.readLine()) != null) {
  62.             if (line.matches("Start of log for camera [\\d]+.")) {
  63.                 int index = Integer.parseInt(line.split("[ \\.]")[5]);
  64.                 camera = cameras.get(--index);
  65.             } else {
  66.                 String[] tokens = line.split(" ");
  67.                 String carNum = tokens[1] + " " + tokens[2];
  68.                 cars.add(carNum);
  69.                 LocalTime camPassed = LocalTime.parse(tokens[7]);
  70.                 camera.addToLog(carNum, camPassed);
  71.             }
  72.         }
  73.     }
  74.  
  75.     public double getSpeedLimit() {
  76.         return limit;
  77.     }
  78.  
  79.     public Set<String> getCars() {
  80.         return cars;
  81.     }
  82.  
  83.     public List<CameraLog> getCameras() {
  84.         return cameras;
  85.     }
  86.  
  87.     public DistMeasure getDistMeasure() {
  88.         return distMeasure;
  89.     }
  90.  
  91.     static enum DistMeasure {
  92.         KM,
  93.         MP;
  94.     }
  95.  
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement