Skip to content

Commit 693f9b1

Browse files
author
Olaf Hartig
committed
changed the existing code base to use the new i'faces and classes for LDF requests and for processors of such requests
1 parent 1400984 commit 693f9b1

File tree

7 files changed

+139
-335
lines changed

7 files changed

+139
-335
lines changed

src/org/linkeddatafragments/datasource/DataSource.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,6 @@
88
public abstract class DataSource implements IDataSource {
99
protected String title;
1010
protected String description;
11-
12-
/**
13-
*
14-
* @param offset
15-
* @param limit
16-
*/
17-
protected void checkBoundaries(long offset, long limit) {
18-
if (offset < 0) {
19-
throw new IndexOutOfBoundsException("offset");
20-
}
21-
if (limit < 1) {
22-
throw new IllegalArgumentException("limit");
23-
}
24-
}
2511

2612
public DataSource(String title, String description) {
2713
this.title = title;

src/org/linkeddatafragments/datasource/HdtDataSource.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
* An HDT data source of Basic Linked Data Fragments.
2121
*
2222
* @author Ruben Verborgh
23+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
2324
*/
2425
public class HdtDataSource extends DataSource {
2526

@@ -41,16 +42,35 @@ public HdtDataSource(String title, String description, String hdtFile) throws IO
4142
}
4243

4344
@Override
44-
public TriplePatternFragment getFragment(Resource subject, Property predicate, RDFNode object, final long offset, final long limit) {
45-
checkBoundaries(offset, limit);
45+
public IFragmentRequestProcessor getRequestProcessor(
46+
final LinkedDataFragmentRequest request )
47+
{
48+
if ( ! (request instanceof TriplePatternFragmentRequest) )
49+
throw new IllegalArgumentException();
4650

51+
return new MyProcessor( (TriplePatternFragmentRequest) request );
52+
}
53+
54+
protected class MyProcessor extends AbstractRequestProcessorForTriplePatterns
55+
{
56+
public MyProcessor( final TriplePatternFragmentRequest request ) {
57+
super( request );
58+
}
59+
60+
@Override
61+
protected LinkedDataFragment createFragment( final Resource subject,
62+
final Property predicate,
63+
final RDFNode object,
64+
final long offset,
65+
final long limit )
66+
{
4767
// look up the result from the HDT datasource)
4868
int subjectId = subject == null ? 0 : dictionary.getIntID(subject.asNode(), TripleComponentRole.SUBJECT);
4969
int predicateId = predicate == null ? 0 : dictionary.getIntID(predicate.asNode(), TripleComponentRole.PREDICATE);
5070
int objectId = object == null ? 0 : dictionary.getIntID(object.asNode(), TripleComponentRole.OBJECT);
5171

5272
if (subjectId < 0 || predicateId < 0 || objectId < 0) {
53-
return new TriplePatternFragmentBase();
73+
return createEmptyTriplePatternFragment();
5474
}
5575

5676
final Model triples = ModelFactory.createDefaultModel();
@@ -92,19 +112,12 @@ public TriplePatternFragment getFragment(Resource subject, Property predicate, R
92112
: 0;
93113

94114
// create the fragment
95-
return new TriplePatternFragment() {
96-
@Override
97-
public Model getTriples() {
98-
return triples;
99-
}
100-
101-
@Override
102-
public long getTotalSize() {
103-
return estimatedTotal;
104-
}
105-
};
115+
final boolean isLastPage = ( estimatedTotal < offset + limit );
116+
return createTriplePatternFragment( triples, estimatedTotal, isLastPage );
106117
}
107118

119+
} // end of MyProcessor
120+
108121
/**
109122
* Converts the HDT triple to a Jena Triple.
110123
*

src/org/linkeddatafragments/datasource/IDataSource.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,22 @@
22

33
import java.io.Closeable;
44

5-
import com.hp.hpl.jena.rdf.model.Property;
6-
import com.hp.hpl.jena.rdf.model.RDFNode;
7-
import com.hp.hpl.jena.rdf.model.Resource;
8-
95
/**
10-
* A data source of Basic Linked Data Fragments.
6+
* A data source of Linked Data Fragments.
7+
*
118
* @author Ruben Verborgh
9+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
1210
*/
1311
public interface IDataSource extends Closeable {
14-
/**
15-
* Gets a page of the Basic Linked Data Fragment matching the specified triple pattern.
16-
* @param subject the subject (null to match any subject)
17-
* @param predicate the predicate (null to match any predicate)
18-
* @param object the object (null to match any object)
19-
* @param offset the triple index at which to start the page
20-
* @param limit the number of triples on the page
21-
* @return the first page of the fragment
22-
*/
23-
public TriplePatternFragment getFragment(Resource subject, Property predicate,
24-
RDFNode object, long offset, long limit);
12+
2513
public String getTitle();
2614

2715
public String getDescription();
16+
17+
/**
18+
* Returns a data source specific processor for the given request of a
19+
* Linked Data Fragment.
20+
*/
21+
IFragmentRequestProcessor getRequestProcessor(
22+
final LinkedDataFragmentRequest request );
2823
}

src/org/linkeddatafragments/datasource/IndexDataSource.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* An Index data source provides an overview of all available datasets.
1616
*
1717
* @author Miel Vander Sande
18+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
1819
*/
1920
public class IndexDataSource extends DataSource {
2021

@@ -44,8 +45,29 @@ public IndexDataSource(String baseUrl, HashMap<String, IDataSource> datasources)
4445
}
4546

4647
@Override
47-
public TriplePatternFragment getFragment(Resource subject, Property predicate, RDFNode object, long offset, long limit) {
48-
StmtIterator listStatements = this.model.listStatements(subject, predicate, object);
48+
public IFragmentRequestProcessor getRequestProcessor(
49+
final LinkedDataFragmentRequest request )
50+
{
51+
if ( ! (request instanceof TriplePatternFragmentRequest) )
52+
throw new IllegalArgumentException();
53+
54+
return new MyProcessor( (TriplePatternFragmentRequest) request );
55+
}
56+
57+
protected class MyProcessor extends AbstractRequestProcessorForTriplePatterns
58+
{
59+
public MyProcessor( final TriplePatternFragmentRequest request ) {
60+
super( request );
61+
}
62+
63+
@Override
64+
protected LinkedDataFragment createFragment( final Resource subject,
65+
final Property predicate,
66+
final RDFNode object,
67+
final long offset,
68+
final long limit )
69+
{
70+
StmtIterator listStatements = model.listStatements(subject, predicate, object);
4971
Model result = ModelFactory.createDefaultModel();
5072

5173
long index = 0;
@@ -58,7 +80,10 @@ public TriplePatternFragment getFragment(Resource subject, Property predicate, R
5880
result.add(listStatements.next());
5981
}
6082

61-
return new TriplePatternFragmentBase(result, result.size());
83+
final boolean isLastPage = ( result.size() < offset + limit );
84+
return createTriplePatternFragment( result, result.size(), isLastPage );
6285
}
6386

87+
} // end of MyProcessor
88+
6489
}

src/org/linkeddatafragments/datasource/JenaTDBDataSource.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* Experimental Jena TDB-backed data source of Basic Linked Data Fragments.
2323
*
2424
* @author Bart Hanssens <[email protected]>
25+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
2526
*/
2627
public class JenaTDBDataSource extends DataSource {
2728
private final Dataset tdb;
@@ -34,9 +35,28 @@ public class JenaTDBDataSource extends DataSource {
3435
private final Query countQuery = QueryFactory.create(count, Syntax.syntaxSPARQL_11);
3536

3637
@Override
37-
public TriplePatternFragment getFragment(Resource subject, Property predicate, RDFNode object, long offset, long limit) {
38-
checkBoundaries(offset, limit);
38+
public IFragmentRequestProcessor getRequestProcessor(
39+
final LinkedDataFragmentRequest request )
40+
{
41+
if ( ! (request instanceof TriplePatternFragmentRequest) )
42+
throw new IllegalArgumentException();
3943

44+
return new MyProcessor( (TriplePatternFragmentRequest) request );
45+
}
46+
47+
protected class MyProcessor extends AbstractRequestProcessorForTriplePatterns
48+
{
49+
public MyProcessor( final TriplePatternFragmentRequest request ) {
50+
super( request );
51+
}
52+
53+
@Override
54+
protected LinkedDataFragment createFragment( final Resource subject,
55+
final Property predicate,
56+
final RDFNode object,
57+
final long offset,
58+
final long limit )
59+
{
4060
Model model = tdb.getDefaultModel();
4161
QuerySolutionMap map = new QuerySolutionMap();
4262
if (subject != null) {
@@ -59,7 +79,7 @@ public TriplePatternFragment getFragment(Resource subject, Property predicate, R
5979
}
6080

6181
if (triples.isEmpty()) {
62-
return new TriplePatternFragmentBase();
82+
return createEmptyTriplePatternFragment();
6383
}
6484

6585
// Try to get an estimate
@@ -87,9 +107,14 @@ public TriplePatternFragment getFragment(Resource subject, Property predicate, R
87107
if (estimate < offset + size) {
88108
estimate = (size == limit) ? offset + size + 1 : offset + size;
89109
}
90-
return new TriplePatternFragmentBase(triples, estimate);
110+
111+
// create the fragment
112+
final boolean isLastPage = ( estimate < offset + limit );
113+
return createTriplePatternFragment( triples, estimate, isLastPage );
91114
}
92115

116+
} // end of MyProcessor
117+
93118

94119
/**
95120
* Constructor

0 commit comments

Comments
 (0)