Advertisement
Sommariva90

FlightMonitor

Nov 1st, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.61 KB | None | 0 0
  1. package it.polito.dp2.FDS.sol1;
  2.  
  3. import it.polito.dp2.FDS.Aircraft;
  4. import it.polito.dp2.FDS.FactoryConfigurationError;
  5. import it.polito.dp2.FDS.FlightInstanceStatus;
  6. import it.polito.dp2.FDS.FlightMonitorException;
  7. import it.polito.dp2.FDS.MalformedArgumentException;
  8. import it.polito.dp2.FDS.Time;
  9.  
  10. import java.io.File;
  11. import java.io.IOException;
  12. import java.util.Calendar;
  13. import java.util.GregorianCalendar;
  14. import java.util.Iterator;
  15. import java.util.LinkedHashSet;
  16. import java.util.LinkedList;
  17. import java.util.List;
  18. import java.util.Set;
  19. import java.util.TreeSet;
  20.  
  21. import javax.xml.parsers.DocumentBuilder;
  22. import javax.xml.parsers.DocumentBuilderFactory;
  23. import javax.xml.parsers.ParserConfigurationException;
  24.  
  25. import org.w3c.dom.Document;
  26. import org.w3c.dom.Element;
  27. import org.w3c.dom.Node;
  28. import org.w3c.dom.NodeList;
  29. import org.xml.sax.SAXException;
  30. import org.xml.sax.SAXParseException;
  31.  
  32. public class FlightMonitor implements it.polito.dp2.FDS.FlightMonitor{
  33.  
  34. /*definizione List e Set*/
  35. public static Set<Aircraft> a = new LinkedHashSet<Aircraft>();/*set senza duplicati di Aircraft*/
  36.  
  37. public Set<String> s = new TreeSet<String>();/*set senza duplicati di Seats*/
  38.  
  39. public List<it.polito.dp2.FDS.FlightInstanceReader> fi = new LinkedList<it.polito.dp2.FDS.FlightInstanceReader>();/*lista di FlightInstanceReader*/
  40.  
  41. public List<it.polito.dp2.FDS.FlightReader> fr = new LinkedList<it.polito.dp2.FDS.FlightReader>();/*lista di FlightReader*/
  42.  
  43.  
  44. /*costruttore*/
  45. public FlightMonitor(){
  46.  
  47. try{
  48. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  49. DocumentBuilder db = dbf.newDocumentBuilder();
  50.  
  51. /*file XML da leggere*/
  52. Document doc = db.parse(new File(System.getProperty("it.polito.dp2.FDS.sol1.FlightInfo.file")/*"dtd/out1357259481.xml"*/));
  53. NodeList nl = doc.getElementsByTagName("flights");
  54. NodeList nl1;
  55. Element e;
  56.  
  57. // riempio la lista FlightReader con gli elementi del file XML
  58. for (int i=0; i < nl.getLength(); i++) {
  59. e = (Element)nl.item(i);
  60.  
  61. FlightReader frr = new FlightReader(e);
  62.  
  63. fr.add(frr);
  64.  
  65. /*System.out.println("Flight " + i + " ");
  66.  
  67. System.out.println(frr.getNumber());*/
  68. }
  69.  
  70. nl = doc.getElementsByTagName("flightInstance");
  71.  
  72. // riempio la lista FlightInstance con gli elementi del file XML
  73. for (int i=0; i < nl.getLength(); i++) {
  74. e = (Element)nl.item(i);
  75.  
  76. String number = e.getAttribute("number");
  77.  
  78. Iterator<it.polito.dp2.FDS.FlightReader> it = fr.iterator();
  79.  
  80. FlightReader it1;
  81.  
  82. /*scorro tutta la lista alla ricerca del volo con stringa pari a number*/
  83. for (;it.hasNext();) {
  84.  
  85. it1 = (FlightReader) it.next();
  86.  
  87. if(number.equals(it1.getNumber())){
  88.  
  89. FlightInstanceReader fir = new FlightInstanceReader(e, it1);
  90.  
  91. fi.add(fir);/*quando lo trovo, creo un oggetto FlightInstanceReader e lo aggiungo alla lista*/
  92.  
  93. //System.out.println("FlightInstance " + i + " " + fir.getFlight().getNumber() + " "/* + fir.getAircraft().model*/);
  94.  
  95. }
  96. }
  97. }
  98.  
  99. Node seatTextNode;/*nodo Seat*/
  100.  
  101. nl = doc.getElementsByTagName("aircrafts");
  102.  
  103. // riempio la lista Aircraft con gli elementi del file XML
  104. for (int i=0; i < nl.getLength(); i++) {
  105.  
  106. e = (Element)nl.item(i);
  107.  
  108. String model = e.getAttribute("model");
  109.  
  110. nl1 = e.getElementsByTagName("seats");/*mi ricavo la lista di seats*/
  111.  
  112. /*scorro la lista di nodi di Seat*/
  113. for(int j=0;j<nl1.getLength();j++){
  114.  
  115. seatTextNode = nl1.item(j).getFirstChild();/*mi ricavo il nodo Text di seats*/
  116.  
  117. s.add(seatTextNode.getNodeValue());/*ed infine ne inserisco il valore all'interno del Set di posti*/
  118.  
  119. }
  120.  
  121. //System.out.println("Numero di posti: " + i + " " + s.size());
  122.  
  123. Aircraft aaa = new Aircraft(model, s);
  124.  
  125. a.add(aaa);
  126.  
  127. /*System.out.println("Aircraft " + i + " ");
  128.  
  129. System.out.println(aaa.model + " " + aaa.seats.size());*/
  130.  
  131.  
  132.  
  133. s.clear();/*pulisco il set per l'iterazione successiva*/
  134. }
  135. }
  136. catch (IOException ioe) {
  137. System.out.println("Input/Output error: " + ioe.getMessage());
  138. System.exit(1);
  139. }
  140. catch (SAXParseException spe) {
  141. System.out.println("Parsing exception for entity " + spe.getPublicId() +
  142. " at line: " + spe.getLineNumber() +
  143. " column: " + spe.getColumnNumber());
  144. System.exit(1);
  145. }
  146. catch (SAXException se) {
  147. System.out.println("General SAX exception: " + se.getMessage());
  148. System.exit(1);
  149. }
  150. catch (ParserConfigurationException pce) {
  151. System.out.println("Parser configuration exception: " + pce.getMessage());
  152. System.exit(1);
  153. }
  154. }
  155.  
  156. @Override
  157. public Set<Aircraft> getAircrafts() {
  158. // TODO Auto-generated method stub
  159. return this.a;
  160. }
  161.  
  162. @Override
  163. public FlightReader getFlight(String number) throws MalformedArgumentException {
  164.  
  165. // TODO Auto-generated method stub
  166. Iterator<it.polito.dp2.FDS.FlightReader> it = fr.iterator();
  167. /*scorro tutta la lista alla ricerca del volo con stringa pari a number*/
  168. for (;it.hasNext();) {
  169. if(number.equals(((FlightReader) it.next()).getNumber()))
  170. return (FlightReader) it;
  171. }
  172. return null;
  173. }
  174.  
  175. @Override
  176. public it.polito.dp2.FDS.FlightInstanceReader getFlightInstance(String number, GregorianCalendar date) throws MalformedArgumentException {
  177. // TODO Auto-generated method stub
  178.  
  179. boolean flag = false;
  180.  
  181. Iterator<it.polito.dp2.FDS.FlightInstanceReader> it = fi.iterator();
  182.  
  183. /*scorro tutta la lista alla ricerca dell'istanza di volo con number pari a number e date uguale a date*/
  184. for (;it.hasNext();) {
  185.  
  186. if(date.get(Calendar.YEAR) != ((FlightInstanceReader)it).getDate().get(Calendar.YEAR))
  187. flag = true;
  188. else if(date.get(Calendar.MONTH) != ((FlightInstanceReader)it).getDate().get(Calendar.MONTH))
  189. flag = true;
  190. else if(date.get(Calendar.DAY_OF_MONTH) != ((FlightInstanceReader)it).getDate().get(Calendar.DAY_OF_MONTH))
  191. flag = true;
  192. else if(date.get(Calendar.HOUR) != ((FlightInstanceReader)it).getDate().get(Calendar.HOUR))
  193. flag = true;
  194. else if(date.get(Calendar.MINUTE) != ((FlightInstanceReader)it).getDate().get(Calendar.MINUTE))
  195. flag = true;
  196. else if(date.get(Calendar.SECOND) != ((FlightInstanceReader)it).getDate().get(Calendar.SECOND))
  197. flag = true;
  198.  
  199. /*se il numero del volo รจ uguale a quello passato e la data รจ anche uguale*/
  200. if(number.equals(((FlightInstanceReader) it.next()).getFlight().getNumber()) && flag == false)
  201. return (FlightInstanceReader)it;
  202.  
  203. }
  204.  
  205. return null;
  206. }
  207.  
  208. @Override
  209. public List<it.polito.dp2.FDS.FlightInstanceReader> getFlightInstances(String number, GregorianCalendar startDate, FlightInstanceStatus stat) throws MalformedArgumentException {
  210. // TODO Auto-generated method stub
  211.  
  212. boolean flag = false;
  213.  
  214. List<it.polito.dp2.FDS.FlightInstanceReader> fi1 = new LinkedList<it.polito.dp2.FDS.FlightInstanceReader>();/*lista di FlightReader locale*/
  215.  
  216. Iterator<it.polito.dp2.FDS.FlightInstanceReader> it = fi.iterator();
  217.  
  218. if(number == null && startDate == null && stat == null)
  219. return fi;
  220. else{
  221. /*scorro tutta la lista alla ricerca dell'istanza di volo con number pari a number, status pari a stat e date >= startDate*/
  222. for (;it.hasNext();) {
  223.  
  224. if(startDate.get(Calendar.YEAR) < ((FlightInstanceReader)it).getDate().get(Calendar.YEAR))
  225. flag = true;
  226. else if(startDate.get(Calendar.MONTH) < ((FlightInstanceReader)it).getDate().get(Calendar.MONTH))
  227. flag = true;
  228. else if(startDate.get(Calendar.DAY_OF_MONTH) < ((FlightInstanceReader)it).getDate().get(Calendar.DAY_OF_MONTH))
  229. flag = true;
  230. else if(startDate.get(Calendar.HOUR) < ((FlightInstanceReader)it).getDate().get(Calendar.HOUR))
  231. flag = true;
  232. else if(startDate.get(Calendar.MINUTE) < ((FlightInstanceReader)it).getDate().get(Calendar.MINUTE))
  233. flag = true;
  234. else if(startDate.get(Calendar.SECOND) < ((FlightInstanceReader)it).getDate().get(Calendar.SECOND))
  235. flag = true;
  236.  
  237. if(number.equals(((FlightInstanceReader) it).getFlight().getNumber()) && stat.equals(((FlightInstanceReader) it).getStatus()) && flag == true)
  238. fi1.add((FlightInstanceReader)it.next());
  239.  
  240. flag = false;
  241. }
  242.  
  243. return fi1;
  244. }
  245. }
  246.  
  247. @Override
  248. public List<it.polito.dp2.FDS.FlightReader> getFlights(String dep, String arr, Time startTime) throws MalformedArgumentException {
  249. // TODO Auto-generated method stub
  250.  
  251. List<it.polito.dp2.FDS.FlightReader> fr1 = new LinkedList<it.polito.dp2.FDS.FlightReader>();/*lista di FlightReader locale*/
  252.  
  253. Iterator<it.polito.dp2.FDS.FlightReader> it = fr.iterator();
  254. /*se tutti e 3 i parametri passati sono pari a null, ritorno l'intera lista di FlightReader*/
  255. if(dep == null && arr == null && startTime == null)
  256. return fr;
  257. else{
  258. /*scorro tutta la lista alla ricerca del volo con departure pari a dep, arrivals pari a arr e time >= startTime*/
  259. for (;it.hasNext();) {
  260. if(dep.equals(((FlightReader) it).getDepartureAirport()) && arr.equals(((FlightReader) it).getDestinationAirport()) && (startTime.precedes((((FlightReader) it).getDepartureTime())) == true))
  261. fr1.add((FlightReader)it.next());
  262. }
  263. return fr1;
  264. }
  265. }
  266.  
  267. // Print out library contents
  268. /*public void printBooks()
  269. {
  270. Iterator<Aircraft> i = a.iterator();
  271. Aircraft book;
  272.  
  273. System.out.println("Elenco degli Aircrafts: ");
  274.  
  275. while (i.hasNext()) {
  276. book = i.next();
  277. System.out.println(book.model + " " + book.seats.size());
  278. }
  279.  
  280. System.out.println("Numero di Aircraft: " + a.size());
  281. }
  282.  
  283. public static void main(String args[]) throws FlightMonitorException, FactoryConfigurationError
  284. {
  285.  
  286. FlightMonitor dl = (FlightMonitor) FlightMonitorFactory.newInstance().newFlightMonitor();
  287.  
  288.  
  289. //FlightMonitor dl = new FlightMonitor();
  290.  
  291. Set<Aircraft> aa = new LinkedHashSet<Aircraft>();
  292.  
  293. aa.addAll(dl.getAircrafts());
  294.  
  295. dl.printBooks();
  296.  
  297. Iterator<Aircraft> i = aa.iterator();
  298. Aircraft book;
  299.  
  300. System.out.println("Elenco degli Aircrafts1: ");
  301.  
  302. while (i.hasNext()) {
  303. book = i.next();
  304. System.out.println(book.model + " " + book.seats.size());
  305. }
  306.  
  307. System.out.println("Numero di Aircraft: " + aa.size());
  308.  
  309.  
  310. /*stampa classe getAircraft*/
  311. /*Iterator<Aircraft> ii = dl.getAircrafts().iterator();
  312. Aircraft bookk;
  313.  
  314. System.out.println("Elenco degli AircraftsClasse: ");
  315.  
  316. while (ii.hasNext()) {
  317. bookk = ii.next();
  318. System.out.println(bookk.model + " " + bookk.seats.size());
  319. }
  320.  
  321. System.out.println("Numero di AircraftClasse: " + aa.size());
  322.  
  323.  
  324. /*stampa Set della Classe*/
  325. /*Iterator<Aircraft> iii = a.iterator();
  326. Aircraft bookkk;
  327.  
  328. System.out.println("Elenco degli AircraftsLocali: ");
  329.  
  330. while (iii.hasNext()) {
  331. bookkk = iii.next();
  332. System.out.println(bookkk.model + " " + bookkk.seats.size());
  333. }
  334.  
  335. System.out.println("Numero di AircraftLocali: " + a.size());
  336.  
  337. }*/
  338.  
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement