Skip to content

Commit 80ff3a4

Browse files
author
James Leigh
committed
Merge branch 'issues/#860-repo-mngr-api' into issues/#859-config-files
2 parents 7a5ebd1 + 717d61d commit 80ff3a4

8 files changed

Lines changed: 146 additions & 139 deletions

File tree

core/console/src/main/java/org/eclipse/rdf4j/console/Create.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.eclipse.rdf4j.model.Model;
2323
import org.eclipse.rdf4j.model.Resource;
2424
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
25+
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
2526
import org.eclipse.rdf4j.model.util.Models;
2627
import org.eclipse.rdf4j.model.vocabulary.RDF;
2728
import org.eclipse.rdf4j.repository.Repository;
@@ -94,10 +95,9 @@ private void createRepository(final String templateName)
9495
boolean eof = inputParameters(valueMap, variableMap, configTemplate.getMultilineMap());
9596
if (!eof) {
9697
final String configString = configTemplate.render(valueMap);
97-
final Repository systemRepo = this.state.getManager().getSystemRepository();
9898
final Model graph = new LinkedHashModel();
9999
final RDFParser rdfParser = Rio.createParser(RDFFormat.TURTLE,
100-
systemRepo.getValueFactory());
100+
SimpleValueFactory.getInstance());
101101
rdfParser.setRDFHandler(new StatementCollector(graph));
102102
rdfParser.parse(new StringReader(configString), RepositoryConfigSchema.NAMESPACE);
103103
final Resource repositoryNode = Models.subject(
@@ -106,20 +106,20 @@ private void createRepository(final String templateName)
106106
final RepositoryConfig repConfig = RepositoryConfig.create(graph, repositoryNode);
107107
repConfig.validate();
108108
String overwrite = "WARNING: you are about to overwrite the configuration of an existing repository!";
109-
boolean proceedOverwrite = RepositoryConfigUtil.hasRepositoryConfig(systemRepo,
109+
boolean proceedOverwrite = this.state.getManager().hasRepositoryConfig(
110110
repConfig.getID()) ? consoleIO.askProceed(overwrite, false) : true;
111111
String suggested = this.state.getManager().getNewRepositoryID(repConfig.getID());
112112
String invalid = "WARNING: There are potentially incompatible characters in the repository id.";
113113
boolean proceedInvalid = !suggested.startsWith(repConfig.getID())
114114
? consoleIO.askProceed(invalid, false) : true;
115115
if (proceedInvalid && proceedOverwrite) {
116116
try {
117-
RepositoryConfigUtil.updateRepositoryConfigs(systemRepo, repConfig);
117+
this.state.getManager().addRepositoryConfig(repConfig);
118118
consoleIO.writeln("Repository created");
119119
}
120120
catch (RepositoryReadOnlyException e) {
121-
if (lockRemover.tryToRemoveLock(systemRepo)) {
122-
RepositoryConfigUtil.updateRepositoryConfigs(systemRepo, repConfig);
121+
if (lockRemover.tryToRemoveLock(this.state.getManager().getSystemRepository())) {
122+
this.state.getManager().addRepositoryConfig(repConfig);
123123
consoleIO.writeln("Repository created");
124124
}
125125
else {

core/console/src/test/java/org/eclipse/rdf4j/console/AbstractCommandTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@
1919
import org.eclipse.rdf4j.model.Model;
2020
import org.eclipse.rdf4j.model.Resource;
2121
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
22+
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
2223
import org.eclipse.rdf4j.model.util.Models;
2324
import org.eclipse.rdf4j.model.vocabulary.RDF;
24-
import org.eclipse.rdf4j.repository.Repository;
2525
import org.eclipse.rdf4j.repository.RepositoryConnection;
2626
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
2727
import org.eclipse.rdf4j.repository.config.RepositoryConfigException;
2828
import org.eclipse.rdf4j.repository.config.RepositoryConfigSchema;
29-
import org.eclipse.rdf4j.repository.config.RepositoryConfigUtil;
3029
import org.eclipse.rdf4j.repository.manager.RepositoryManager;
3130
import org.eclipse.rdf4j.rio.RDFFormat;
3231
import org.eclipse.rdf4j.rio.RDFParser;
@@ -81,8 +80,7 @@ protected final void addRepositories(String... identities)
8180
protected void addRepository(InputStream configStream, URL data)
8281
throws UnsupportedEncodingException, IOException, RDF4JException
8382
{
84-
Repository systemRepo = manager.getSystemRepository();
85-
RDFParser rdfParser = Rio.createParser(RDFFormat.TURTLE, systemRepo.getValueFactory());
83+
RDFParser rdfParser = Rio.createParser(RDFFormat.TURTLE, SimpleValueFactory.getInstance());
8684
Model graph = new LinkedHashModel();
8785
rdfParser.setRDFHandler(new StatementCollector(graph));
8886
rdfParser.parse(new StringReader(IOUtil.readString(new InputStreamReader(configStream, "UTF-8"))),
@@ -93,7 +91,7 @@ protected void addRepository(InputStream configStream, URL data)
9391
() -> new RepositoryConfigException("could not find subject resource"));
9492
RepositoryConfig repoConfig = RepositoryConfig.create(graph, repositoryNode);
9593
repoConfig.validate();
96-
RepositoryConfigUtil.updateRepositoryConfigs(systemRepo, repoConfig);
94+
manager.addRepositoryConfig(repoConfig);
9795
if (null != data) { // null if we didn't provide a data file
9896
final String repId = Models.objectLiteral(
9997
graph.filter(repositoryNode, RepositoryConfigSchema.REPOSITORYID, null)).orElseThrow(

core/http/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/RepositoryListController.java

Lines changed: 28 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@
1818
import org.eclipse.rdf4j.http.server.ProtocolUtil;
1919
import org.eclipse.rdf4j.http.server.ServerHTTPException;
2020
import org.eclipse.rdf4j.model.ValueFactory;
21+
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
2122
import org.eclipse.rdf4j.query.BindingSet;
22-
import org.eclipse.rdf4j.query.QueryLanguage;
23-
import org.eclipse.rdf4j.query.TupleQueryResult;
2423
import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet;
2524
import org.eclipse.rdf4j.query.impl.IteratingTupleQueryResult;
2625
import org.eclipse.rdf4j.query.resultio.TupleQueryResultWriterFactory;
2726
import org.eclipse.rdf4j.query.resultio.TupleQueryResultWriterRegistry;
28-
import org.eclipse.rdf4j.repository.Repository;
29-
import org.eclipse.rdf4j.repository.RepositoryConnection;
3027
import org.eclipse.rdf4j.repository.RepositoryException;
28+
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
3129
import org.eclipse.rdf4j.repository.manager.RepositoryManager;
3230
import org.springframework.context.ApplicationContextException;
3331
import org.springframework.web.servlet.ModelAndView;
@@ -40,19 +38,6 @@
4038
*/
4139
public class RepositoryListController extends AbstractController {
4240

43-
private static final String REPOSITORY_LIST_QUERY;
44-
45-
static {
46-
StringBuilder query = new StringBuilder(256);
47-
query.append(
48-
"SELECT id, title, \"true\"^^xsd:boolean as \"readable\", \"true\"^^xsd:boolean as \"writable\"");
49-
query.append("FROM {} rdf:type {sys:Repository};");
50-
query.append(" [rdfs:label {title}];");
51-
query.append(" sys:repositoryID {id} ");
52-
query.append("USING NAMESPACE sys = <http://www.openrdf.org/config/repository#>");
53-
REPOSITORY_LIST_QUERY = query.toString();
54-
}
55-
5641
private RepositoryManager repositoryManager;
5742

5843
public RepositoryListController()
@@ -72,52 +57,36 @@ protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpSer
7257
Map<String, Object> model = new HashMap<String, Object>();
7358

7459
if (METHOD_GET.equals(request.getMethod())) {
75-
Repository systemRepository = repositoryManager.getSystemRepository();
76-
ValueFactory vf = systemRepository.getValueFactory();
60+
ValueFactory vf = SimpleValueFactory.getInstance();
7761

7862
try {
79-
RepositoryConnection con = systemRepository.getConnection();
80-
try {
81-
// FIXME: The query result is cached here as we need to close the
82-
// connection before returning. Would be much better to stream
83-
// the
84-
// query result directly to the client.
85-
86-
List<String> bindingNames = new ArrayList<String>();
87-
List<BindingSet> bindingSets = new ArrayList<BindingSet>();
88-
89-
TupleQueryResult queryResult = con.prepareTupleQuery(QueryLanguage.SERQL,
90-
REPOSITORY_LIST_QUERY).evaluate();
91-
try {
92-
// Determine the repository's URI
93-
StringBuffer requestURL = request.getRequestURL();
94-
if (requestURL.charAt(requestURL.length() - 1) != '/') {
95-
requestURL.append('/');
96-
}
97-
String namespace = requestURL.toString();
98-
99-
while (queryResult.hasNext()) {
100-
QueryBindingSet bindings = new QueryBindingSet(queryResult.next());
101-
102-
String id = bindings.getValue("id").stringValue();
103-
bindings.addBinding("uri", vf.createIRI(namespace, id));
104-
105-
bindingSets.add(bindings);
106-
}
107-
108-
bindingNames.add("uri");
109-
bindingNames.addAll(queryResult.getBindingNames());
110-
}
111-
finally {
112-
queryResult.close();
113-
}
114-
model.put(QueryResultView.QUERY_RESULT_KEY,
115-
new IteratingTupleQueryResult(bindingNames, bindingSets));
63+
List<String> bindingNames = new ArrayList<String>();
64+
List<BindingSet> bindingSets = new ArrayList<BindingSet>();
11665

66+
// Determine the repository's URI
67+
StringBuffer requestURL = request.getRequestURL();
68+
if (requestURL.charAt(requestURL.length() - 1) != '/') {
69+
requestURL.append('/');
11770
}
118-
finally {
119-
con.close();
120-
}
71+
String namespace = requestURL.toString();
72+
73+
repositoryManager.getAllRepositoryInfos(false).forEach(info -> {
74+
QueryBindingSet bindings = new QueryBindingSet();
75+
bindings.addBinding("uri", vf.createIRI(namespace, info.getId()));
76+
bindings.addBinding("id", vf.createLiteral(info.getId()));
77+
bindings.addBinding("title", vf.createLiteral(info.getDescription()));
78+
bindings.addBinding("readable", vf.createLiteral(true));
79+
bindings.addBinding("writable", vf.createLiteral(true));
80+
bindingSets.add(bindings);
81+
});
82+
83+
bindingNames.add("uri");
84+
bindingNames.add("id");
85+
bindingNames.add("title");
86+
bindingNames.add("readable");
87+
bindingNames.add("writable");
88+
model.put(QueryResultView.QUERY_RESULT_KEY,
89+
new IteratingTupleQueryResult(bindingNames, bindingSets));
12190
}
12291
catch (RepositoryException e) {
12392
throw new ServerHTTPException(e.getMessage(), e);

core/http/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/CreateServlet.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@
2222
import org.eclipse.rdf4j.model.Model;
2323
import org.eclipse.rdf4j.model.Resource;
2424
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
25+
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
2526
import org.eclipse.rdf4j.model.util.Models;
2627
import org.eclipse.rdf4j.model.vocabulary.RDF;
2728
import org.eclipse.rdf4j.query.QueryResultHandlerException;
28-
import org.eclipse.rdf4j.repository.Repository;
2929
import org.eclipse.rdf4j.repository.RepositoryException;
3030
import org.eclipse.rdf4j.repository.config.ConfigTemplate;
3131
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
3232
import org.eclipse.rdf4j.repository.config.RepositoryConfigSchema;
33-
import org.eclipse.rdf4j.repository.config.RepositoryConfigUtil;
3433
import org.eclipse.rdf4j.repository.manager.RepositoryInfo;
3534
import org.eclipse.rdf4j.repository.manager.SystemRepository;
3635
import org.eclipse.rdf4j.rio.RDFFormat;
@@ -125,9 +124,8 @@ private String createRepositoryConfig(final WorkbenchRequest req)
125124
private RepositoryConfig updateRepositoryConfig(final String configString)
126125
throws IOException, RDF4JException
127126
{
128-
final Repository systemRepo = manager.getSystemRepository();
129127
final Model graph = new LinkedHashModel();
130-
final RDFParser rdfParser = Rio.createParser(RDFFormat.TURTLE, systemRepo.getValueFactory());
128+
final RDFParser rdfParser = Rio.createParser(RDFFormat.TURTLE, SimpleValueFactory.getInstance());
131129
rdfParser.setRDFHandler(new StatementCollector(graph));
132130
rdfParser.parse(new StringReader(configString), RepositoryConfigSchema.NAMESPACE);
133131

@@ -137,7 +135,7 @@ private RepositoryConfig updateRepositoryConfig(final String configString)
137135
"could not find instance of Repository class in config"));
138136
final RepositoryConfig repConfig = RepositoryConfig.create(graph, res);
139137
repConfig.validate();
140-
RepositoryConfigUtil.updateRepositoryConfigs(systemRepo, repConfig);
138+
manager.addRepositoryConfig(repConfig);
141139
return repConfig;
142140
}
143141

core/repository/manager/src/main/java/org/eclipse/rdf4j/repository/manager/LocalRepositoryManager.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ public File getRepositoryDir(String repositoryID) {
217217
}
218218

219219
@Override
220+
@Deprecated
220221
public SystemRepository getSystemRepository() {
221222
return (SystemRepository)super.getSystemRepository();
222223
}
@@ -225,26 +226,18 @@ public SystemRepository getSystemRepository() {
225226
protected Repository createRepository(String id)
226227
throws RepositoryConfigException, RepositoryException
227228
{
228-
Repository systemRepository = getSystemRepository();
229+
Repository repository = null;
229230

230-
RepositoryConnection con = systemRepository.getConnection();
231-
try {
232-
Repository repository = null;
233-
234-
RepositoryConfig repConfig = RepositoryConfigUtil.getRepositoryConfig(systemRepository, id);
235-
if (repConfig != null) {
236-
repConfig.validate();
237-
238-
repository = createRepositoryStack(repConfig.getRepositoryImplConfig());
239-
repository.setDataDir(getRepositoryDir(id));
240-
repository.initialize();
241-
}
231+
RepositoryConfig repConfig = getRepositoryConfig(id);
232+
if (repConfig != null) {
233+
repConfig.validate();
242234

243-
return repository;
244-
}
245-
finally {
246-
con.close();
235+
repository = createRepositoryStack(repConfig.getRepositoryImplConfig());
236+
repository.setDataDir(getRepositoryDir(id));
237+
repository.initialize();
247238
}
239+
240+
return repository;
248241
}
249242

250243
/**
@@ -328,6 +321,12 @@ public RepositoryInfo getRepositoryInfo(String id)
328321
}
329322
}
330323

324+
public Set<String> getRepositoryIDs()
325+
throws RepositoryException
326+
{
327+
return RepositoryConfigUtil.getRepositoryIDs(getSystemRepository());
328+
}
329+
331330
@Override
332331
public List<RepositoryInfo> getAllRepositoryInfos(boolean skipSystemRepo)
333332
throws RepositoryException
@@ -454,7 +453,7 @@ public void commit(RepositoryConnection con) {
454453
"Modified repository {} has been initialized, refreshing...",
455454
repositoryID);
456455
// refresh single repository
457-
refreshRepository(cleanupCon, repositoryID, repository);
456+
refreshRepository(repositoryID, repository);
458457
}
459458
else {
460459
logger.debug(

0 commit comments

Comments
 (0)