Mercurial > hg > Members > shoshi > TreeCMSv2
comparison src/treecms/api/NodeData.java @ 14:8bf59f161b23
separete Node methods to NodeContext , NodeAttribute , NodeChildren
author | misaka |
---|---|
date | Tue, 17 May 2011 18:44:14 +0900 |
parents | c8601b0fa8a3 |
children | 22cd920986c5 |
comparison
equal
deleted
inserted
replaced
13:c8601b0fa8a3 | 14:8bf59f161b23 |
---|---|
1 package treecms.api; | 1 package treecms.api; |
2 | 2 |
3 import java.nio.ByteBuffer; | 3 import java.nio.ByteBuffer; |
4 | |
5 import java.util.ArrayList; | |
6 import java.util.Collections; | |
7 import java.util.HashMap; | |
8 import java.util.Iterator; | |
9 import java.util.List; | 4 import java.util.List; |
10 import java.util.Map; | 5 import java.util.Map; |
11 import java.util.Set; | 6 import java.util.Set; |
12 import org.apache.commons.collections.list.SetUniqueList; | 7 |
8 import treecms.tree.util.NodeChildrenImpl; | |
13 | 9 |
14 /** | 10 /** |
15 * Node が保持するデータのスナップショットです.Node を大きく変更するときや新しく作成される場合に使用されます. | 11 * Node が保持するデータのスナップショットです.Node を大きく変更するときや新しく作成される場合に使用されます. |
16 * 通常このクラスのインスタンスを Node から取得した場合,NodeData インスタンスに変更(set,add)を加えても元の Node に変更は反映されません. | 12 * 通常このクラスのインスタンスを Node から取得した場合,NodeData インスタンスに変更(set,add)を加えても元の Node に変更は反映されません. |
17 * その様に実装してください. | 13 * その様に実装してください. |
18 * | 14 * |
19 * このクラスは Node が保持するデータのうち 子供ノードのリスト・属性のマップ のみ保持しています.つまり,ノードが持っているはずの ID は保持していません. | 15 * このクラスは Node が保持するデータのうち 子供ノードのリスト・属性のマップ のみ保持しています.つまり,ノードが持っているはずの ID は保持していません. |
20 * getID,getForest を呼び出すと UnsupportedOperationException をスローします. | 16 * getID,getForest を呼び出すと UnsupportedOperationException をスローします. |
21 * @author shoshi | 17 * @author shoshi |
22 */ | 18 */ |
23 public final class NodeData implements Node | 19 public class NodeData<T extends Node<T>> implements NodeAttributes , NodeChildren<T> |
24 { | 20 { |
25 /** | 21 private NodeChildrenImpl<T> m_children; |
26 * 子供 Node の List | 22 private NodeAttributesImpl m_attrs; |
27 * 子供 Node の List は重複する Node を許可しない. | |
28 */ | |
29 private List<Node> m_children; | |
30 | 23 |
31 /** | 24 public NodeData(NodeChildren<T> _children,NodeAttributes _attrs) |
32 * Key と対応する Value の Map | |
33 */ | |
34 private Map<ByteBuffer,ByteBuffer> m_attrs; | |
35 | |
36 /** | |
37 * コンストラクタです.なにもしません | |
38 */ | |
39 public NodeData() | |
40 { | 25 { |
41 this(null); | 26 m_children = new NodeChildrenImpl<T>(); |
42 } | 27 m_attrs = new NodeAttributesImpl(); |
43 | |
44 /** | |
45 * コピーコンストラクタです. | |
46 * NodeData の内容を防御的にコピーします. | |
47 * @param _data | |
48 */ | |
49 public NodeData(NodeData _data) | |
50 { | |
51 if(_data != null){ | |
52 // SetUniqueList を使用することにより,List の重複要素を許可しない. | |
53 m_children = SetUniqueList.decorate(_data.m_children); | |
54 m_attrs = new HashMap<ByteBuffer,ByteBuffer>(_data.m_attrs); | |
55 return; | |
56 } | |
57 m_children = SetUniqueList.decorate(new ArrayList<Node>()); | |
58 m_attrs = new HashMap<ByteBuffer,ByteBuffer>(); | |
59 } | |
60 | |
61 /** | |
62 * 内部でコピーコンストラクタを呼び出します. | |
63 * @return この NodeData のコピー | |
64 */ | |
65 public NodeData deepCopy() | |
66 { | |
67 return new NodeData(this); | |
68 } | |
69 | |
70 @Override | |
71 public NodeID getID() | |
72 { | |
73 //このクラスはデータのみ保持する. | |
74 return null; | |
75 } | 28 } |
76 | 29 |
77 @Override | 30 @Override |
78 public NodeData getData() | 31 public List<T> getList() |
79 { | 32 { |
80 return new NodeData(this); | 33 return m_children.getList(); |
81 } | 34 } |
82 | 35 |
83 @Override | 36 @Override |
84 public Forest getForest() | 37 public Set<String> getUUIDSet() |
85 { | 38 { |
86 //このクラスはデータのみ保持する. | 39 return m_children.getUUIDSet(); |
87 return null; | |
88 } | 40 } |
89 | 41 |
90 /* | 42 @Override |
91 * 属性関連 | 43 public boolean add(T _child) |
92 */ | |
93 | |
94 public Set<ByteBuffer> keySet() | |
95 { | 44 { |
96 return m_attrs.keySet(); | 45 return m_children.add(_child); |
97 } | 46 } |
98 | 47 |
48 @Override | |
49 public boolean addAll(NodeChildren<T> _children) | |
50 { | |
51 return m_children.addAll(_children); | |
52 } | |
53 | |
54 @Override | |
55 public T get(String _uuid) | |
56 { | |
57 return m_children.get(_uuid); | |
58 } | |
59 | |
60 @Override | |
61 public T get(int _index) | |
62 { | |
63 return m_children.get(_index); | |
64 } | |
65 | |
66 @Override | |
67 public T remove(String _uuid) | |
68 { | |
69 return m_children.remove(_uuid); | |
70 } | |
71 | |
72 @Override | |
73 public T remove(int _index) | |
74 { | |
75 return m_children.remove(_index); | |
76 } | |
77 | |
78 @Override | |
79 public T replace(T _newChild) | |
80 { | |
81 return m_children.replace(_newChild); | |
82 } | |
83 | |
84 @Override | |
85 public boolean contains(String _id) | |
86 { | |
87 return m_children.contains(_id); | |
88 } | |
89 | |
90 @Override | |
91 public boolean swap(String _uuid1, String _uuid2) | |
92 { | |
93 return m_children.swap(_uuid1, _uuid2); | |
94 } | |
95 | |
96 @Override | |
97 public void clearChildren() | |
98 { | |
99 m_children.clearChildren(); | |
100 } | |
101 | |
102 @Override | |
103 public Map<ByteBuffer, ByteBuffer> asMap() | |
104 { | |
105 return m_attrs.asMap(); | |
106 } | |
107 | |
108 @Override | |
109 public Set<ByteBuffer> getKeySet() | |
110 { | |
111 return m_attrs.getKeySet(); | |
112 } | |
113 | |
114 @Override | |
115 public void put(ByteBuffer _name, ByteBuffer _value) | |
116 { | |
117 m_attrs.put(_name,_value); | |
118 } | |
119 | |
120 @Override | |
121 public void putAll(NodeAttributes _attrs) | |
122 { | |
123 m_attrs.putAll(_attrs); | |
124 } | |
125 | |
99 @Override | 126 @Override |
100 public ByteBuffer get(ByteBuffer _name) | 127 public ByteBuffer get(ByteBuffer _name) |
101 { | 128 { |
102 return m_attrs.get(_name); | 129 return m_attrs.get(_name); |
103 } | 130 } |
104 | 131 |
105 @Override | 132 @Override |
106 public Map<ByteBuffer,ByteBuffer> getAll() | 133 public NodeAttributes getAll() |
107 { | 134 { |
108 return Collections.unmodifiableMap(this.m_attrs); | 135 return m_attrs.getAll(); |
109 } | 136 } |
110 | 137 |
111 @Override | |
112 public void put(ByteBuffer _name,ByteBuffer _value) | |
113 { | |
114 m_attrs.put(_name,_value); | |
115 } | |
116 | |
117 @Override | |
118 public void putAll(Map<ByteBuffer,ByteBuffer> _map) | |
119 { | |
120 m_attrs.putAll(_map); | |
121 } | |
122 | |
123 @Override | 138 @Override |
124 public void remove(ByteBuffer _name) | 139 public void remove(ByteBuffer _name) |
125 { | 140 { |
126 m_attrs.remove(_name); | 141 m_attrs.remove(_name); |
127 } | 142 } |
128 | 143 |
129 @Override | 144 @Override |
130 public void removeAll(Set<ByteBuffer> _keySet) | 145 public void removeAll(Set<ByteBuffer> _keySet) |
131 { | 146 { |
132 for(ByteBuffer _key : _keySet){ | 147 m_attrs.removeAll(_keySet); |
133 m_attrs.remove(_key); | |
134 } | |
135 } | 148 } |
136 | 149 |
137 @Override | 150 @Override |
138 public void clear() | 151 public void clearAttributes() |
139 { | 152 { |
140 m_attrs.clear(); | 153 m_attrs.clearAttributes(); |
141 } | |
142 | |
143 /* | |
144 * 子供関連 | |
145 */ | |
146 | |
147 @Override | |
148 public Iterator<Node> getChildren() | |
149 { | |
150 return Collections.unmodifiableList(m_children).iterator(); | |
151 } | |
152 | |
153 @Override | |
154 public void addChild(Node _child) | |
155 { | |
156 m_children.add(_child); | |
157 } | |
158 | |
159 @Override | |
160 public void addChildren(List<Node> _child) | |
161 { | |
162 m_children.addAll(_child); | |
163 } | |
164 | |
165 @Override | |
166 public void removeChild(Node _child) | |
167 { | |
168 m_children.remove(_child); | |
169 } | |
170 | |
171 @Override | |
172 public void removeChildren(List<Node> _child) | |
173 { | |
174 m_children.removeAll(_child); | |
175 } | |
176 | |
177 @Override | |
178 public void clearChildren() | |
179 { | |
180 m_children.clear(); | |
181 } | |
182 | |
183 @Override | |
184 public Node cloneNode(NodeData _data) | |
185 { | |
186 throw new UnsupportedOperationException(); | |
187 } | 154 } |
188 } | 155 } |