1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.functor.example.map;
18
19 import java.lang.reflect.Array;
20 import java.util.Map;
21
22 import org.apache.commons.functor.BinaryFunction;
23 import org.apache.commons.functor.BinaryProcedure;
24 import org.apache.commons.functor.adapter.BinaryProcedureBinaryFunction;
25 import org.apache.commons.functor.core.algorithm.GeneratorContains;
26 import org.apache.commons.functor.core.composite.UnaryNot;
27 import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
28
29
30
31
32
33 @SuppressWarnings("unchecked")
34 public class FixedSizeMap extends FunctoredMap {
35 public FixedSizeMap(Map map) {
36 super(map);
37 setOnPut(new BinaryFunction() {
38 public Object evaluate(Object a, Object b) {
39 Map map = (Map) a;
40 Object key = Array.get(b,0);
41 Object value = Array.get(b,1);
42 if (map.containsKey(key)) {
43 return map.put(key,value);
44 } else {
45 throw new IllegalArgumentException();
46 }
47 }
48 });
49
50 setOnPutAll(new BinaryProcedure() {
51 public void run(Object a, Object b) {
52 Map dest = (Map) a;
53 Map src = (Map) b;
54
55 if (GeneratorContains.instance().test(IteratorToGeneratorAdapter.adapt(src.keySet().iterator()),UnaryNot.not(new ContainsKey(dest)))) {
56 throw new IllegalArgumentException();
57 } else {
58 dest.putAll(src);
59 }
60 }
61 });
62
63 setOnRemove(new BinaryProcedureBinaryFunction(new Throw(new UnsupportedOperationException())));
64 setOnClear(new Throw(new UnsupportedOperationException()));
65 }
66 }