public Integer compare(ValueStore<V> other) {
    if (other.moneySystem != moneySystem) {
      return null;
    }

    V val = moneySystem.subtract(getValue(), other.getValue());
    return (moneySystem.isValueNothing(val) ? 0 : (moneySystem.isValueDeficit(val) ? -1 : 1));
  }
 public String toString(boolean longRepresentation) {
   return (longRepresentation
       ? moneySystem.getLongRepresentation(getValue())
       : moneySystem.getShortRepresentation(getValue()));
 }
 public boolean getIsNothing() {
   return moneySystem.isValueNothing(getValue());
 }
 public boolean equals(ValueStore<V> other) {
   return (other.moneySystem == moneySystem
       && moneySystem.isValueNothing(moneySystem.subtract(getValue(), other.getValue())));
 }
 public boolean getIsDeficit() {
   return moneySystem.isValueDeficit(getValue());
 }
 protected void loadData(Serializable data) {
   setValue(moneySystem.parseRepresentation((String) data));
 }
 public Serializable getData() {
   return moneySystem.getShortRepresentation(getValue());
 }
 public boolean subtractValue(V value) {
   return setValue(moneySystem.subtract(getValue(), value));
 }
 public boolean addValue(V value) {
   return setValue(moneySystem.add(getValue(), value));
 }