View Javadoc
1   package au.gov.amsa.ais.rx;
2   
3   import java.util.HashMap;
4   import java.util.Map;
5   import java.util.Map.Entry;
6   import java.util.TreeMap;
7   
8   public class CraftProperties {
9   
10  	private final Map<CraftPropertyName, TreeMap<Long, String>> map;
11  
12  	private final Mmsi mmsi;
13  
14  	public CraftProperties(Mmsi mmsi,
15  			Map<CraftPropertyName, TreeMap<Long, String>> map) {
16  		this.mmsi = mmsi;
17  		this.map = map;
18  	}
19  
20  	public CraftProperties(Mmsi mmsi) {
21  		this(mmsi, new HashMap<CraftPropertyName, TreeMap<Long, String>>());
22  	}
23  
24  	public Map<CraftPropertyName, TreeMap<Long, String>> getMap() {
25  		return map;
26  	}
27  
28  	public Mmsi getMmsi() {
29  		return mmsi;
30  	}
31  
32  	public CraftProperties add(CraftProperty p) {
33  		Map<CraftPropertyName, TreeMap<Long, String>> m = new HashMap<>(map);
34  		if (m.get(p.getName()) == null)
35  			m.put(p.getName(), new TreeMap<Long, String>());
36  		TreeMap<Long, String> tree = m.get(p.getName());
37  		Entry<Long, String> before = tree.floorEntry(p.getTime());
38  		Entry<Long, String> after = tree.ceilingEntry(p.getTime());
39  		if (before != null && before.getValue().equals(p.getValue()))
40  			return this;
41  		else {
42  			// replace before with p if same time
43  			if (after != null && after.getValue().equals(p.getValue()))
44  				tree.remove(after.getKey());
45  			tree.put(p.getTime(), p.getValue());
46  		}
47  		return new CraftProperties(mmsi, m);
48  	}
49  }