View Javadoc
1   package de.fhdw.wtf.context.core;
2   
3   import java.math.BigInteger;
4   import java.util.Collection;
5   
6   import de.fhdw.wtf.persistence.facade.TypeManager;
7   import de.fhdw.wtf.persistence.meta.Link;
8   import de.fhdw.wtf.persistence.meta.MapLink;
9   import de.fhdw.wtf.persistence.meta.Object;
10  import de.fhdw.wtf.persistence.meta.UnidirectionalLink;
11  import de.fhdw.wtf.persistence.meta.UserObject;
12  import de.fhdw.wtf.persistence.utils.Tuple;
13  
14  /**
15   * A Context represents the facade for interacting with the persistence layer. The Context is stored in a thread local
16   * variable to be accessible to all objects in the current thread. A Context is usually published to the thread by User
17   * Access.
18   * 
19   */
20  public abstract class Context {
21  	
22  	/**
23  	 * The per-transaction object cache.
24  	 */
25  	private final IAnyTypeCache cache = new IAnyTypeCache();
26  	
27  	/**
28  	 * Returns the object cache.
29  	 * 
30  	 * @return The object cache.
31  	 */
32  	public IAnyTypeCache getCache() {
33  		return this.cache;
34  	}
35  	
36  	/**
37  	 * This method provides a Collection of User Object which have an association with a specified name and a given
38  	 * target value.
39  	 * 
40  	 * @param associationName
41  	 *            The name of the association on which the find will operate.
42  	 * @param value
43  	 *            The String value of the association on which the find operates.
44  	 * @return A Collection of UserObjects which conform to the find query.
45  	 */
46  	public abstract Collection<UserObject> find(String associationName, String value);
47  	
48  	/**
49  	 * This method provides a Collection of User Object which have an association with a specified name and a given
50  	 * target value.
51  	 * 
52  	 * @param associationName
53  	 *            The name of the association on which the find will operate.
54  	 * @param value
55  	 *            The Integer value of the association on which the find operates.
56  	 * @return A Collection of UserObjects which conform to the find query.
57  	 */
58  	public abstract Collection<UserObject> find(String associationName, BigInteger value);
59  	
60  	/**
61  	 * This method provides the owner and the UnidirectionalLink, which is an instance of an association with a given
62  	 * name and which has a specified UserObject as target.
63  	 * 
64  	 * @param associationName
65  	 *            The name of the association.
66  	 * @param object
67  	 *            The target object of the association.
68  	 * @return Provides a Collection of Tuples of Links and UserObject which conform to the search query.
69  	 */
70  	public abstract Collection<Tuple<UnidirectionalLink, UserObject>> inverseGet(String associationName,
71  			UserObject object);
72  	
73  	/**
74  	 * Provides a Collection of Tuples of Links and their target. The provided Links will have the provided object as an
75  	 * owner and are instances of an association with the provided name.
76  	 * 
77  	 * @param object
78  	 *            The owner of the Links.
79  	 * @param associationName
80  	 *            The name of the association which is the type of the links.
81  	 * @return Provides a Collection of Links.
82  	 */
83  	public abstract Collection<Tuple<UnidirectionalLink, Object>> get(UserObject object, String associationName);
84  	
85  	/**
86  	 * Provides a Collection of Tuples of Keyed-Links and their target. The provided Links will have the provided object
87  	 * as an owner and are instances of an association with the provided name and key.
88  	 * 
89  	 * @param object
90  	 *            The owner of the Links.
91  	 * @param associationName
92  	 *            The name of the association which is the type of the links. The target of this link represents a
93  	 *            MutableMap.
94  	 * @param key
95  	 *            The key to get the value for in the map.
96  	 * @return Provides a Collection of Links.
97  	 */
98  	public abstract Collection<Tuple<MapLink, Object>> get(UserObject object, String associationName, String key);
99  	
100 	/**
101 	 * Provides a Collection of Tuples of Keyed-Links and their target. The provided Links will have the provided object
102 	 * as an owner and are instances of an association with the provided name and key.
103 	 * 
104 	 * @param object
105 	 *            The owner of the Links.
106 	 * @param associationName
107 	 *            The name of the association which is the type of the links. The target of this link represents a
108 	 *            MutableMap.
109 	 * @param key
110 	 *            The key to get the value for in the map.
111 	 * @return Provides a Collection of Links.
112 	 */
113 	public abstract Collection<Tuple<MapLink, Object>> get(UserObject object, String associationName, BigInteger key);
114 	
115 	/**
116 	 * Provides a Collection of Tuples of Keyed-Links and their target. The provided Links will have the provided object
117 	 * as an owner and are instances of an association with the provided name and key.
118 	 * 
119 	 * @param object
120 	 *            The owner of the Links.
121 	 * @param associationName
122 	 *            The name of the association which is the type of the links. The target of this link represents a
123 	 *            MutableMap.
124 	 * @param key
125 	 *            The key to get the value for in the map.
126 	 * @return Provides a Collection of Links.
127 	 */
128 	public abstract Collection<Tuple<MapLink, Object>> get(UserObject object, String associationName, UserObject key);
129 	
130 	/**
131 	 * Provides an instance of a Type with a given name.
132 	 * 
133 	 * @param typeName
134 	 *            The name of the UserType.
135 	 * @return Provides a new User Object.
136 	 */
137 	public abstract UserObject create(String typeName);
138 	
139 	/**
140 	 * Creates a new UnidirectionalLink which has the provided object as owner and the provided String as target.
141 	 * 
142 	 * @param object
143 	 *            The owner of the newly created UnidirectionalLink.
144 	 * @param associationName
145 	 *            The name of the association which is the Type of the created UnidirectionalLink.
146 	 * @param val
147 	 *            The String Value which will be the target of the UnidirectionalLink.
148 	 * @return A newly created UnidirectionalLink object.
149 	 */
150 	public abstract UnidirectionalLink set(UserObject object, String associationName, String val);
151 	
152 	/**
153 	 * Creates a new UnidirectionalLink which has the provided object as owner and the provided Integer as target.
154 	 * 
155 	 * @param object
156 	 *            The owner of the newly created UnidirectionalLink.
157 	 * @param associationName
158 	 *            The name of the association which is the Type of the created UnidirectionalLink.
159 	 * @param val
160 	 *            The Integer Value which will be the target of the UnidirectionalLink.
161 	 * @return A newly created UnidirectionalLink object.
162 	 */
163 	public abstract UnidirectionalLink set(UserObject object, String associationName, BigInteger val);
164 	
165 	/**
166 	 * Creates a new UnidirectionalLink which has the provided object as owner and the provided User Object as target.
167 	 * 
168 	 * @param object
169 	 *            The owner of the newly created UnidirectionalLink.
170 	 * @param associationName
171 	 *            The name of the association which is the Type of the created UnidirectionalLink.
172 	 * @param target
173 	 *            The User Object which will be the target of the UnidirectionalLink.
174 	 * @return A newly created UnidirectionalLink object.
175 	 */
176 	public abstract UnidirectionalLink set(UserObject object, String associationName, UserObject target);
177 	
178 	/**
179 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
180 	 * The target is accessible via the provided key.
181 	 * 
182 	 * @param owner
183 	 *            The owner of the newly created UnidirectionalLink.
184 	 * @param associationName
185 	 *            The name of the association which is the Type of the created UnidirectionalLink.
186 	 * @param target
187 	 *            The object which will be the target of the UnidirectionalLink.
188 	 * @param key
189 	 *            The key to access the target from the owner via the UnidirectionalLink.
190 	 * @return A newly created UnidirectionalLink object.
191 	 */
192 	public abstract MapLink put(UserObject owner, String associationName, UserObject target, String key);
193 	
194 	/**
195 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
196 	 * The target is accessible via the provided key.
197 	 * 
198 	 * @param owner
199 	 *            The owner of the newly created UnidirectionalLink.
200 	 * @param associationName
201 	 *            The name of the association which is the Type of the created UnidirectionalLink.
202 	 * @param target
203 	 *            The object which will be the target of the UnidirectionalLink.
204 	 * @param key
205 	 *            The key to access the target from the owner via the UnidirectionalLink.
206 	 * @return A newly created UnidirectionalLink object.
207 	 */
208 	public abstract MapLink put(UserObject owner, String associationName, BigInteger target, String key);
209 	
210 	/**
211 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
212 	 * The target is accessible via the provided key.
213 	 * 
214 	 * @param owner
215 	 *            The owner of the newly created UnidirectionalLink.
216 	 * @param associationName
217 	 *            The name of the association which is the Type of the created UnidirectionalLink.
218 	 * @param target
219 	 *            The object which will be the target of the UnidirectionalLink.
220 	 * @param key
221 	 *            The key to access the target from the owner via the UnidirectionalLink.
222 	 * @return A newly created UnidirectionalLink object.
223 	 */
224 	public abstract MapLink put(UserObject owner, String associationName, String target, String key);
225 	
226 	/**
227 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
228 	 * The target is accessible via the provided key.
229 	 * 
230 	 * @param owner
231 	 *            The owner of the newly created UnidirectionalLink.
232 	 * @param associationName
233 	 *            The name of the association which is the Type of the created UnidirectionalLink.
234 	 * @param target
235 	 *            The object which will be the target of the UnidirectionalLink.
236 	 * @param key
237 	 *            The key to access the target from the owner via the UnidirectionalLink.
238 	 * @return A newly created UnidirectionalLink object.
239 	 */
240 	public abstract MapLink put(UserObject owner, String associationName, UserObject target, BigInteger key);
241 	
242 	/**
243 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
244 	 * The target is accessible via the provided key.
245 	 * 
246 	 * @param owner
247 	 *            The owner of the newly created UnidirectionalLink.
248 	 * @param associationName
249 	 *            The name of the association which is the Type of the created UnidirectionalLink.
250 	 * @param target
251 	 *            The object which will be the target of the UnidirectionalLink.
252 	 * @param key
253 	 *            The key to access the target from the owner via the UnidirectionalLink.
254 	 * @return A newly created UnidirectionalLink object.
255 	 */
256 	public abstract MapLink put(UserObject owner, String associationName, BigInteger target, BigInteger key);
257 	
258 	/**
259 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
260 	 * The target is accessible via the provided key.
261 	 * 
262 	 * @param owner
263 	 *            The owner of the newly created UnidirectionalLink.
264 	 * @param associationName
265 	 *            The name of the association which is the Type of the created UnidirectionalLink.
266 	 * @param target
267 	 *            The object which will be the target of the UnidirectionalLink.
268 	 * @param key
269 	 *            The key to access the target from the owner via the UnidirectionalLink.
270 	 * @return A newly created UnidirectionalLink object.
271 	 */
272 	public abstract MapLink put(UserObject owner, String associationName, String target, BigInteger key);
273 	
274 	/**
275 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
276 	 * The target is accessible via the provided key.
277 	 * 
278 	 * @param owner
279 	 *            The owner of the newly created UnidirectionalLink.
280 	 * @param associationName
281 	 *            The name of the association which is the Type of the created UnidirectionalLink.
282 	 * @param target
283 	 *            The object which will be the target of the UnidirectionalLink.
284 	 * @param key
285 	 *            The key to access the target from the owner via the UnidirectionalLink.
286 	 * @return A newly created UnidirectionalLink object.
287 	 */
288 	public abstract MapLink put(UserObject owner, String associationName, UserObject target, UserObject key);
289 	
290 	/**
291 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
292 	 * The target is accessible via the provided key.
293 	 * 
294 	 * @param owner
295 	 *            The owner of the newly created UnidirectionalLink.
296 	 * @param associationName
297 	 *            The name of the association which is the Type of the created UnidirectionalLink.
298 	 * @param target
299 	 *            The object which will be the target of the UnidirectionalLink.
300 	 * @param key
301 	 *            The key to access the target from the owner via the UnidirectionalLink.
302 	 * @return A newly created UnidirectionalLink object.
303 	 */
304 	public abstract MapLink put(UserObject owner, String associationName, BigInteger target, UserObject key);
305 	
306 	/**
307 	 * Creates a new UnidirectionalLink which has the provided object as owner and another provided object as target.
308 	 * The target is accessible via the provided key.
309 	 * 
310 	 * @param owner
311 	 *            The owner of the newly created UnidirectionalLink.
312 	 * @param associationName
313 	 *            The name of the association which is the Type of the created UnidirectionalLink.
314 	 * @param target
315 	 *            The object which will be the target of the UnidirectionalLink.
316 	 * @param key
317 	 *            The key to access the target from the owner via the UnidirectionalLink.
318 	 * @return A newly created UnidirectionalLink object.
319 	 */
320 	public abstract MapLink put(UserObject owner, String associationName, String target, UserObject key);
321 	
322 	/**
323 	 * This method commits all changes. So they are accessible to all other transaction in the persistence layer It also
324 	 * closes the current transaction so it can not be used further.
325 	 */
326 	public abstract void commit();
327 	
328 	/**
329 	 * This method rolls back all changes of the current transaction. And also closes the actual transaction so it can
330 	 * not be used anymore.
331 	 */
332 	public abstract void rollback();
333 	
334 	/**
335 	 * This method will create a save Point in the persistence layer, so changes will be saved.
336 	 */
337 	public abstract void savePoint();
338 	
339 	/**
340 	 * This will roll back all changes did since the last save Point.
341 	 */
342 	public abstract void rollbackToSavePoint();
343 	
344 	/**
345 	 * This method removes a given UnidirectionalLink in the persistence Layer.
346 	 * 
347 	 * @param toUnset
348 	 *            The UnidirectionalLink, which will be removed.
349 	 */
350 	public abstract void unset(Link toUnset);
351 	
352 	/**
353 	 * Provides the Type Manager, which is used to query Type Information at Runtime.
354 	 * 
355 	 * @return An instance of the Type Manager.
356 	 */
357 	public abstract TypeManager getTypeManager();
358 	
359 	/**
360 	 * Provides as Collection of User Objects, which contains all instance of a given type.
361 	 * 
362 	 * @param typeName
363 	 *            The name of a Type.
364 	 * @return A collection of UserObjects.
365 	 */
366 	public abstract Collection<UserObject> getObjectsByType(String typeName);
367 	
368 	/**
369 	 * Provides a User Object with the given Id. It also marks the object as read inside the database.
370 	 * 
371 	 * @param object
372 	 *            The Id of the Object.
373 	 * @return Provides a new User Object with given Id and type.
374 	 */
375 	public abstract UserObject checkout(long object);
376 	
377 }