View Javadoc

1   package org.catacomb.druid.market;
2   
3   import org.catacomb.interlish.structure.Dependent;
4   import org.catacomb.interlish.structure.Supplier;
5   
6   import java.util.ArrayList;
7   import java.util.HashMap;
8   
9   
10  
11  
12  public class SupplyClerk {
13  
14  
15      String modality;
16  
17      HashMap<String, ArrayList<Dependent>> itemDependents;
18  
19      HashMap<String, Object> lastSupplied;
20  
21  
22      public SupplyClerk(String s) {
23          modality = s;
24  
25          itemDependents = new HashMap<String, ArrayList<Dependent>>();
26          lastSupplied = new HashMap<String, Object>();
27  
28      }
29  
30  
31  
32      public void notifyAllIfChanged(Supplier supplier) {
33  
34          for (String item : itemDependents.keySet()) {
35  
36              Object value = supplier.get(modality, item);
37  
38              if (sameAsLast(item, value)) {
39  
40              } else {
41                  lastSupplied.put(item, value);
42                  sendTo(itemDependents.get(item), value);
43              }
44  
45          }
46  
47      }
48  
49  
50      private boolean sameAsLast(String s, Object val) {
51          boolean ret = false;
52          if (lastSupplied.containsKey(s)) {
53              Object oval = lastSupplied.get(s);
54              if (oval.equals(val)) {
55                  ret = true;
56              }
57          }
58  
59          return ret;
60      }
61  
62  
63  
64      private void sendTo(ArrayList<Dependent> arl, Object value) {
65          for (Dependent dep : arl) {
66              dep.newValue(value);
67          }
68      }
69  
70  
71  
72  
73      public void addDependent(Dependent dep) {
74          String s = dep.getInterestedIn();
75  
76          if (itemDependents.containsKey(s)) {
77              itemDependents.get(s).add(dep);
78  
79          } else {
80              ArrayList<Dependent> arl = new ArrayList<Dependent>();
81              arl.add(dep);
82              itemDependents.put(s, arl);
83          }
84      }
85  
86  
87  
88  
89  }