package mmt.core; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.time.LocalTime; import java.time.LocalDate; import mmt.core.exceptions.ImportFileException; public class NewParser { private TrainCompany _trainCompany; public void parseFile(String fileName) throws ImportFileException { // _trainCompany = criar TrainCompany try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null) { parseLine(line); } } catch (IOException ioe) { throw new ImportFileException(ioe); } return _trainCompany; } private void parseLine(String line) throws ImportFileException { String[] components = line.split("\\|"); switch (components[0]) { case "PASSENGER": parsePassenger(components); break; case "SERVICE": parseService(components); break; case "ITINERARY": parseItinerary(components); break; default: throw new ImportFileException("invalid type of line: " + components[0]); } } private void parsePassenger(String[] components) throws ImportFileException { if (components.length != 2) throw new ImportFileException("invalid number of arguments in passenger line: " + components.length); String passengerName = components[1]; // criar o passageiro registá-lo na TrainCompany } private void parseService(String[] components) { double cost = Double.parseDouble(components[2]); int serviceId = Integer.parseInt(components[1]); // criar o serviço com o id e custo e associar ao TrainCompany for (int i = 3; i < components.length; i += 2) { String time = components[i]; String stationName = components[i + 1]; LocalTime ltime = LocalTime.parse(time); // adicionar TrainStop com ltime e Station com o nome stationName } } private void parseItinerary(String[] components) { if (components.length < 4) throw new ImportFileException("Invalid number of elements in itinerary line: " + components.length); int passengerId = Integer.parseInt(components[1]); LocalDate date = LocalDate.parse(components[2]); // criar um itinerário com data indicada for (int i = 3; i < components.length; i++) { String segmentDescription[] = components[i].split("/"); int serviceId = Integer.parseInt(segmentDescription[0]); String departureTrainStop = segmentDescription[1]; String arrivalTrainStop = segmentDescription[2]; // criar segmento com paragem em departureTrainStop e arrivalTrainStop // adicionar segmento ao itinerario } // adicionar o itinerário ao passageiro } }