1 package de.fhdw.wtf.context.model;
2
3 import java.util.Collection;
4 import java.util.Vector;
5
6 import de.fhdw.wtf.context.core.ObjectFactoryProvider;
7 import de.fhdw.wtf.context.core.TransactionManager;
8 import de.fhdw.wtf.persistence.meta.UnidirectionalLink;
9 import de.fhdw.wtf.persistence.meta.UserObject;
10 import de.fhdw.wtf.persistence.utils.Tuple;
11
12 public abstract class SymmetricRelationAccess {
13
14 protected <T extends AnyType> T inverseGet(final AnyType anyType, final String association) {
15 final Collection<T> result = this.inverseGetCollection(anyType, association);
16 if (result.isEmpty()) {
17 return null;
18 } else {
19 return result.iterator().next();
20 }
21 }
22
23 protected <T extends AnyType> Collection<T> inverseGetCollection(final AnyType anyType, final String association) {
24 final Vector<T> resultVector = new Vector<>();
25 final Collection<Tuple<UnidirectionalLink, UserObject>> databaseResults =
26 TransactionManager.getContext().inverseGet(association, anyType.getObject());
27 for (final Tuple<UnidirectionalLink, UserObject> databaseResult : databaseResults) {
28 final UserObject object = databaseResult.getSecond();
29 @SuppressWarnings("unchecked")
30 final T result = (T) ObjectFactoryProvider.instance().createObject(object);
31 resultVector.add(result);
32 }
33 return resultVector;
34 }
35 }