/* * This code was generated using the UMPLE modeling language! Date of * generation: 2008/08/20 12:40:13 */ /* This class drives: RegularFlight */ package airlineMajorExample; import java.util.*; import airlineMajorExample.json.*; public class FlightTracker { // Class datatypes private String VANCOUVER = "YVR"; private String HONGKONG = "HKG"; private String SYDNEY = "SYD"; private String TORONTO = "YYZ"; private String BUENOSAIRES = "EZE"; private String SANTIAGO = "SCL"; private String CALGARY = "YYC"; private String OTTAWA = "YOW"; private String STJOHNS = "YYT"; private String HALIFAX = "YHZ"; private static FlightTracker theInstance = null; // Class association variables private Map regularFlights; // Registry of our system. AirlineMajorExampleRegistry registry = AirlineMajorExampleRegistry.getInstance(); // Constructor private FlightTracker() { regularFlights = new HashMap(); registry.add(regularFlights); } public static FlightTracker getInstance() { if (theInstance == null) theInstance = new FlightTracker(); return theInstance; } public boolean setVANCOUVER(String aVANCOUVER) { VANCOUVER = aVANCOUVER; return true; } public boolean setHONGKONG(String aHONGKONG) { HONGKONG = aHONGKONG; return true; } public boolean setSYDNEY(String aSYDNEY) { SYDNEY = aSYDNEY; return true; } public boolean setTORONTO(String aTORONTO) { TORONTO = aTORONTO; return true; } public boolean setBUENOSAIRES(String aBUENOSAIRES) { BUENOSAIRES = aBUENOSAIRES; return true; } public boolean setSANTIAGO(String aSANTIAGO) { SANTIAGO = aSANTIAGO; return true; } public boolean setCALGARY(String aCALGARY) { CALGARY = aCALGARY; return true; } public boolean setOTTAWA(String aOTTAWA) { OTTAWA = aOTTAWA; return true; } public boolean setSTJOHNS(String aSTJOHNS) { STJOHNS = aSTJOHNS; return true; } public boolean setHALIFAX(String aHALIFAX) { HALIFAX = aHALIFAX; return true; } public String getVANCOUVER() { return VANCOUVER; } public String getHONGKONG() { return HONGKONG; } public String getSYDNEY() { return SYDNEY; } public String getTORONTO() { return TORONTO; } public String getBUENOSAIRES() { return BUENOSAIRES; } public String getSANTIAGO() { return SANTIAGO; } public String getCALGARY() { return CALGARY; } public String getOTTAWA() { return OTTAWA; } public String getSTJOHNS() { return STJOHNS; } public String getHALIFAX() { return HALIFAX; } public Map getRegularFlights() { return regularFlights; } /* RegularFlight is unique with respect to FlightTracker */ public RegularFlight getRegularFlight(String aFlightNo) { return getRegularFlights().get(aFlightNo); } public RegularFlight addRegularFlight(String aFlightNo) { RegularFlight newRegularFlight; newRegularFlight = new RegularFlight(aFlightNo, this); if (!regularFlights.keySet().contains(aFlightNo)) { registry.add(newRegularFlight); regularFlights.put(aFlightNo, newRegularFlight); } return newRegularFlight; } public RegularFlight addRegularFlight(RegularFlight aRegularFlight) { if (!regularFlights.containsValue(aRegularFlight)) regularFlights.put(aRegularFlight.getFlightNo(), aRegularFlight); return aRegularFlight; } public void delete() { // Delete all many ends first. for (RegularFlight aRegularFlight : regularFlights.values()) { aRegularFlight.delete(); } regularFlights.clear(); } public void deleteRegularFlight(RegularFlight aRegularFlight) { if (regularFlights.containsValue(aRegularFlight)) { regularFlights.remove(aRegularFlight); // registry.removeObj(registry.getKey(aRegularFlight)); } else // Throw an UmpleException .. to be implemented. { } } public boolean areManyEndsNull() { if (regularFlights.size() == 0) { return true; } else return false; } /***************************************************************************** * Returns the attribute list along with the class ID in JSON format. ****************************************************************************/ public JSONObject getAttributes() throws JSONException { JSONObject obj = new JSONObject(); obj.put("CLASS_ID", registry.getKey(this)); obj.put("VANCOUVER", getVANCOUVER()); obj.put("HONGKONG", getHONGKONG()); obj.put("SYDNEY", getSYDNEY()); obj.put("TORONTO", getTORONTO()); obj.put("BUENOSAIRES", getBUENOSAIRES()); obj.put("SANTIAGO", getSANTIAGO()); obj.put("CALGARY", getCALGARY()); obj.put("OTTAWA", getOTTAWA()); obj.put("STJOHNS", getSTJOHNS()); obj.put("HALIFAX", getHALIFAX()); return obj; } public void executeQuery(int index) { switch (index) { case 1: queryFromAirportToAirport(TORONTO, VANCOUVER, true); break; case 2: queryFromAirportToAirport(SYDNEY, HONGKONG, true); break; case 3: findAllFlightsFrom(TORONTO); break; case 4: findAllFlightsFrom(SYDNEY); break; case 5: flightFromXtoYandStopsInZ(BUENOSAIRES, TORONTO, SANTIAGO); break; case 6: flightFromXtoYandStopsInZ(CALGARY, STJOHNS, OTTAWA); break; case 7: flightFromXtoYandStopsInZ(HALIFAX, VANCOUVER, TORONTO); break; case 8: flightFromXtoYandStopsInZ(TORONTO, VANCOUVER, HALIFAX); break; case 9: flightFromXtoYandStopsInZ(TORONTO, VANCOUVER, HALIFAX); break; case 10: findFlightsFromXToYOnDay(TORONTO, OTTAWA, "6"); break; case 11: queryFromAirportToAirport(TORONTO, OTTAWA, true); break; case 12: findFlightsFromXToYOnDay(VANCOUVER, TORONTO, "5"); break; case 13: queryFromAirportToAirport(VANCOUVER, TORONTO, true); break; case 14: findFlightsFromXToYOnDay(VANCOUVER, TORONTO, "56"); break; default: break; } } public void findFlightsFromXToYOnDay(String origin, String destination, String dayCode) { Collection possibleLegs = queryFromAirportToAirport(origin, destination, false); int counter = 0; Airport originAirport = getAirport(origin); Airport destAirport = getAirport(destination); if (originAirport == null) return; if (destAirport == null) return; System.out.print("Flights from " + originAirport + " to " + destAirport + " which fly on "); if (dayCode.indexOf('1') != -1) { System.out.print("Monday "); } if (dayCode.indexOf('2') != -1) { System.out.print("Tuesday "); } if (dayCode.indexOf('3') != -1) { System.out.print("Wednesday "); } if (dayCode.indexOf('4') != -1) { System.out.print("Thursday "); } if (dayCode.indexOf('5') != -1) { System.out.print("Friday "); } if (dayCode.indexOf('6') != -1) { System.out.print("Saturday "); } if (dayCode.indexOf('7') != -1) { System.out.print("Sunday "); } System.out.println("."); for (Object obj : possibleLegs) { if (hasScheduleInFrequency((RegularLeg) obj, dayCode)) { System.out.println(obj.toString()); counter++; } } System.out.println(counter + " flights in total."); } public Airport getAirport(String code) { for (RegularFlight regFlight : getRegularFlights().values()) { for (RegularLeg regLeg : regFlight.getRegularLegs()) { if (regLeg.getOrigin().getCode().equals(code)) return regLeg.getOrigin(); else if (regLeg.getDestination().getCode().equals(code)) return regLeg.getDestination(); } } System.out.println("Airport code " + code + " was invalid."); return null; } public void flightFromXtoYandStopsInZ(String origin, String destination, String stop) { Airport originAirport = getAirport(origin); if (originAirport == null) return; Airport destAirport = getAirport(destination); if (destAirport == null) return; Airport stopAirport = getAirport(stop); if (stopAirport == null) return; System.out.println("All flights from " + originAirport + " to " + destAirport + ", stopping in " + stopAirport); Collection fromAndTo = queryFromAirportToAirport(origin, destination, false); for (Object obj : fromAndTo) { RegularFlight regFlight = ((RegularLeg) obj).getRegularFlight(); if (hasFlightFromXtoY(origin, stop, regFlight) && hasFlightFromXtoY(stop, destination, regFlight)) System.out.println("Flight " + regFlight.getFlightNo()); } } public boolean hasFlightFromXtoY(String origin, String destination, RegularFlight regFlight) { Collection legs = regFlight.getRegularLegs(); for (RegularLeg leg : legs) { if (leg.getOrigin().getCode().equals(origin) && leg.getDestination().getCode().equals(destination)) return true; } return false; } public boolean hasScheduleInFrequency(RegularLeg regLeg, String freq) { Collection legSchedules = regLeg.getRegularLegSchedules(); String code = ""; if (freq.indexOf('1') != -1) { code += "1"; } if (freq.indexOf('2') != -1) { code += "2"; } if (freq.indexOf('3') != -1) { code += "3"; } if (freq.indexOf('4') != -1) { code += "4"; } if (freq.indexOf('5') != -1) { code += "5"; } if (freq.indexOf('6') != -1) { code += "6"; } if (freq.indexOf('7') != -1) { code += "7"; } for (RegularLegSchedule legSchedule : legSchedules) { if (legSchedule.getRegsched().toString().contains(freq)) return true; } return false; } public void findAllFlightsFrom(String code) { System.out.println("All flights from " + code); Airport airport = getAirport(code); if (airport == null) return; for (RegularLeg leg : airport.getFlightsFroms()) { System.out.println("Flight " + leg.getRegularFlight().getFlightNo() + " going to " + leg.getDestination().getName()); } } public Collection queryFromAirportToAirport(String originCode, String destCode, Boolean print) { int answerCounter = 0; // Collection allObjects = RuntimeRegistry.getInstance().getObjectSet(); Collection finalAnswer = new ArrayList(); Airport originAirport = getAirport(originCode); if (originAirport == null) return null; Airport destAirport = getAirport(destCode); if (destAirport == null) return null; if (print) System.out.println("All flights from " + originAirport + " to " + destAirport); for (RegularFlight regFlight : this.getRegularFlights().values()) { for (RegularLeg obj : regFlight.getRegularLegs()) { if (((RegularLeg) obj).getOrigin().getCode().equals(originCode) && ((RegularLeg) obj).getDestination().getCode().equals(destCode)) { RegularLeg regLeg = ((RegularLeg) obj); if (print) System.out.println("Flight number:" + regLeg.getRegularFlight().getFlightNo()); finalAnswer.add(regLeg); Collection regLegSchedules = regLeg.getRegularLegSchedules(); int counter = 0; for (RegularLegSchedule regLegSched : regLegSchedules) { counter++; int duration = Integer.parseInt(regLegSched.getArrTime()) + (24 * regLegSched.getMidnightCrossings()) - Integer.parseInt(regLegSched.getDepTime()); if (print) System.out.println(" Schedule " + counter + ", Flight duration " + (duration) + ", Frequency " // + regLegSched.getRegsched() // + " - " + regLegSched.getRegsched()); } answerCounter++; } } } if (print) System.out.println(answerCounter + " flights in total."); return finalAnswer; } }