11package org .linkeddatafragments .servlets ;
22
3+ import java .util .HashMap ;
4+ import java .util .Map .Entry ;
35import java .util .regex .Matcher ;
46import java .util .regex .Pattern ;
57
911import javax .servlet .http .HttpServletRequest ;
1012import javax .servlet .http .HttpServletResponse ;
1113
14+ import org .linkeddatafragments .config .ConfigReader ;
1215import org .rdfhdt .hdt .hdt .HDT ;
1316import org .rdfhdt .hdt .hdt .HDTManager ;
1417import org .rdfhdt .hdtjena .HDTGraph ;
@@ -29,15 +32,18 @@ public class BasicLdfServlet extends HttpServlet {
2932 private final static int TRIPLES_PER_PAGE = 100 ;
3033 private final static Pattern STRINGPATTERN = Pattern .compile ("^\" (.*)\" (?:\\ ^\\ ^<(.*)>|@(.*))?$" );
3134
32- private Model model ;
35+ private ConfigReader config ;
36+ private HashMap <String , Model > dataSources = new HashMap <String , Model >();
3337
3438 @ Override
35- public void init (ServletConfig config ) throws ServletException {
39+ public void init (ServletConfig servletConfig ) throws ServletException {
3640 try {
37- final String dataFile = config .getInitParameter ("dataFile" );
38- final HDT hdt = HDTManager .mapIndexedHDT (dataFile , null );
39- final HDTGraph graph = new HDTGraph (hdt );
40- model = ModelFactory .createModelForGraph (graph );
41+ config = new ConfigReader (servletConfig .getInitParameter ("configFile" ));
42+ for (Entry <String , String > dataSource : config .getDataSources ().entrySet ()) {
43+ final HDT hdt = HDTManager .mapIndexedHDT (dataSource .getValue (), null );
44+ final Model model = ModelFactory .createModelForGraph (new HDTGraph (hdt ));
45+ dataSources .put (dataSource .getKey (), model );
46+ }
4147 }
4248 catch (Exception e ) {
4349 throw new ServletException (e );
@@ -47,16 +53,24 @@ public void init(ServletConfig config) throws ServletException {
4753 @ Override
4854 public void doGet (HttpServletRequest request , HttpServletResponse response ) throws ServletException {
4955 try {
56+ // find the data source
5057 final String path = request .getRequestURI ().substring (request .getContextPath ().length ());
58+ final String dataSourceName = path .substring (1 );
59+ final Model dataSource = dataSources .get (dataSourceName );
60+ if (dataSource == null )
61+ throw new Exception ("data source not found" );
5162
52- // parse the subject, predicate, and object parameters
63+ // create the output model
5364 final Model output = ModelFactory .createDefaultModel ();
65+ output .setNsPrefixes (config .getPrefixes ());
66+
67+ // parse the subject, predicate, and object parameters
5468 final Resource subject = parseAsResource (request .getParameter ("subject" ), output );
5569 final Property predicate = parseAsProperty (request .getParameter ("predicate" ), output );
5670 final RDFNode object = parseAsNode (request .getParameter ("object" ), output );
5771
5872 // add all statements with the given parameters to the output model
59- final StmtIterator statements = model .listStatements (subject , predicate , object );
73+ final StmtIterator statements = dataSource .listStatements (subject , predicate , object );
6074 for (int i = 0 ; i < TRIPLES_PER_PAGE && statements .hasNext (); i ++)
6175 output .add (statements .next ());
6276
0 commit comments