1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.beans.impl.flexi;
17
18 import java.util.AbstractMap;
19 import java.util.AbstractSet;
20 import java.util.Collections;
21 import java.util.Iterator;
22 import java.util.Map;
23 import java.util.Set;
24
25 import org.joda.beans.MetaBean;
26 import org.joda.beans.Property;
27 import org.joda.beans.PropertyMap;
28 import org.joda.beans.impl.BasicProperty;
29
30
31
32
33
34
35 final class FlexiPropertyMap
36 extends AbstractMap<String, Property<?>> implements PropertyMap {
37
38
39 private final FlexiBean bean;
40
41
42
43
44
45
46 static FlexiPropertyMap of(FlexiBean bean) {
47 return new FlexiPropertyMap(bean);
48 }
49
50
51
52
53
54
55 private FlexiPropertyMap(FlexiBean bean) {
56 if (bean == null) {
57 throw new NullPointerException("Bean must not be null");
58 }
59 this.bean = bean;
60 }
61
62
63 @Override
64 public int size() {
65 return bean.size();
66 }
67
68 @Override
69 public boolean containsKey(Object obj) {
70 return bean.data.containsKey(obj);
71 }
72
73 @Override
74 public Property<?> get(Object obj) {
75 return containsKey(obj) ? bean.property(obj.toString()) : null;
76 }
77
78 @Override
79 public Set<String> keySet() {
80 return bean.data.keySet();
81 }
82
83 @Override
84 public Set<Entry<String, Property<?>>> entrySet() {
85 if (size() == 0) {
86 return Collections.emptySet();
87 }
88 final MetaBean metaBean = bean.metaBean();
89 return new AbstractSet<Entry<String, Property<?>>>() {
90
91 @Override
92 public int size() {
93 return bean.size();
94 }
95 @Override
96 public Iterator<Entry<String, Property<?>>> iterator() {
97 final Iterator<String> it = bean.data.keySet().iterator();
98 return new Iterator<Entry<String, Property<?>>>() {
99 @Override
100 public boolean hasNext() {
101 return it.hasNext();
102 }
103 @Override
104 public Entry<String, Property<?>> next() {
105 String name = it.next();
106 Property<?> prop = BasicProperty.of(bean, FlexiMetaProperty.of(metaBean, name));
107 return new SimpleImmutableEntry<String, Property<?>>(name, prop);
108 }
109 @Override
110 public void remove() {
111 throw new UnsupportedOperationException("Unmodifiable");
112 }
113 };
114 }
115 };
116 }
117
118
119 @Override
120 public Map<String, Object> flatten() {
121 return bean.toMap();
122 }
123
124 }