1 /*
2 * Copyright (c) 2003
3 * Information Desire GmbH
4 * All rights reserved.
5 */
6 package com.infodesire.infobit.external.impl;
7
8 import com.infodesire.infobit.InfobitException;
9 import com.infodesire.infobit.InfobitManager;
10 import com.infodesire.infobit.InfobitSecurityException;
11
12 import com.infodesire.infobit.data.Acl;
13
14 import java.util.Collection;
15 import java.util.HashSet;
16 import java.util.Set;
17
18 /***
19 * This class describes a generic item to import.
20 *
21 * @author peter2
22 * @created August 28, 2003
23 * @version $Revision: 1.1 $
24 */
25 abstract class BufferNode {
26
27 /***
28 * Denotes the state of a node during depth-first search before the seach
29 * has discovered the node.
30 */
31 final static int WHITE = 0;
32
33 /***
34 * Denotes the state of a node during depth-first search while the children
35 * of the node are being processed.
36 */
37 final static int GRAY = 1;
38
39 /***
40 * Denotes the state of a node during depth-first search after all children
41 * of the node have been processed.
42 */
43 final static int BLACK = 2;
44
45 /***
46 * The collaborating manager
47 */
48 protected InfobitManager _manager;
49
50 /***
51 * The ACL used to persist the node
52 */
53 protected Acl _acl;
54
55 /***
56 * The state of the node during depth-first search. Legal values are
57 * constraint to {@link #WHITE}, {@link #GRAY} and {@link #BLACK}.
58 */
59 private int _color = WHITE;
60
61 /***
62 * A unique, ascending integer indicating the time when the node was first
63 * decovered during depth-first search.
64 */
65 private int _discoverTime;
66
67 /***
68 * A unique, ascending integer indicating when depth-first search has
69 * traversed all children of the node.
70 */
71 private int _completeTime;
72
73 /***
74 * The system ID of the location of the represented element, or <code>null</code>
75 * if not available.
76 */
77 private String _systemID;
78
79 /***
80 * The line of the location of the represented element, or <code>0</code> if
81 * not available
82 */
83 private int _line;
84
85 /***
86 * Set of all {@link BufferEdge edges} leaving this node
87 */
88 private Set _edges = new HashSet();
89
90 /***
91 * Set of all <em>incomming</em> edges. Set of {@link BufferEdge}.
92 */
93 private Set _dependents = new HashSet();
94
95
96 /***
97 * Restricted base class initialization.
98 */
99 protected BufferNode() {
100 }
101
102
103 /***
104 * Gets the {@link #setColor state} of the node during depth-first search.
105 *
106 * @return The Colur value
107 */
108 int getColor() {
109 return _color;
110 }
111
112
113 /***
114 * Gets the {@link #setDiscoverTime time of discovery}.
115 *
116 * @return The DiscoverTime value
117 */
118 int getDiscoverTime() {
119 return _discoverTime;
120 }
121
122
123 /***
124 * Gets the {@link #setCompleteTime completion time} of the node.
125 *
126 * @return The CompleteTime value
127 */
128 int getCompleteTime() {
129 return _completeTime;
130 }
131
132
133 /***
134 * Retrieves the collaborating infobit manager.
135 *
136 * @return The Manager value
137 */
138 InfobitManager getManager() {
139 return _manager;
140 }
141
142
143 /***
144 * Interface method defining all nodes (ie infobits or infobit versions)
145 * which the current node depends on.
146 *
147 * @return Collection of <code>BufferEdge</code>s the current node
148 * immediately depends on
149 */
150 abstract Collection getDependencies();
151
152
153 /***
154 * Gets all edges <em>leaving</em> the present node (edges to dependencies.
155 *
156 * @return A callee-owned set of {@link BufferEdge}s
157 */
158 Set getEdges() {
159 return _edges;
160 }
161
162
163 /***
164 * Gets all incomming edges.
165 *
166 * @return Callee-owned set of {@link BufferEdge}
167 */
168 Set getDependents() {
169 return _dependents;
170 }
171
172
173 /***
174 * Defines the state of the node during depth-first search.
175 *
176 * @param color The state, with legal value restricted to {@link #WHITE},
177 * {@link #GRAY} and {@link #BLACK}
178 */
179 void setColor(int color) {
180 _color = color;
181 }
182
183
184 /***
185 * Defines the <q>time</q> when the node was first discovered during
186 * depth-first search.
187 *
188 * @param t The new DiscoverTime value
189 */
190 void setDiscoverTime(int t) {
191 _discoverTime = t;
192 }
193
194
195 /***
196 * Defines the <q>timestamp</q> when depth-first has completed proccessing
197 * the node.
198 *
199 * @param t The new CompleteTime value
200 */
201 void setCompleteTime(int t) {
202 _completeTime = t;
203 }
204
205
206 /***
207 * Provides the collaborating buffer manager. The buffer manger needs
208 * sufficient permissions to create the infobits to be imported.
209 *
210 * @param manager The collaborating manager
211 */
212 void setManager(InfobitManager manager) {
213 _manager = manager;
214 }
215
216
217 /***
218 * Defines the acl used to persist the node.
219 *
220 * @param acl The new Acl value
221 */
222 void setAcl(Acl acl) {
223 _acl = acl;
224 }
225
226
227 /***
228 * Defines the location of the representing XML.
229 *
230 * @param systemID The system ID of the location
231 * @param line The line of the location
232 */
233 void setLocation(String systemID, int line) {
234 _systemID = systemID;
235 _line = line;
236 }
237
238
239 /***
240 * Interface method called to resolve the specified dependency.
241 *
242 * @param dependency The resolved depdendcy. Constraint to be contained in
243 * {@link #getDependencies} of the current node.
244 * @param value The persited instance represented by <code>dependency</code>
245 * . The actual subtype depends on the actual kind of the dependency.
246 */
247 abstract void resolveDependency(BufferNode dependency, Object value);
248
249
250 /***
251 * Interface method to persist the item (infobit or version) represented by
252 * the buffer. The method is called after all {@link #getDependencies
253 * dependencies} of the current node have been {@link #resolveDependency
254 * resolved}.
255 *
256 * @return If the node represents an infobit,
257 * it is returned; if it represents a version, <code>null</code> is
258 * returned.
259 * @exception InfobitException Indicates a generic error.
260 * @exception InfobitSecurityException Description of Exception
261 */
262 abstract Object persistBuffer()
263 throws InfobitException, InfobitSecurityException;
264
265
266 /***
267 * Yields the system ID of the location where the represented XML element
268 * starts.
269 *
270 * @return Description of the Returned Value
271 */
272 String locateSystemID() {
273 return _systemID;
274 }
275
276
277 /***
278 * Yields line information on the location where the represented XML element
279 * starts.
280 *
281 * @return Description of the Returned Value
282 */
283 int locateLine() {
284 return Math.max(0, _line);
285 }
286
287
288 /***
289 * Convenience method to define a dependency on the specified node. In
290 * particular, the specified node is connected to the current node by an
291 * {@link BufferEdge edge}.
292 *
293 * @param dependency The node on which the current instance depends
294 * @return The edge added to reach <code>dependency</code>
295 */
296 BufferEdge addDependency(BufferNode dependency) {
297 BufferEdge edge = new BufferEdge(dependency);
298 _edges.add(edge);
299 dependency.addDependent(edge);
300
301 return edge;
302 }
303
304
305 /***
306 * Registers an edge incident to the node.
307 *
308 * @param edge The feature to be added to the Dependent attribute
309 */
310 void addDependent(BufferEdge edge) {
311 _dependents.add(edge);
312 }
313
314 }
315
This page was automatically generated by Maven