1 /*
2 * RDFpro - An extensible tool for building stream-oriented RDF processing libraries.
3 *
4 * Written in 2014 by Francesco Corcoglioniti with support by Marco Amadori, Michele Mostarda,
5 * Alessio Palmero Aprosio and Marco Rospocher. Contact info on http://rdfpro.fbk.eu/
6 *
7 * To the extent possible under law, the authors have dedicated all copyright and related and
8 * neighboring rights to this software to the public domain worldwide. This software is
9 * distributed without any warranty.
10 *
11 * You should have received a copy of the CC0 Public Domain Dedication along with this software.
12 * If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
13 */
14 package eu.fbk.rdfpro;
15
16 import java.util.Objects;
17
18 import org.openrdf.model.Statement;
19 import org.openrdf.rio.RDFHandler;
20 import org.openrdf.rio.RDFHandlerException;
21 import org.openrdf.rio.helpers.RDFHandlerWrapper;
22
23 import eu.fbk.rdfpro.util.IO;
24
25 /**
26 * Base implementation of an {@code RDFHandler} + {@code AutoCloseable} wrapper.
27 * <p>
28 * This class wraps a {@code RDFHandler} and delegates all the methods to that instance. If the
29 * wrapped {@code RDFHandler} is {@code AutoCloseable}, then also calls to
30 * {@link AutoCloseable#close()} are delegated, with errors logged but ignored. Differently from
31 * Sesame {@link RDFHandlerWrapper}, this class wraps a unique {@code RDFHandler} and thus does
32 * not need array traversal (and its overhead) to notify a pool of {@code RDFHandlers}.
33 * </p>
34 */
35 public abstract class AbstractRDFHandlerWrapper extends AbstractRDFHandler {
36
37 /** The wrapped {@code RDFHandler}. */
38 protected final RDFHandler handler;
39
40 /**
41 * Creates a new instance wrapping the supplied {@code RDFHandler}.
42 *
43 * @param handler
44 * the {@code RDFHandler} to wrap, not null
45 */
46 protected AbstractRDFHandlerWrapper(final RDFHandler handler) {
47 this.handler = Objects.requireNonNull(handler);
48 }
49
50 /**
51 * Delegates to the wrapped {@code RDFHandler}.
52 */
53 @Override
54 public void startRDF() throws RDFHandlerException {
55 this.handler.startRDF();
56 }
57
58 /**
59 * Delegates to the wrapped {@code RDFHandler}.
60 */
61 @Override
62 public void handleComment(final String comment) throws RDFHandlerException {
63 this.handler.handleComment(comment);
64 }
65
66 /**
67 * Delegates to the wrapped {@code RDFHandler}.
68 */
69 @Override
70 public void handleNamespace(final String prefix, final String uri) throws RDFHandlerException {
71 this.handler.handleNamespace(prefix, uri);
72 }
73
74 /**
75 * Delegates to the wrapped {@code RDFHandler}.
76 */
77 @Override
78 public void handleStatement(final Statement statement) throws RDFHandlerException {
79 this.handler.handleStatement(statement);
80 }
81
82 /**
83 * Delegates to the wrapped {@code RDFHandler}.
84 */
85 @Override
86 public void endRDF() throws RDFHandlerException {
87 this.handler.endRDF();
88 }
89
90 /**
91 * Delegates to the wrapped {@code RDFHandler}, if it implements {@code Closeable}.
92 */
93 @Override
94 public void close() {
95 IO.closeQuietly(this.handler);
96 }
97
98 }