package postingrules; /*Generated by MPS */ import java.util.Map; import mf.TemporalCollection; import java.util.HashMap; import mf.SingleTemporalCollection; import mf.MfDate; public class ServiceAgreement { private Map<String, TemporalCollection> myValues = new HashMap<String, TemporalCollection>(); private Map myPostingRules = new HashMap(); public ServiceAgreement() { } public void registerValue(String key) { myValues.put(key, new SingleTemporalCollection()); } public void addPostingRule(EventType eventType, PostingRule rule, MfDate date) { if (myPostingRules.get(eventType) == null) { myPostingRules.put(eventType, new SingleTemporalCollection()); } getRulesTemporalCollectionFor(eventType).put(date, rule); } private TemporalCollection getRulesTemporalCollectionFor(EventType eventType) { TemporalCollection result = (TemporalCollection) myPostingRules.get(eventType); assert result != null; return result; } public double getRate(MfDate at) { return (Double) myValues.get("base_rate").get(at); } public void process(AccountingEvent e) { getPostingRule(e).process(e); } private PostingRule getPostingRule(AccountingEvent event) { final TemporalCollection rules = getRulesTemporalCollectionFor(event.getEventType()); if (rules == null) { throw new MissingPostingRuleException(); } try { return (PostingRule) rules.get(event.getWhenOccurred()); } catch (IllegalArgumentException e) { throw new MissingPostingRuleException(); } } public void setValue(String key, Object value, MfDate effectiveDate) { myValues.get(key).put(effectiveDate, value); } public Object getValue(String key, MfDate at) { return myValues.get(key).get(at); } }