Skip to content

Commit ecb54eb

Browse files
author
Miel Vander Sande
committed
Merge conflict
2 parents 4d4b822 + 5d30d4d commit ecb54eb

File tree

7 files changed

+77
-34
lines changed

7 files changed

+77
-34
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/hdt/HdtDataSourceType.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.io.File;
44
import java.io.IOException;
55

6-
import org.linkeddatafragments.datasource.DataSourceTypesRegistry;
76
import org.linkeddatafragments.datasource.IDataSource;
87
import org.linkeddatafragments.datasource.IDataSourceType;
98
import org.linkeddatafragments.exceptions.DataSourceException;
@@ -17,15 +16,6 @@
1716
*/
1817
public class HdtDataSourceType implements IDataSourceType
1918
{
20-
public static final String TYPE_NAME = "HdtDatasource";
21-
22-
public static void register() {
23-
if ( ! DataSourceTypesRegistry.isRegistered(TYPE_NAME) ) {
24-
DataSourceTypesRegistry.register( TYPE_NAME,
25-
new HdtDataSourceType() );
26-
}
27-
}
28-
2919
@Override
3020
public IDataSource createDataSource( final String title,
3121
final String description,

src/org/linkeddatafragments/datasource/tdb/JenaTDBDataSourceType.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.io.File;
44

5-
import org.linkeddatafragments.datasource.DataSourceTypesRegistry;
65
import org.linkeddatafragments.datasource.IDataSource;
76
import org.linkeddatafragments.datasource.IDataSourceType;
87
import org.linkeddatafragments.exceptions.DataSourceException;
@@ -17,15 +16,6 @@
1716
*/
1817
public class JenaTDBDataSourceType implements IDataSourceType
1918
{
20-
public static final String TYPE_NAME = "JenaTDBDatasource";
21-
22-
public static void register() {
23-
if ( ! DataSourceTypesRegistry.isRegistered(TYPE_NAME) ) {
24-
DataSourceTypesRegistry.register( TYPE_NAME,
25-
new JenaTDBDataSourceType() );
26-
}
27-
}
28-
2919
@Override
3020
public IDataSource createDataSource( final String title,
3121
final String description,

src/org/linkeddatafragments/servlet/LinkedDataFragmentServlet.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@
1616
import org.apache.jena.riot.Lang;
1717
import org.linkeddatafragments.config.ConfigReader;
1818
import org.linkeddatafragments.datasource.DataSourceFactory;
19+
import org.linkeddatafragments.datasource.DataSourceTypesRegistry;
1920
import org.linkeddatafragments.datasource.IDataSource;
20-
import org.linkeddatafragments.datasource.hdt.HdtDataSourceType;
21+
import org.linkeddatafragments.datasource.IDataSourceType;
2122
import org.linkeddatafragments.datasource.index.IndexDataSource;
22-
import org.linkeddatafragments.datasource.tdb.JenaTDBDataSourceType;
23-
import org.linkeddatafragments.exceptions.DataSourceException;
2423
import org.linkeddatafragments.exceptions.DataSourceNotFoundException;
2524
import org.linkeddatafragments.fragments.FragmentRequestParserBase;
2625
import org.linkeddatafragments.fragments.LinkedDataFragment;
@@ -47,11 +46,6 @@ public class LinkedDataFragmentServlet extends HttpServlet {
4746
private final HashMap<String, IDataSource> dataSources = new HashMap<>();
4847
private final Collection<String> mimeTypes = new ArrayList<>();
4948

50-
public LinkedDataFragmentServlet() {
51-
HdtDataSourceType.register();
52-
JenaTDBDataSourceType.register();
53-
}
54-
5549
private File getConfigFile(ServletConfig config) throws IOException {
5650
String path = config.getServletContext().getRealPath("/");
5751
if (path == null) {
@@ -78,6 +72,13 @@ public void init(ServletConfig servletConfig) throws ServletException {
7872
File configFile = getConfigFile(servletConfig);
7973
config = new ConfigReader(new FileReader(configFile));
8074

75+
// register data source types
76+
for ( Entry<String,IDataSourceType> typeEntry : config.getDataSourceTypes().entrySet() ) {
77+
DataSourceTypesRegistry.register( typeEntry.getKey(),
78+
typeEntry.getValue() );
79+
}
80+
81+
// register data sources
8182
for (Entry<String, JsonObject> dataSource : config.getDataSources().entrySet()) {
8283
dataSources.put(dataSource.getKey(), DataSourceFactory.create(dataSource.getValue()));
8384
}
@@ -88,7 +89,7 @@ public void init(ServletConfig servletConfig) throws ServletException {
8889
MIMEParse.register(Lang.JSONLD.getHeaderString());
8990
MIMEParse.register(Lang.NTRIPLES.getHeaderString());
9091
MIMEParse.register(Lang.RDFXML.getHeaderString());
91-
} catch (IOException | DataSourceException e) {
92+
} catch (Exception e) {
9293
throw new ServletException(e);
9394
}
9495
}

src/test/java/org/linkeddatafragments/datasource/HdtDataSourceTest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.junit.Before;
88
import org.junit.BeforeClass;
99
import org.linkeddatafragments.datasource.DataSourceFactory;
10+
import org.linkeddatafragments.datasource.DataSourceTypesRegistry;
1011
import org.linkeddatafragments.datasource.hdt.HdtDataSourceType;
1112
import org.rdfhdt.hdt.enums.RDFNotation;
1213
import org.rdfhdt.hdt.hdt.HDT;
@@ -24,7 +25,11 @@ public class HdtDataSourceTest extends DataSourceTest {
2425

2526
@BeforeClass
2627
public static void setUpClass() throws Exception {
27-
HdtDataSourceType.register();
28+
final String typeName = "HdtTestSourceType";
29+
if ( ! DataSourceTypesRegistry.isRegistered(typeName) ) {
30+
DataSourceTypesRegistry.register( typeName, new HdtDataSourceType() );
31+
}
32+
2833
// HDT does not seem to support an InputReader, so write to temp file
2934
File temp = getResourceAsFile();
3035

@@ -37,8 +42,7 @@ public static void setUpClass() throws Exception {
3742
temp.getAbsoluteFile().delete();
3843

3944
// Everything is in place, now create the LDF datasource
40-
JsonObject config = createConfig("hdt test", "hdt test",
41-
HdtDataSourceType.TYPE_NAME);
45+
JsonObject config = createConfig("hdt test", "hdt test", typeName);
4246

4347
JsonObject settings = new JsonObject();
4448
settings.addProperty("file", hdtfile.getAbsolutePath());

src/test/java/org/linkeddatafragments/datasource/JenaTDBDataSourceTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.BeforeClass;
2020

2121
import org.linkeddatafragments.datasource.DataSourceFactory;
22+
import org.linkeddatafragments.datasource.DataSourceTypesRegistry;
2223
import org.linkeddatafragments.datasource.tdb.JenaTDBDataSourceType;
2324

2425
/**
@@ -31,7 +32,11 @@ public class JenaTDBDataSourceTest extends DataSourceTest {
3132

3233
@BeforeClass
3334
public static void setUpClass() throws Exception {
34-
JenaTDBDataSourceType.register();
35+
final String typeName = "JenaSourceType";
36+
if ( ! DataSourceTypesRegistry.isRegistered(typeName) ) {
37+
DataSourceTypesRegistry.register( typeName,
38+
new JenaTDBDataSourceType() );
39+
}
3540

3641
String tmpdir = System.getProperty("java.io.tmpdir");
3742
jena = new File(tmpdir, "ldf-jena-test");
@@ -46,7 +51,7 @@ public static void setUpClass() throws Exception {
4651

4752
// Everything is in place, now create the LDF datasource
4853
JsonObject config = createConfig("jena tdb test", "jena tdb test",
49-
JenaTDBDataSourceType.TYPE_NAME);
54+
typeName);
5055

5156
JsonObject settings = new JsonObject();
5257
settings.addProperty("directory", jena.getAbsolutePath());

0 commit comments

Comments
 (0)