added fleet api classes
[fleet.git] / src / edu / berkeley / fleet / Ship.java
1 package edu.berkeley.fleet;
2
3 import edu.berkeley.sbp.chr.*;
4 import edu.berkeley.sbp.misc.*;
5 import edu.berkeley.sbp.meta.*;
6 import edu.berkeley.sbp.bind.*;
7 import edu.berkeley.sbp.util.*;
8 import java.util.*;
9 import java.io.*;
10
11 /** a ship, which belongs to a fleet and which may have many ports */
12 public abstract class Ship {
13         
14     ArrayList<Port> portlist = new ArrayList<Port>();
15     private HashMap<String,Port> ports = new HashMap<String,Port>();
16
17     private String name;
18     private Fleet fleet;
19
20     /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
21     public Ship(Fleet fleet, String name) {
22         this.name = name;
23         this.fleet = fleet;
24         fleet.shiplist.add(this);
25         fleet.ships.put(name, this);
26     }
27
28     public Port getPort(String s) {
29         Port p = ports.get(s);
30         if (p == null) throw new RuntimeException("unknown port \""+name+"."+s+"\"");
31         return p;
32     }
33
34     public String getBalsaName() { return name; }
35     public String getName() { return name; }
36     public String toString() { return name; }
37
38     public Fleet getFleet() { return fleet; }
39
40     /**
41      *  Override this method, check inboxes for the data you need, and
42      *  if you find it, deposit results in an outbox; we'll take care
43      *  of the rest.
44      */
45     public abstract void service();
46
47     public final void _service() {
48         for(Port p : ports.values()) p.service();
49         service();
50     }
51
52     void addPort(String name, Port port) {
53         portlist.add(port);
54         ports.put(name, port);
55     }
56
57     public void shutdown() {
58         for(Port p : ports.values())
59             p.shutdown();
60     }
61
62     public int resolveShipSpecificConstant(String shipSpecificData) {
63         throw new RuntimeException("don't know how to resolve \""+shipSpecificData+"\"");
64     }
65 }