Skip to content

Commit f8af7e6

Browse files
committed
Merge branch 'develop' into issues/#739-spin-lucene
2 parents 56097b5 + 36cb449 commit f8af7e6

29 files changed

Lines changed: 911 additions & 343 deletions

File tree

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ protected String readCommand()
5353
}
5454
write("> ");
5555
}
56-
String line = input.readLine().trim();
56+
String line = input.readLine();
57+
if (line == null) {
58+
return null;
59+
}
60+
line = line.trim();
5761
if (line.endsWith(".")) {
5862
line = line.substring(0, line.length() - 1);
5963
}

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/model/src/main/java/org/eclipse/rdf4j/model/datatypes/XMLDatatypeUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.eclipse.rdf4j.common.net.ParsedIRI;
2323
import org.eclipse.rdf4j.common.text.ASCIIUtil;
2424
import org.eclipse.rdf4j.model.IRI;
25+
import org.eclipse.rdf4j.model.util.Literals;
2526
import org.eclipse.rdf4j.model.vocabulary.XMLSchema;
2627

2728
/**
@@ -274,6 +275,9 @@ else if (datatype.equals(XMLSchema.QNAME)) {
274275
else if (datatype.equals(XMLSchema.ANYURI)) {
275276
result = isValidAnyURI(value);
276277
}
278+
else if (datatype.equals(XMLSchema.LANGUAGE)) {
279+
result = Literals.isValidLanguageTag(value);
280+
}
277281

278282
return result;
279283
}

0 commit comments

Comments
 (0)