Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: Model.java   Sprache: JAVA

Original von: VDM©

package gui;

import java.awt.Point;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Observable;
import java.util.Vector;

class Model extends Observable implements Serializable {
    
 private static final long serialVersionUID = 1L;

    transient Map<Integer, Passenger> passengers = new HashMap<Integer, Passenger>();
    transient Vector<Integer> passengersOnBus = new Vector<Integer>();
    
    transient Map<String, Road> roads = new HashMap<String, Road>();
    transient Map<Integer, Bus> buses = new HashMap<Integer, Bus>();
    transient Map<String, Waypoint> waypoints = new HashMap<String, Waypoint>();
    transient List<String> busAndrouteStms = new LinkedList<String>();
    
 private final static String dbConnStr = "jdbc:h2:bus"//from application dir
 //private final static String dbConnStr = "jdbc:h2:~/bus"; //from user dir

 private Object lock;
    private int inflow;
 private int currentPlan;
 private int planCount;
    
    public Model() throws ClassNotFoundException, SQLException {
     inflow = 0;
     currentPlan = 1;
     planCount = 0;
     lock = new Object();
     
     Connection conn = null;
     Statement plansStm = null;
     
     try
     {
      conn = DriverManager.getConnection(dbConnStr, "sa""");
         plansStm = conn.createStatement();
         ResultSet plans = plansStm.executeQuery("SELECT COUNT(*) FROM Plan");
         plans.next();
         planCount = plans.getInt(1);
         if(planCount < 1) 
          throw new SQLException("No busplans in database");
     } finally {
      if(plansStm != null)
       plansStm.close();
      if(conn != null)
       conn.close();
        }
     
    }

    public void nextPlan() throws SQLException
    {
     if(currentPlan >= planCount)
     {
      currentPlan = 0;
     }
     currentPlan++;
     loadPlan(currentPlan);
    }
    
    public void prevPlan() throws SQLException
    {
     currentPlan--;
     if(currentPlan <= 0)
     {
      currentPlan = planCount;
     }
     
     loadPlan(currentPlan);
    }
    
    public void loadPlan() throws SQLException{
     loadPlan(1);
    }
    
 private void loadPlan(int planid) throws SQLException { 
  
  roads.clear();
  waypoints.clear();
  busAndrouteStms.clear();
  
  Connection conn = null;
     Statement plansStm = null;
     try
     {
      //open db
         //conn = DriverManager.getConnection("jdbc:h2:~/bus", "sa", ""); 
      //conn = DriverManager.getConnection("jdbc:h2:bus", "sa", ""); 
      conn = DriverManager.getConnection(dbConnStr, "sa""");
      
         plansStm = conn.createStatement();
         //get all waypoints
         loadAllWps(conn, planid);
         //get all roads in plan
         ResultSet rds = plansStm.executeQuery("SELECT r.id, r.name, r.highspeed, r.wp1, wp.name AS wp1Name, r.wp2, wp2.name AS wp2Name, " +
           "CASE WHEN rp.id IS NULL THEN false ELSE true END as roadparts " + 
           "FROM ROAD r " +
           "LEFT JOIN ROADPART rp on r.ID = rp.roadid " +
           "LEFT JOIN WAYPOINT wp on wp.ID = r.wp1 " +
           "LEFT JOIN WAYPOINT wp2 on wp2.ID = r.wp2 " +
           "WHERE r.PLANID = " + planid);
         Road tRoad;
         //build roads
         while (rds.next()) {
          tRoad = new Road(rds.getString("name"), waypoints.get(rds.getString("wp1Name")), waypoints.get(rds.getString("wp2Name")));
          tRoad.setHighspeed( rds.getBoolean("highspeed"));
          if(rds.getBoolean("roadparts")){
           loadRoadparts(conn, rds.getInt("id"), tRoad);
          }
          roads.put(tRoad.name(), tRoad);
         }
         plansStm.close();
         
         loadbus(conn, planid);
         
         setChanged();
            notifyObservers("planUpdated");
         
     } finally {
         if(conn != null)
         conn.close();
        }
 }
 
 private void loadbus(Connection conn, int planid) throws SQLException {
  
  Statement busStm = conn.createStatement();
  ResultSet buses = busStm.executeQuery("SELECT id, name FROM bus WHERE planid = " + planid);
  
  int busid = 0;
  while(buses.next()){
   busid = buses.getInt("id");
   String route = loadBusRoute(conn, busid, buses.getString("name"));
   busAndrouteStms.add(route);
   System.out.println(route);
  }
 }
 
 
 private String loadBusRoute(Connection conn, int busid, String name) throws SQLException {
  Statement routestm = conn.createStatement();
  ResultSet busRoute = routestm.executeQuery("SELECT r.name FROM busroute b, road r WHERE b.road = r.id AND busid = " + busid );
  
  StringBuilder strBld = new StringBuilder();
  strBld.append(name);
  strBld.append(",[");
  while (busRoute.next()) {
   strBld.append("<");
   strBld.append(busRoute.getString("name"));
   strBld.append(">, "); 
  }
  strBld.replace(strBld.length()-2, strBld.length(), "]");
  return strBld.toString();
 }

 private void loadAllWps(Connection conn, int planid) throws SQLException{
  
  Statement wpsStm = null;
        wpsStm = conn.createStatement();
        ResultSet wps = wpsStm.executeQuery("SELECT name, x,y, stop FROM WAYPOINT WHERE planid = " + planid);
     
     Waypoint tWp;
        while (wps.next()) {            
            tWp = new Waypoint(wps.getString("name"), new Point(wps.getInt("x"), wps.getInt("y")), wps.getBoolean("stop"));
            waypoints.put(tWp.Name(), tWp);
        }
     wpsStm.close();
 }
 
    private void loadRoadparts(Connection conn, int roadid, Road road) throws SQLException {

     Statement wpsStm = null;
        wpsStm = conn.createStatement();
        ResultSet roadPrts = wpsStm.executeQuery("SELECT startx, starty, endX , endy FROM ROADPART WHERE ROADID = " + roadid + " ORDER BY PRIORITY" );
        road.clearPreviousRoad();
        while (roadPrts.next()) {
         road.addRoadPart(roadPrts.getInt("startx"), roadPrts.getInt("starty"), roadPrts.getInt("endx"), roadPrts.getInt("endy"));
        }
     wpsStm.close();
 }
    
    public synchronized void move(){
     
     for (Bus b : buses.values()) {
   b.move();
  }
     
     setChanged();
        notifyObservers("move");
    }
    
    public void busInRouteTo(int busid, String roadid, String waypoint, int time){
     
        Waypoint wp = waypoints.get(waypoint);
     Road r = roads.get(roadid);
     List<Point> coords = r.getCoordinatesGoingFrom(wp);
     Bus b = buses.get(busid);
     b.setRoute(coords, time);
    }
    
 public synchronized void passengerAtCentral(int id, String goal) {
  
  passengers.put(id, new Passenger(id, goal));
  
  setChanged();
        notifyObservers("passengerAdded");
 }
 
 public synchronized void passengerAnnoyed(int id) {
  
  passengers.get(id).setAnnoyed(true);
  
  setChanged();
        notifyObservers("passengerAnnoyed");
 }
 
 public synchronized void passengerGotOnBus(int id) {
  
  passengers.get(id).gotOnBus();
  
  synchronized (lock) {
   passengersOnBus.add(id);
  }

  Thread runner = new Thread(new Runnable(){
    public void run(){
     
     try{
      Thread.sleep(750);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     
     synchronized (lock) {
         //remove passenger that got on a bus
      if(!passengersOnBus.isEmpty()) {
       
       for (int i : passengersOnBus) {
         passengers.remove(i);
       }
       passengersOnBus.clear();
      }
     }
    }

  });
  runner.start();
  
  setChanged();
        notifyObservers("passengerGotOnBus");
 }
 
 public synchronized void inflowChanged(int flow) {
  
  inflow = flow; 
  
  setChanged();
        notifyObservers("inflowChanged");
 }
 
 public void busArrived(int busline) {
  
  Bus b = buses.get(busline);
  b.busArrived();
  
  setChanged();
        notifyObservers("busStopping");
 }
 
 public void busAdded(int busline) {
  
        Bus bs;
        
        bs = new Bus(busline, waypoints.get("Central").point());
        buses.put(bs.lineNr(), bs);
  
  setChanged();
        notifyObservers("busAdded");
 }
 
 public void busPassengerCountChanged(int busline, int count) {
  
  Bus b = buses.get(busline);
  b.setPassengerCount(count);
  
  setChanged();
        notifyObservers("busPassengerCount");
 }
 
 public synchronized Collection<Passenger> getPassengers(){
  return new LinkedList<Passenger>(passengers.values());
 }
 
 public Collection<String> getBusStms(){
  return busAndrouteStms;
 }
 
 public synchronized int getInflow()
 {
  return inflow;
 }

 public void setLimits(int xLimit, int yLimit) {

        // Notify observers
       setChanged();
       notifyObservers("limits");
   }

 public synchronized Collection<Bus> getBuses() {
  
  return buses.values();
 }
 
 public Collection<Road> getRoads() {
  return roads.values();
 }
 
 public Collection<Waypoint> getWaypoints() {
  return waypoints.values();
 } 
}

¤ Dauer der Verarbeitung: 0.2 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik