Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/util/RedundancyRemover.java @ 662:755dd2fa4a0a 0.5
merged geo-backend/0.5
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:13:53 +0200 |
parents | 825781a39c70 |
children | 1c3efbd2fc5a |
rev | line source |
---|---|
555
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.gnv.geobackend.util; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 import java.util.LinkedHashMap; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 import java.util.Map; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 /** |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 */ |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 public final class RedundancyRemover |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 extends LinkedHashMap |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 /** ceil(1029 * 1.75) = 1801, which is prime |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 * -> suitable for a hash map slot size. |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 */ |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 public static final int DEFAULT_LOOKBACK = |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 Integer.getInteger( |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 "de.intevation.gnv.geobackend.util.RedundancyRemover.lookback", |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 1029); |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 private int maxCapacity; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 private int removed; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 public RedundancyRemover() { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 this(DEFAULT_LOOKBACK); |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 public RedundancyRemover(int maxCapacity) { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 super((int)Math.ceil(maxCapacity * 1.75f)); |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 this.maxCapacity = maxCapacity; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 protected boolean removeEldestEntry(Map.Entry eldest) { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 return size() > maxCapacity; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 public int numRemoved() { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 return removed; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 public Object filter(Object object) { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 if (object == null) { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 return object; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 Object old = get(object); |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 if (old != null) { |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 if (old != object) { // count only identical |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 ++removed; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 return old; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 put(object, object); |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 return object; |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 } |
825781a39c70
Fixed gnv/issue107
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |