-
Notifications
You must be signed in to change notification settings - Fork 14
/
JenaAdapter.java
111 lines (92 loc) · 3.38 KB
/
JenaAdapter.java
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package cz.cvut.kbss.ontodriver.jena;
import cz.cvut.kbss.ontodriver.Wrapper;
import cz.cvut.kbss.ontodriver.descriptor.AxiomDescriptor;
import cz.cvut.kbss.ontodriver.descriptor.AxiomValueDescriptor;
import cz.cvut.kbss.ontodriver.exception.OntoDriverException;
import cz.cvut.kbss.ontodriver.jena.connector.StorageConnector;
import cz.cvut.kbss.ontodriver.jena.exception.JenaDriverException;
import cz.cvut.kbss.ontodriver.jena.util.IdentifierGenerator;
import cz.cvut.kbss.ontodriver.model.Axiom;
import cz.cvut.kbss.ontodriver.util.Transaction;
import java.net.URI;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* Transformations between OntoDriver API-based values and Jena-based ones.
* <p>
* Implementation notes:
* <ul>
* <li>Datatype literal types are based on Jena's mapping, as described in a table at <a href="https://jena.apache.org/documentation/notes/typed-literals.html">https://jena.apache.org/documentation/notes/typed-literals.html</a></li>
* </ul>
*/
class JenaAdapter implements Wrapper {
private final Transaction transaction = new Transaction();
private final StorageConnector connector;
JenaAdapter(StorageConnector connector) {
this.connector = connector;
}
void commit() throws JenaDriverException {
if (transaction.isActive()) {
transaction.commit();
connector.commit();
transaction.afterCommit();
}
}
void rollback() {
if (transaction.isActive()) {
transaction.rollback();
connector.rollback();
transaction.afterRollback();
}
}
void persist(AxiomValueDescriptor descriptor) {
beginTransactionIfNotActive();
new AxiomSaver(connector).saveAxioms(descriptor);
}
private void beginTransactionIfNotActive() {
if (!transaction.isActive()) {
connector.begin();
transaction.begin();
}
}
Collection<Axiom<?>> find(AxiomDescriptor descriptor) {
beginTransactionIfNotActive();
return new AxiomLoader(connector).find(descriptor);
}
boolean contains(Axiom<?> axiom, URI context) {
beginTransactionIfNotActive();
return new AxiomLoader(connector).contains(axiom, context);
}
List<URI> getContext() {
beginTransactionIfNotActive();
return connector.getContexts().stream().map(URI::create).collect(Collectors.toList());
}
URI generateIdentifier(URI classUri) {
beginTransactionIfNotActive();
return new IdentifierGenerator(connector).generateIdentifier(classUri);
}
void update(AxiomValueDescriptor descriptor) {
beginTransactionIfNotActive();
new EpistemicAxiomRemover(connector).remove(descriptor);
new AxiomSaver(connector).saveAxioms(descriptor);
}
void remove(AxiomDescriptor descriptor) {
beginTransactionIfNotActive();
new EpistemicAxiomRemover(connector).remove(descriptor);
}
TypesHandler typesHandler() {
beginTransactionIfNotActive();
return new TypesHandler(connector);
}
void close() throws JenaDriverException {
connector.close();
}
@Override
public <T> T unwrap(Class<T> cls) throws OntoDriverException {
if (cls.isAssignableFrom(getClass())) {
return cls.cast(this);
}
return connector.unwrap(cls);
}
}