package com.clarkparsia.empire.ds.impl; import com.clarkparsia.empire.ds.Alias; import com.clarkparsia.empire.ds.DataSource; import com.clarkparsia.empire.ds.DataSourceFactory; import com.clarkparsia.empire.ds.DataSourceException; import com.clarkparsia.empire.impl.sparql.SPARQLDialect; import com.clarkparsia.empire.impl.sparql.ARQSPARQLDialect; import java.util.Map; import java.net.URL; import java.net.MalformedURLException; /** * <p>DataSourceFactory implementation to create a Sparql endpoint backed data source.</p> * * @author Michael Grove * @version 0.6.5 * @since 0.6.5 * @see SparqlEndpointDataSource */ @Alias("sparql") public class SparqlEndpointSourceFactory implements DataSourceFactory { /** * Configuration map key for the URL of the sparql endpoint. */ public static final String KEY_URL = "url"; /** * Configuration parameter for specifying arq sparql dialect w/ its special bnode encoding, or the standard dialect * for sparql. */ public static final String KEY_DIALECT = "dialect"; /** * @inheritDoc */ public boolean canCreate(final Map<String, Object> theMap) { return theMap.containsKey(KEY_URL); } /** * @inheritDoc */ public DataSource create(final Map<String, Object> theMap) throws DataSourceException { if (canCreate(theMap)) { try { SPARQLDialect aDialect = SPARQLDialect.instance(); if (theMap.containsKey(KEY_DIALECT) && theMap.get(KEY_DIALECT).equals("arq")) { aDialect = ARQSPARQLDialect.instance(); } return new SparqlEndpointDataSource(new URL(theMap.get(KEY_URL).toString()), aDialect); } catch (MalformedURLException e) { throw new DataSourceException(e); } } else { throw new DataSourceException("Invalid configuration map, missing required key '" + KEY_URL + "'."); } } }