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