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 }