Skip to contentMethod: begin(ReadWrite)
1: /*
2: * JOPA
3: * Copyright (C) 2024 Czech Technical University in Prague
4: *
5: * This library is free software; you can redistribute it and/or
6: * modify it under the terms of the GNU Lesser General Public
7: * License as published by the Free Software Foundation; either
8: * version 3.0 of the License, or (at your option) any later version.
9: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this library.
17: */
18: package cz.cvut.kbss.ontodriver.jena.connector;
19:
20: import cz.cvut.kbss.ontodriver.config.DriverConfiguration;
21: import cz.cvut.kbss.ontodriver.jena.config.JenaConfigParam;
22: import cz.cvut.kbss.ontodriver.jena.exception.JenaDriverException;
23: import org.apache.jena.query.*;
24: import org.apache.jena.rdf.model.Model;
25: import org.apache.jena.rdf.model.ModelFactory;
26: import org.apache.jena.rdf.model.Statement;
27: import org.apache.jena.rdf.model.StmtIterator;
28: import org.apache.jena.sparql.core.Transactional;
29: import org.apache.jena.update.UpdateAction;
30: import org.slf4j.Logger;
31: import org.slf4j.LoggerFactory;
32:
33: import java.util.List;
34:
35: /**
36: * Represents a local Jena storage, e.g., a TDB dataset.
37: */
38: abstract class LocalStorage implements Storage {
39:
40: static final Logger LOG = LoggerFactory.getLogger(LocalStorage.class);
41:
42: static final String FILE_PREFIX = "file:";
43:
44: private final boolean defaultAsUnion;
45:
46: Dataset dataset;
47:
48: LocalStorage(DriverConfiguration configuration) {
49: this.defaultAsUnion = configuration.is(JenaConfigParam.TREAT_DEFAULT_GRAPH_AS_UNION);
50: }
51:
52: @Override
53: public void writeChanges() throws JenaDriverException {
54: // Do nothing by default
55: }
56:
57: @Override
58: public Dataset getDataset() {
59: return dataset;
60: }
61:
62: @Override
63: public Model getDefaultGraph() {
64: return defaultAsUnion ? ModelFactory.createUnion(dataset.getUnionModel(), dataset.getDefaultModel()) :
65: dataset.getDefaultModel();
66: }
67:
68: public Model getNamedGraph(String ctx) {
69: return dataset.getNamedModel(ctx);
70: }
71:
72: @Override
73: public Transactional getTransactional() {
74: return dataset;
75: }
76:
77: @Override
78: public void begin(ReadWrite readWrite) {
79: dataset.begin(readWrite);
80: }
81:
82: @Override
83: public void commit() {
84: dataset.commit();
85: }
86:
87: @Override
88: public void rollback() {
89: dataset.abort();
90: }
91:
92: @Override
93: public void close() {
94: dataset.close();
95: }
96:
97: @Override
98: public void add(List<Statement> statements, String context) {
99: if (context != null) {
100: dataset.getNamedModel(context).add(statements);
101: } else {
102: dataset.getDefaultModel().add(statements);
103: }
104: }
105:
106: @Override
107: public void remove(List<Statement> statements, String context) {
108: if (context != null) {
109: dataset.getNamedModel(context).remove(statements);
110: } else {
111: dataset.getDefaultModel().remove(statements);
112: if (defaultAsUnion) {
113: dataset.listNames().forEachRemaining(n -> dataset.getNamedModel(n).remove(statements));
114: }
115: }
116: }
117:
118: @Override
119: public void remove(StmtIterator iterator, String context) {
120: if (context != null) {
121: dataset.getNamedModel(context).remove(iterator);
122: } else {
123: iterator.forEachRemaining(statement -> {
124: dataset.getDefaultModel().remove(statement);
125: if (defaultAsUnion) {
126: dataset.listNames().forEachRemaining(n -> dataset.getNamedModel(n).remove(statement));
127: }
128: });
129: }
130: }
131:
132: @Override
133: public QueryExecution prepareQuery(Query query) {
134: return QueryExecutionFactory.create(query, dataset);
135: }
136:
137: @Override
138: public void executeUpdate(String update) {
139: UpdateAction.parseExecute(update, dataset);
140: }
141: }