package acme.dataapp; import java.io.InputStream; import java.util.Iterator; import org.apache.wink.json4j.JSONArray; import org.apache.wink.json4j.JSONException; import org.apache.wink.json4j.JSONObject; /** * controls the current state of the flights * */ public class FlightController { final static String FLIGHTSTATE = "flightcontroller.json"; static FlightController fc = null; private JSONObject flightController = null; private FlightController() { InputStream is = this.getClass().getResourceAsStream(FLIGHTSTATE); load(is); } /** * gets the single instance to the flight controller * * @return */ public static FlightController getInstance() { if (fc == null) { fc = new FlightController(); } return fc; } /** * loads the codes from a path * * @param codestream */ public void load(InputStream codestream) { try { flightController = new JSONObject(codestream); } catch (JSONException e) { e.printStackTrace(); } } /** * gets the flight status and returns as a String * * @param flightId * @return */ public String getFlightStatus(String flightId) { String res = ""; try { JSONArray flts = (JSONArray) flightController.get("controller"); @SuppressWarnings("rawtypes") Iterator iter = flts.iterator(); boolean found = false; while (iter.hasNext() && !found) { JSONObject i = (JSONObject) iter.next(); String flight = i.getString("Flight"); if (flightId.compareTo(flight) == 0) { res = i.getString("State"); found = true; } } } catch (Exception e) { e.printStackTrace(); } return res; } /** * updates the flight status of the given flight * @param flightId * @param state */ public void updateFlightStatus(String flightId, String state) { this.removeFlightStatus(flightId); this.addFlight(flightId, state); } /** * removes the flight and the associated status * @param flightId */ public void removeFlightStatus(String flightId) { try { JSONArray flts = (JSONArray) flightController.get("controller"); @SuppressWarnings("rawtypes") Iterator iter = flts.iterator(); boolean found = false; while (iter.hasNext() && !found) { JSONObject i = (JSONObject) iter.next(); String flight = i.getString("Flight"); if (flightId.compareTo(flight) == 0) { flts.remove(i); found = true; } } flightController.remove("controller"); flightController.put("controller",flts); } catch (Exception e) { e.printStackTrace(); } } /** * adds a flight to the list * @param flightId * @param state */ public void addFlight(String flightId, String state) { try { JSONArray flts = (JSONArray) flightController.get("controller"); JSONObject o = new JSONObject(); o.put("Flight", flightId); o.put("State", state); flts.add(o); flightController.remove("controller"); flightController.put("controller",flts); } catch (Exception e) { e.printStackTrace(); } } /** * returns all the flight statuses * @return */ public JSONObject getAllFlightStatus() { return flightController; } }