1 package com.atlassian.cache.hazelcast;
2
3 import java.util.Map;
4
5 import com.hazelcast.map.AbstractEntryProcessor;
6
7 class IncrementVersionEntryProcessor<K> extends AbstractEntryProcessor<K, Long>
8 {
9 private static final IncrementVersionEntryProcessor<Object> INSTANCE =
10 new IncrementVersionEntryProcessor<Object>(false);
11 private static final IncrementVersionEntryProcessor<Object> UPDATING_INSTANCE =
12 new IncrementVersionEntryProcessor<Object>(true);
13
14 protected static <T> IncrementVersionEntryProcessor<T> getInstance()
15 {
16 return (IncrementVersionEntryProcessor<T>) INSTANCE;
17 }
18
19 protected static <T> IncrementVersionEntryProcessor<T> getUpdatingInstance()
20 {
21 return (IncrementVersionEntryProcessor<T>) UPDATING_INSTANCE;
22 }
23
24 private final boolean update;
25
26 private IncrementVersionEntryProcessor(boolean update)
27 {
28 this.update = update;
29 }
30
31 @Override
32 public Object process(Map.Entry<K, Long> entry)
33 {
34 Long value = entry.getValue();
35 value = value == null ? 1L : value + 1L;
36 if (update)
37 {
38 entry.setValue(value);
39 }
40 return value;
41 }
42 }