Skip to content

Commit f03b8ed

Browse files
committed
Merge pull request #5 from LinkedDataFragments/master
merging in latest changes from origin
2 parents 29a2efe + 4aad817 commit f03b8ed

28 files changed

+681
-342
lines changed

config-example.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
{
22
"title": "My Linked Data Fragments server",
33

4+
"datasourcetypes": {
5+
"HdtDatasource" : "org.linkeddatafragments.datasource.hdt.HdtDataSourceType",
6+
"JenaTDBDatasource" : "org.linkeddatafragments.datasource.tdb.JenaTDBDataSourceType"
7+
},
8+
49
"datasources": {
510
"dbpedia": {
611
"title": "DBPedia",

src/org/linkeddatafragments/config/ConfigReader.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.Map;
66
import java.util.Map.Entry;
77

8+
import org.linkeddatafragments.datasource.IDataSourceType;
9+
810
import com.google.gson.JsonElement;
911
import com.google.gson.JsonObject;
1012
import com.google.gson.JsonParser;
@@ -13,8 +15,10 @@
1315
* Reads the configuration of a Linked Data Fragments server.
1416
*
1517
* @author Ruben Verborgh
18+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
1619
*/
1720
public class ConfigReader {
21+
private final Map<String, IDataSourceType> dataSourceTypes = new HashMap<>();
1822
private final Map<String, JsonObject> dataSources = new HashMap<>();
1923
private final Map<String, String> prefixes = new HashMap<>();
2024
private final String baseURL;
@@ -28,6 +32,10 @@ public ConfigReader(Reader configReader) {
2832
JsonObject root = new JsonParser().parse(configReader).getAsJsonObject();
2933
this.baseURL = root.has("baseURL") ? root.getAsJsonPrimitive("baseURL").getAsString() : null;
3034

35+
for (Entry<String, JsonElement> entry : root.getAsJsonObject("datasourcetypes").entrySet()) {
36+
final String className = entry.getValue().getAsString();
37+
dataSourceTypes.put(entry.getKey(), initDataSouceType(className) );
38+
}
3139
for (Entry<String, JsonElement> entry : root.getAsJsonObject("datasources").entrySet()) {
3240
JsonObject dataSource = entry.getValue().getAsJsonObject();
3341
this.dataSources.put(entry.getKey(), dataSource);
@@ -37,6 +45,15 @@ public ConfigReader(Reader configReader) {
3745
}
3846
}
3947

48+
/**
49+
* Gets the data source types.
50+
*
51+
* @return a mapping of names of data source types to these types
52+
*/
53+
public Map<String, IDataSourceType> getDataSourceTypes() {
54+
return dataSourceTypes;
55+
}
56+
4057
/**
4158
* Gets the data sources.
4259
*
@@ -58,4 +75,35 @@ public Map<String, String> getPrefixes() {
5875
public String getBaseURL() {
5976
return baseURL;
6077
}
78+
79+
protected IDataSourceType initDataSouceType( final String className )
80+
{
81+
final Class<?> c;
82+
try {
83+
c = Class.forName( className );
84+
}
85+
catch ( ClassNotFoundException e ) {
86+
throw new IllegalArgumentException( "Class not found: " + className,
87+
e );
88+
}
89+
90+
final Object o;
91+
try {
92+
o = c.newInstance();
93+
}
94+
catch ( Exception e ) {
95+
throw new IllegalArgumentException(
96+
"Creating an instance of class '" + className + "' " +
97+
"caused a " + e.getClass().getSimpleName() + ": " +
98+
e.getMessage(), e );
99+
}
100+
101+
if ( ! (o instanceof IDataSourceType) )
102+
throw new IllegalArgumentException(
103+
"Class '" + className + "' is not an implementation " +
104+
"of IDataSourceType." );
105+
106+
return (IDataSourceType) o;
107+
}
108+
61109
}

src/org/linkeddatafragments/datasource/AbstractJenaBasedRequestProcessorForTriplePatterns.java

Lines changed: 0 additions & 154 deletions
This file was deleted.

src/org/linkeddatafragments/datasource/AbstractRequestProcessorForTriplePatterns.java

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,52 @@
11
package org.linkeddatafragments.datasource;
22

3+
import com.hp.hpl.jena.rdf.model.Model;
4+
35
import org.linkeddatafragments.fragments.LinkedDataFragment;
46
import org.linkeddatafragments.fragments.LinkedDataFragmentRequest;
7+
import org.linkeddatafragments.fragments.tpf.TriplePatternElement;
58
import org.linkeddatafragments.fragments.tpf.TriplePatternFragment;
69
import org.linkeddatafragments.fragments.tpf.TriplePatternFragmentImpl;
710
import org.linkeddatafragments.fragments.tpf.TriplePatternFragmentRequest;
811

9-
import com.hp.hpl.jena.rdf.model.Model;
10-
1112
/**
1213
* Base class for implementations of {@link IFragmentRequestProcessor} that
1314
* process {@link TriplePatternFragmentRequest}s.
1415
*
16+
* @param <TermType> type for representing RDF terms in triple patterns
17+
* @param <VarType> type for representing specific variables in triple patterns
18+
*
1519
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
1620
*/
17-
public abstract class AbstractRequestProcessorForTriplePatterns
18-
extends AbstractRequestProcessor
21+
public abstract class
22+
AbstractRequestProcessorForTriplePatterns<TermType,VarType>
23+
extends AbstractRequestProcessor
1924
{
2025
@Override
21-
protected Worker getWorker( final LinkedDataFragmentRequest request )
26+
protected final Worker<TermType,VarType> getWorker(
27+
final LinkedDataFragmentRequest request )
2228
throws IllegalArgumentException
2329
{
24-
if ( request instanceof TriplePatternFragmentRequest )
25-
return getWorker( (TriplePatternFragmentRequest) request );
30+
if ( request instanceof TriplePatternFragmentRequest<?,?> ) {
31+
@SuppressWarnings("unchecked")
32+
final TriplePatternFragmentRequest<TermType,VarType> tpfRequest =
33+
(TriplePatternFragmentRequest<TermType,VarType>) request;
34+
return getTPFSpecificWorker( tpfRequest );
35+
}
2636
else
2737
throw new IllegalArgumentException( request.getClass().getName() );
2838
}
2939

30-
abstract protected Worker getWorker(
31-
final TriplePatternFragmentRequest request )
40+
abstract protected Worker<TermType,VarType> getTPFSpecificWorker(
41+
final TriplePatternFragmentRequest<TermType,VarType> request )
3242
throws IllegalArgumentException;
3343

3444

35-
abstract static protected class Worker
45+
abstract static protected class Worker<TermType,VarType>
3646
extends AbstractRequestProcessor.Worker
3747
{
38-
public Worker( final TriplePatternFragmentRequest request )
48+
public Worker(
49+
final TriplePatternFragmentRequest<TermType,VarType> request )
3950
{
4051
super( request );
4152
}
@@ -51,20 +62,22 @@ public LinkedDataFragment createRequestedFragment()
5162
else
5263
offset = 0L;
5364

54-
final TriplePatternFragmentRequest tpfRequest =
55-
(TriplePatternFragmentRequest) request;
65+
@SuppressWarnings("unchecked")
66+
final TriplePatternFragmentRequest<TermType,VarType> tpfRequest =
67+
(TriplePatternFragmentRequest<TermType,VarType>) request;
5668

5769
return createFragment( tpfRequest.getSubject(),
5870
tpfRequest.getPredicate(),
5971
tpfRequest.getObject(),
6072
offset, limit );
6173
}
6274

63-
abstract protected LinkedDataFragment createFragment( final String subj,
64-
final String pred,
65-
final String obj,
66-
final long offset,
67-
final long limit )
75+
abstract protected LinkedDataFragment createFragment(
76+
final TriplePatternElement<TermType,VarType> subj,
77+
final TriplePatternElement<TermType,VarType> pred,
78+
final TriplePatternElement<TermType,VarType> obj,
79+
final long offset,
80+
final long limit )
6881
throws IllegalArgumentException;
6982

7083
protected TriplePatternFragment createEmptyTriplePatternFragment()
@@ -78,17 +91,11 @@ protected TriplePatternFragment createTriplePatternFragment(
7891
final long totalSize,
7992
final boolean isLastPage )
8093
{
81-
final long pageNumber;
82-
if ( request.isPageRequest() )
83-
pageNumber = request.getPageNumber();
84-
else
85-
pageNumber = 1L;
86-
8794
return new TriplePatternFragmentImpl( triples,
8895
totalSize,
8996
request.getFragmentURL(),
9097
request.getDatasetURL(),
91-
pageNumber,
98+
request.getPageNumber(),
9299
isLastPage );
93100
}
94101

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package org.linkeddatafragments.datasource;
22

3-
import org.linkeddatafragments.fragments.IFragmentRequestParser;
4-
import org.linkeddatafragments.fragments.LinkedDataFragmentRequest;
5-
import org.linkeddatafragments.fragments.tpf.TPFRequestParser;
6-
import org.linkeddatafragments.fragments.tpf.TriplePatternFragmentRequest;
7-
83
/**
94
*
105
* @author mielvandersande
@@ -29,19 +24,6 @@ public String getTitle() {
2924
return this.title;
3025
};
3126

32-
/**
33-
* This implementation assumes that requests are
34-
* {@link TriplePatternFragmentRequest}s.
35-
*
36-
* Data sources for other types of {@link LinkedDataFragmentRequest}s must
37-
* override this method accordingly.
38-
*/
39-
@Override
40-
public IFragmentRequestParser getRequestParser()
41-
{
42-
return new TPFRequestParser();
43-
}
44-
4527
@Override
4628
public void close() {}
4729
}

0 commit comments

Comments
 (0)