1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.any23.writer;
19
20 import java.util.Locale;
21
22 import org.apache.any23.extractor.ExtractionContext;
23 import org.eclipse.rdf4j.model.Resource;
24 import org.eclipse.rdf4j.model.IRI;
25 import org.eclipse.rdf4j.model.Value;
26 import org.eclipse.rdf4j.repository.RepositoryConnection;
27 import org.eclipse.rdf4j.repository.RepositoryException;
28
29
30
31
32
33
34 public class RepositoryWriter implements TripleHandler {
35
36 private final RepositoryConnection conn;
37 private final Resource overrideContext;
38
39 public RepositoryWriter(RepositoryConnection conn) {
40 this(conn, null);
41 }
42
43 public RepositoryWriter(RepositoryConnection conn, Resource overrideContext) {
44 this.conn = conn;
45 this.overrideContext = overrideContext;
46 }
47
48 @Override
49 public void startDocument(IRI documentIRI) throws TripleHandlerException {
50
51 }
52
53 @Override
54 public void openContext(ExtractionContext context) throws TripleHandlerException {
55
56 }
57
58 @Override
59 public void receiveTriple(Resource s, IRI p, Value o, IRI g, ExtractionContext context)
60 throws TripleHandlerException {
61 try {
62 conn.add(conn.getValueFactory().createStatement(s, p, o, g), getContextResource(context.getDocumentIRI()));
63 } catch (RepositoryException ex) {
64 throw new TripleHandlerException(
65 String.format(Locale.ROOT, "Error while receiving triple: %s %s %s", s, p, o), ex);
66 }
67 }
68
69 @Override
70 public void receiveNamespace(String prefix, String uri, ExtractionContext context) throws TripleHandlerException {
71 try {
72 conn.setNamespace(prefix, uri);
73 } catch (RepositoryException ex) {
74 throw new TripleHandlerException(
75 String.format(Locale.ROOT, "Error while receiving namespace: %s:%s", prefix, uri), ex);
76 }
77 }
78
79 @Override
80 public void closeContext(ExtractionContext context) throws TripleHandlerException {
81
82 }
83
84 @Override
85 public void close() throws TripleHandlerException {
86
87 }
88
89 @Override
90 public void endDocument(IRI documentIRI) throws TripleHandlerException {
91
92 }
93
94 @Override
95 public void setContentLength(long contentLength) {
96
97 }
98
99 private Resource getContextResource(Resource fromExtractor) {
100 if (overrideContext != null) {
101 return overrideContext;
102 }
103 return fromExtractor;
104 }
105 }