package au.gov.amsa.navigation.ais; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import au.gov.amsa.navigation.Identifier; import com.google.common.base.Optional; public class VesselProperties { public static enum Key { DESTINATION; } private Map<Identifier, Map<Key, ValueAndTime>> map = new ConcurrentHashMap<Identifier, Map<Key, ValueAndTime>>(); public synchronized void add(Identifier id, Key key, Object value, long time) { Optional<Map<Key, ValueAndTime>> props = Optional.fromNullable(map.get(id)); HashMap<Key, ValueAndTime> p; if (!props.isPresent()) p = new HashMap<Key,ValueAndTime>(); else p = new HashMap<Key,ValueAndTime>(props.get()); Optional<ValueAndTime> v = Optional.fromNullable(p.get(key)); if (!v.isPresent() || v.get().getTime() <time) { p.put(key,new ValueAndTime(value, time)); map.put(id, p); } } }