View Javadoc

1   package org.paneris.jammyjoes.mvp;
2   
3   import java.sql.Timestamp;
4   import java.util.Map;
5   
6   import org.paneris.jammyjoes.model.Graphable;
7   
8   public class CollectingCommand implements Command {
9   
10    private Map _bucket;
11    private TimesliceValue _maxValue;
12    private AffiliateTotals totals;
13    private TimesliceFactory _timesliceFactory;
14  
15    public CollectingCommand(Map bucket, TimesliceValue max, TimesliceFactory timesliceFactory, AffiliateTotals totals) {
16      _bucket = bucket;
17      _timesliceFactory = timesliceFactory;
18      _maxValue = max;
19      this.totals = totals;
20    }
21  
22    public Object visit(Object visited) {
23      Graphable item = (Graphable) visited;
24      EquatableComparable thisPeriod = _timesliceFactory.create(item.getDate());
25      TimesliceValue amount = (TimesliceValue) _bucket.get(thisPeriod);
26      if (amount == null) {
27        amount = new TimesliceValue(thisPeriod, 0);
28      }
29      amount.setValue(new Double(amount.doubleValue() + item.getAmountForGraph()));
30      item.total(totals);
31      _bucket.put(thisPeriod, amount);
32      if (amount.doubleValue() > _maxValue.doubleValue()) {
33        amount.copyInto(_maxValue);
34      }
35      return item;
36    }
37  
38    public void lastInteraction() {
39      EquatableComparable maxDate = _timesliceFactory.create(new Timestamp(_timesliceFactory.getEndDate().getTime()));
40      EquatableComparable earliest = maxDate.earliest();
41      EquatableComparable previous = maxDate.previous();
42      while (previous.compareTo(earliest) > -1) {
43        TimesliceValue previousTimeslice = new TimesliceValue(previous, 0);
44        if (!_bucket.containsKey(previous)) {
45          _bucket.put(previous,previousTimeslice);
46        }
47        previous = previousTimeslice._date.previous();
48      }
49    }
50  
51  }