1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 package org.openrdf.elmo.sesame;
30
31 import info.aduna.iteration.CloseableIteration;
32
33 import org.openrdf.elmo.exceptions.ElmoPersistException;
34 import org.openrdf.elmo.sesame.helpers.PropertyChanger;
35 import org.openrdf.elmo.sesame.roles.SesameEntity;
36 import org.openrdf.model.Resource;
37 import org.openrdf.model.Statement;
38 import org.openrdf.model.Value;
39 import org.openrdf.repository.RepositoryException;
40 import org.openrdf.repository.contextaware.ContextAwareConnection;
41
42
43
44
45
46
47
48
49 public class InverseSesameProperty<E> extends SesameProperty<E> {
50
51 public InverseSesameProperty(SesameEntity bean, PropertyChanger property) {
52 super(bean, property);
53 }
54
55 @Override
56 public boolean add(Object o) {
57 Value val = getValue(o);
58 if (contains(val))
59 return false;
60 ContextAwareConnection conn = getConnection();
61 try {
62 add(conn, (Resource) val, getResource());
63 } catch (RepositoryException e) {
64 throw new ElmoPersistException(e);
65 }
66 return true;
67 }
68
69 @Override
70 public boolean remove(Object o) {
71 Value val = getValue(o);
72 if (!contains(val))
73 return false;
74 ContextAwareConnection conn = getConnection();
75 try {
76 remove(conn, (Resource) val, getResource());
77 } catch (RepositoryException e) {
78 throw new ElmoPersistException(e);
79 }
80 return true;
81 }
82
83 @Override
84 public boolean contains(Object o) {
85 Value val = getValue(o);
86 ContextAwareConnection conn = getConnection();
87 try {
88 return conn.hasStatement((Resource) val, getURI(), getResource());
89 } catch (RepositoryException e) {
90 throw new ElmoPersistException(e);
91 }
92 }
93
94 @Override
95 @SuppressWarnings("unchecked")
96 E createInstance(Statement stmt) {
97 Value value = stmt.getSubject();
98 return (E) getManager().getInstance(value);
99 }
100
101 @Override
102 CloseableIteration<? extends Statement, RepositoryException> getStatements()
103 throws RepositoryException {
104 ContextAwareConnection conn = getConnection();
105 return conn.getStatements(null, getURI(), getResource());
106 }
107
108 }