Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package it.polito.dp2.FDS.sol1;
- import it.polito.dp2.FDS.Aircraft;
- import it.polito.dp2.FDS.FactoryConfigurationError;
- import it.polito.dp2.FDS.FlightInstanceStatus;
- import it.polito.dp2.FDS.FlightMonitorException;
- import it.polito.dp2.FDS.MalformedArgumentException;
- import it.polito.dp2.FDS.Time;
- import java.io.File;
- import java.io.IOException;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- import java.util.Iterator;
- import java.util.LinkedHashSet;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Set;
- import java.util.TreeSet;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.xml.sax.SAXException;
- import org.xml.sax.SAXParseException;
- public class FlightMonitor implements it.polito.dp2.FDS.FlightMonitor{
- /*definizione List e Set*/
- public static Set<Aircraft> a = new LinkedHashSet<Aircraft>();/*set senza duplicati di Aircraft*/
- public Set<String> s = new TreeSet<String>();/*set senza duplicati di Seats*/
- public List<it.polito.dp2.FDS.FlightInstanceReader> fi = new LinkedList<it.polito.dp2.FDS.FlightInstanceReader>();/*lista di FlightInstanceReader*/
- public List<it.polito.dp2.FDS.FlightReader> fr = new LinkedList<it.polito.dp2.FDS.FlightReader>();/*lista di FlightReader*/
- /*costruttore*/
- public FlightMonitor(){
- try{
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db = dbf.newDocumentBuilder();
- /*file XML da leggere*/
- Document doc = db.parse(new File(System.getProperty("it.polito.dp2.FDS.sol1.FlightInfo.file")/*"dtd/out1357259481.xml"*/));
- NodeList nl = doc.getElementsByTagName("flights");
- NodeList nl1;
- Element e;
- // riempio la lista FlightReader con gli elementi del file XML
- for (int i=0; i < nl.getLength(); i++) {
- e = (Element)nl.item(i);
- FlightReader frr = new FlightReader(e);
- fr.add(frr);
- /*System.out.println("Flight " + i + " ");
- System.out.println(frr.getNumber());*/
- }
- nl = doc.getElementsByTagName("flightInstance");
- // riempio la lista FlightInstance con gli elementi del file XML
- for (int i=0; i < nl.getLength(); i++) {
- e = (Element)nl.item(i);
- String number = e.getAttribute("number");
- Iterator<it.polito.dp2.FDS.FlightReader> it = fr.iterator();
- FlightReader it1;
- /*scorro tutta la lista alla ricerca del volo con stringa pari a number*/
- for (;it.hasNext();) {
- it1 = (FlightReader) it.next();
- if(number.equals(it1.getNumber())){
- FlightInstanceReader fir = new FlightInstanceReader(e, it1);
- fi.add(fir);/*quando lo trovo, creo un oggetto FlightInstanceReader e lo aggiungo alla lista*/
- //System.out.println("FlightInstance " + i + " " + fir.getFlight().getNumber() + " "/* + fir.getAircraft().model*/);
- }
- }
- }
- Node seatTextNode;/*nodo Seat*/
- nl = doc.getElementsByTagName("aircrafts");
- // riempio la lista Aircraft con gli elementi del file XML
- for (int i=0; i < nl.getLength(); i++) {
- e = (Element)nl.item(i);
- String model = e.getAttribute("model");
- nl1 = e.getElementsByTagName("seats");/*mi ricavo la lista di seats*/
- /*scorro la lista di nodi di Seat*/
- for(int j=0;j<nl1.getLength();j++){
- seatTextNode = nl1.item(j).getFirstChild();/*mi ricavo il nodo Text di seats*/
- s.add(seatTextNode.getNodeValue());/*ed infine ne inserisco il valore all'interno del Set di posti*/
- }
- //System.out.println("Numero di posti: " + i + " " + s.size());
- Aircraft aaa = new Aircraft(model, s);
- a.add(aaa);
- /*System.out.println("Aircraft " + i + " ");
- System.out.println(aaa.model + " " + aaa.seats.size());*/
- s.clear();/*pulisco il set per l'iterazione successiva*/
- }
- }
- catch (IOException ioe) {
- System.out.println("Input/Output error: " + ioe.getMessage());
- System.exit(1);
- }
- catch (SAXParseException spe) {
- System.out.println("Parsing exception for entity " + spe.getPublicId() +
- " at line: " + spe.getLineNumber() +
- " column: " + spe.getColumnNumber());
- System.exit(1);
- }
- catch (SAXException se) {
- System.out.println("General SAX exception: " + se.getMessage());
- System.exit(1);
- }
- catch (ParserConfigurationException pce) {
- System.out.println("Parser configuration exception: " + pce.getMessage());
- System.exit(1);
- }
- }
- @Override
- public Set<Aircraft> getAircrafts() {
- // TODO Auto-generated method stub
- return this.a;
- }
- @Override
- public FlightReader getFlight(String number) throws MalformedArgumentException {
- // TODO Auto-generated method stub
- Iterator<it.polito.dp2.FDS.FlightReader> it = fr.iterator();
- /*scorro tutta la lista alla ricerca del volo con stringa pari a number*/
- for (;it.hasNext();) {
- if(number.equals(((FlightReader) it.next()).getNumber()))
- return (FlightReader) it;
- }
- return null;
- }
- @Override
- public it.polito.dp2.FDS.FlightInstanceReader getFlightInstance(String number, GregorianCalendar date) throws MalformedArgumentException {
- // TODO Auto-generated method stub
- boolean flag = false;
- Iterator<it.polito.dp2.FDS.FlightInstanceReader> it = fi.iterator();
- /*scorro tutta la lista alla ricerca dell'istanza di volo con number pari a number e date uguale a date*/
- for (;it.hasNext();) {
- if(date.get(Calendar.YEAR) != ((FlightInstanceReader)it).getDate().get(Calendar.YEAR))
- flag = true;
- else if(date.get(Calendar.MONTH) != ((FlightInstanceReader)it).getDate().get(Calendar.MONTH))
- flag = true;
- else if(date.get(Calendar.DAY_OF_MONTH) != ((FlightInstanceReader)it).getDate().get(Calendar.DAY_OF_MONTH))
- flag = true;
- else if(date.get(Calendar.HOUR) != ((FlightInstanceReader)it).getDate().get(Calendar.HOUR))
- flag = true;
- else if(date.get(Calendar.MINUTE) != ((FlightInstanceReader)it).getDate().get(Calendar.MINUTE))
- flag = true;
- else if(date.get(Calendar.SECOND) != ((FlightInstanceReader)it).getDate().get(Calendar.SECOND))
- flag = true;
- /*se il numero del volo รจ uguale a quello passato e la data รจ anche uguale*/
- if(number.equals(((FlightInstanceReader) it.next()).getFlight().getNumber()) && flag == false)
- return (FlightInstanceReader)it;
- }
- return null;
- }
- @Override
- public List<it.polito.dp2.FDS.FlightInstanceReader> getFlightInstances(String number, GregorianCalendar startDate, FlightInstanceStatus stat) throws MalformedArgumentException {
- // TODO Auto-generated method stub
- boolean flag = false;
- List<it.polito.dp2.FDS.FlightInstanceReader> fi1 = new LinkedList<it.polito.dp2.FDS.FlightInstanceReader>();/*lista di FlightReader locale*/
- Iterator<it.polito.dp2.FDS.FlightInstanceReader> it = fi.iterator();
- if(number == null && startDate == null && stat == null)
- return fi;
- else{
- /*scorro tutta la lista alla ricerca dell'istanza di volo con number pari a number, status pari a stat e date >= startDate*/
- for (;it.hasNext();) {
- if(startDate.get(Calendar.YEAR) < ((FlightInstanceReader)it).getDate().get(Calendar.YEAR))
- flag = true;
- else if(startDate.get(Calendar.MONTH) < ((FlightInstanceReader)it).getDate().get(Calendar.MONTH))
- flag = true;
- else if(startDate.get(Calendar.DAY_OF_MONTH) < ((FlightInstanceReader)it).getDate().get(Calendar.DAY_OF_MONTH))
- flag = true;
- else if(startDate.get(Calendar.HOUR) < ((FlightInstanceReader)it).getDate().get(Calendar.HOUR))
- flag = true;
- else if(startDate.get(Calendar.MINUTE) < ((FlightInstanceReader)it).getDate().get(Calendar.MINUTE))
- flag = true;
- else if(startDate.get(Calendar.SECOND) < ((FlightInstanceReader)it).getDate().get(Calendar.SECOND))
- flag = true;
- if(number.equals(((FlightInstanceReader) it).getFlight().getNumber()) && stat.equals(((FlightInstanceReader) it).getStatus()) && flag == true)
- fi1.add((FlightInstanceReader)it.next());
- flag = false;
- }
- return fi1;
- }
- }
- @Override
- public List<it.polito.dp2.FDS.FlightReader> getFlights(String dep, String arr, Time startTime) throws MalformedArgumentException {
- // TODO Auto-generated method stub
- List<it.polito.dp2.FDS.FlightReader> fr1 = new LinkedList<it.polito.dp2.FDS.FlightReader>();/*lista di FlightReader locale*/
- Iterator<it.polito.dp2.FDS.FlightReader> it = fr.iterator();
- /*se tutti e 3 i parametri passati sono pari a null, ritorno l'intera lista di FlightReader*/
- if(dep == null && arr == null && startTime == null)
- return fr;
- else{
- /*scorro tutta la lista alla ricerca del volo con departure pari a dep, arrivals pari a arr e time >= startTime*/
- for (;it.hasNext();) {
- if(dep.equals(((FlightReader) it).getDepartureAirport()) && arr.equals(((FlightReader) it).getDestinationAirport()) && (startTime.precedes((((FlightReader) it).getDepartureTime())) == true))
- fr1.add((FlightReader)it.next());
- }
- return fr1;
- }
- }
- // Print out library contents
- /*public void printBooks()
- {
- Iterator<Aircraft> i = a.iterator();
- Aircraft book;
- System.out.println("Elenco degli Aircrafts: ");
- while (i.hasNext()) {
- book = i.next();
- System.out.println(book.model + " " + book.seats.size());
- }
- System.out.println("Numero di Aircraft: " + a.size());
- }
- public static void main(String args[]) throws FlightMonitorException, FactoryConfigurationError
- {
- FlightMonitor dl = (FlightMonitor) FlightMonitorFactory.newInstance().newFlightMonitor();
- //FlightMonitor dl = new FlightMonitor();
- Set<Aircraft> aa = new LinkedHashSet<Aircraft>();
- aa.addAll(dl.getAircrafts());
- dl.printBooks();
- Iterator<Aircraft> i = aa.iterator();
- Aircraft book;
- System.out.println("Elenco degli Aircrafts1: ");
- while (i.hasNext()) {
- book = i.next();
- System.out.println(book.model + " " + book.seats.size());
- }
- System.out.println("Numero di Aircraft: " + aa.size());
- /*stampa classe getAircraft*/
- /*Iterator<Aircraft> ii = dl.getAircrafts().iterator();
- Aircraft bookk;
- System.out.println("Elenco degli AircraftsClasse: ");
- while (ii.hasNext()) {
- bookk = ii.next();
- System.out.println(bookk.model + " " + bookk.seats.size());
- }
- System.out.println("Numero di AircraftClasse: " + aa.size());
- /*stampa Set della Classe*/
- /*Iterator<Aircraft> iii = a.iterator();
- Aircraft bookkk;
- System.out.println("Elenco degli AircraftsLocali: ");
- while (iii.hasNext()) {
- bookkk = iii.next();
- System.out.println(bookkk.model + " " + bookkk.seats.size());
- }
- System.out.println("Numero di AircraftLocali: " + a.size());
- }*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement