public Route clone() { Route r = new Route(this.nw, this.id, this.period); r.emptyDistance = this.emptyDistance; r.loadedDistance = this.loadedDistance; r.waitTime = this.waitTime; // This clone copies the TA as well not just reference. int taskSetSize = taskSet.size(); for (int i = 0; i < taskSetSize; i++) { r.taskSet.add(taskSet.get(i).clone()); } return r; }
/** * get all the routes that has been assigned from the database save into Vector<Route> to be used * by Change.java controller * * @return */ public Vector<Route> getRoutes() { DBManager m = new DBManager(); ResultSet rs = m.getRs( "SELECT r.id AS route_id,s.sessionID,session_driverName," + "session_vehicleID,startTime,expireTime,status,shift_normal_start_time " + "FROM Route r,Session s WHERE s.sessionID = r.sessionID"); Vector<Route> routes = new Vector<Route>(); try { while (rs.next()) { int route_id = rs.getInt("route_id"); int sessionID = rs.getInt("sessionID"); String driverName = rs.getString("session_driverName"); String vehicleID = rs.getString("session_vehicleID"); long startTime = Long.parseLong(rs.getString("startTime")); long expireTime = Long.parseLong(rs.getString("expireTime")); int status = rs.getInt( "status"); // status, 0:UNASSIGNED, 1:ASSIGNED£¬2£ºSESSION_SUSPENDED£¬ // 3£ºSESSION_ENDED Calendar shift_normal_start_time = StringToCalendar(rs.getString("shift_normal_start_time")); // TODO:What is Network and period Route route = new Route(null, route_id, 0); XMLSession session = new XMLSession(driverName, vehicleID, startTime, expireTime); route.setSession(session); route.setStatus(intToStatus(status)); ; // TODO:HOW to use the shift_normal_start_time? Vector<Task> taskSet = new Vector<Task>(); ResultSet rss = m.getRs( "SELECT t.id AS task_id, t.commodity_id,sequence_num," + "t.small AS task_small,t.large AS task_large,planned_start,planned_finish," + "actual_start,actual_finish,source,destination,available_t,deadline," + "c.small AS com_small, c.large AS com_large,finished_small,finished_large " + "FROM Route r, Task t, Commodity c " + "WHERE r.id = t.route_id AND t.commodity_id = c.id AND r.id =" + route_id + " " + "ORDER BY sequence_num ASC"); while (rss.next()) { int task_id = rss.getInt("task_id"); String commodity_id = rss.getString("commodity_id"); // int sequenceNo = rss.getInt("sequence_num"); int task_small = rss.getInt("task_small"); int task_large = rss.getInt("task_large"); Calendar planned_start = StringToCalendar(rss.getString("planned_start")); Calendar planned_finish = StringToCalendar(rss.getString("planned_finish")); Calendar actual_start = StringToCalendar(rss.getString("actual_start")); Calendar actual_finish = StringToCalendar(rss.getString("actual_finish")); String source = rss.getString("source"); String destination = rss.getString("destination"); Calendar available_t = StringToCalendar(rss.getString("available_t")); Calendar deadline = StringToCalendar(rss.getString("deadline")); int com_small = rss.getInt("com_small"); int com_large = rss.getInt("com_large"); int finished_small = rss.getInt("com_small"); int finished_large = rss.getInt("com_large"); Task t = new Task(); // TODO:WHAT IS loadTime and unloadTime Node src = new Node(source, 0, 0); Node des = new Node(destination, 0, 0); Commodity c = new Commodity(commodity_id, available_t, deadline, src, des, com_small, com_large); t.cmdt = c; t.taskID = task_id; // TODO:Not sure if its right.. if (task_small > 0) { t.size = 1; } else { t.size = 2; } t.startT = planned_start; t.finishT = planned_finish; t.actualStartT = actual_start; t.actualFinishT = actual_finish; t.driver = driverName; t.vehicleID = vehicleID; taskSet.add(t); } route.taskSet = taskSet; routes.add(route); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return routes; }