Skip to content

Commit 717d61d

Browse files
author
James Leigh
committed
Fix #860: Deprecate getSystemRepository()
Signed-off-by: James Leigh <james.leigh@ontotext.com>
1 parent 6f19c0e commit 717d61d

3 files changed

Lines changed: 95 additions & 47 deletions

File tree

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(

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

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,39 @@
77
*******************************************************************************/
88
package org.eclipse.rdf4j.repository.manager;
99

10+
import java.io.ByteArrayInputStream;
11+
import java.io.ByteArrayOutputStream;
1012
import java.io.IOException;
13+
import java.io.InputStream;
1114
import java.net.MalformedURLException;
1215
import java.net.URL;
1316
import java.util.ArrayList;
1417
import java.util.Collection;
18+
import java.util.LinkedHashSet;
1519
import java.util.List;
20+
import java.util.Set;
1621

1722
import org.apache.http.client.HttpClient;
18-
import org.eclipse.rdf4j.http.client.HttpClientSessionManager;
19-
import org.eclipse.rdf4j.http.client.SharedHttpClientSessionManager;
2023
import org.eclipse.rdf4j.http.client.RDF4JProtocolSession;
24+
import org.eclipse.rdf4j.http.client.SharedHttpClientSessionManager;
25+
import org.eclipse.rdf4j.http.protocol.Protocol;
2126
import org.eclipse.rdf4j.http.protocol.UnauthorizedException;
2227
import org.eclipse.rdf4j.model.IRI;
28+
import org.eclipse.rdf4j.model.Model;
29+
import org.eclipse.rdf4j.model.Resource;
2330
import org.eclipse.rdf4j.model.Value;
31+
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
32+
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
2433
import org.eclipse.rdf4j.model.util.Literals;
2534
import org.eclipse.rdf4j.query.BindingSet;
2635
import org.eclipse.rdf4j.query.QueryEvaluationException;
2736
import org.eclipse.rdf4j.query.TupleQueryResult;
2837
import org.eclipse.rdf4j.repository.Repository;
2938
import org.eclipse.rdf4j.repository.RepositoryException;
39+
import org.eclipse.rdf4j.repository.config.RepositoryConfig;
3040
import org.eclipse.rdf4j.repository.config.RepositoryConfigException;
31-
import org.eclipse.rdf4j.repository.config.RepositoryConfigUtil;
3241
import org.eclipse.rdf4j.repository.http.HTTPRepository;
42+
import org.eclipse.rdf4j.rio.Rio;
3343

3444
/**
3545
* A manager for {@link Repository}s that reside on a remote server. This repository manager allows one to
@@ -213,7 +223,7 @@ protected Repository createRepository(String id)
213223
{
214224
HTTPRepository result = null;
215225

216-
if (RepositoryConfigUtil.hasRepositoryConfig(getSystemRepository(), id)) {
226+
if (hasRepositoryConfig(id)) {
217227
result = new HTTPRepository(serverURL, id);
218228
result.setHttpClientSessionManager(getSesameClient());
219229
result.setUsernameAndPassword(username, password);
@@ -223,6 +233,25 @@ protected Repository createRepository(String id)
223233
return result;
224234
}
225235

236+
@Override
237+
public Set<String> getRepositoryIDs()
238+
throws RepositoryException
239+
{
240+
Set<String> idSet = new LinkedHashSet<String>();
241+
getAllRepositoryInfos(false).forEach(info -> {
242+
idSet.add(info.getId());
243+
});
244+
return idSet;
245+
}
246+
247+
@Override
248+
public boolean hasRepositoryConfig(String repositoryID)
249+
throws RepositoryException,
250+
RepositoryConfigException
251+
{
252+
return getRepositoryInfo(repositoryID) != null;
253+
}
254+
226255
@Override
227256
public RepositoryInfo getRepositoryInfo(String id)
228257
throws RepositoryException
@@ -298,12 +327,37 @@ public Collection<RepositoryInfo> getAllRepositoryInfos(boolean skipSystemRepo)
298327
return result;
299328
}
300329

330+
@Override
331+
public void addRepositoryConfig(RepositoryConfig config)
332+
throws RepositoryException,
333+
RepositoryConfigException
334+
{
335+
RDF4JProtocolSession httpClient = getSesameClient().createRDF4JProtocolSession(serverURL);
336+
httpClient.setUsernameAndPassword(username, password);
337+
httpClient.setRepository(Protocol.getRepositoryLocation(serverURL, SystemRepository.ID));
338+
Model model = new LinkedHashModel();
339+
config.export(model);
340+
String baseURI = Protocol.getRepositoryLocation(serverURL, config.getID());
341+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
342+
Rio.write(model, baos, httpClient.getPreferredRDFFormat());
343+
Resource ctx = SimpleValueFactory.getInstance().createIRI(baseURI + "#" + config.getID());
344+
removeRepository(config.getID());
345+
try {
346+
try (InputStream contents = new ByteArrayInputStream(baos.toByteArray())) {
347+
httpClient.upload(contents, baseURI, httpClient.getPreferredRDFFormat(), false, true, ctx);
348+
}
349+
}
350+
catch (IOException | QueryEvaluationException | UnauthorizedException ue) {
351+
throw new RepositoryException(ue);
352+
}
353+
}
354+
301355
@Override
302356
public boolean removeRepository(String repositoryID)
303357
throws RepositoryException, RepositoryConfigException
304358
{
305359

306-
boolean existingRepo = RepositoryConfigUtil.hasRepositoryConfig(getSystemRepository(), repositoryID);
360+
boolean existingRepo = hasRepositoryConfig(repositoryID);
307361

308362
if (existingRepo) {
309363
RDF4JProtocolSession httpClient = getSesameClient().createRDF4JProtocolSession(serverURL);

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

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ protected abstract Repository createSystemRepository()
127127
/**
128128
* Gets the SYSTEM repository.
129129
*/
130+
@Deprecated
130131
public Repository getSystemRepository() {
131132
if (!isInitialized()) {
132133
throw new IllegalStateException("Repository Manager is not initialized");
@@ -367,7 +368,7 @@ public Repository getRepository(String identity)
367368
if (result != null && !result.isInitialized()) {
368369
// repository exists but has been shut down. throw away the old
369370
// object so we can re-read from the config.
370-
initializedRepositories.remove(result);
371+
initializedRepositories.remove(identity);
371372
result = null;
372373
}
373374

@@ -525,28 +526,22 @@ public void refresh() {
525526

526527
// FIXME: uninitialized, removed repositories won't be cleaned up.
527528
try {
528-
RepositoryConnection cleanupCon = getSystemRepository().getConnection();
529-
try {
530-
synchronized (initializedRepositories) {
531-
Iterator<Map.Entry<String, Repository>> iter = initializedRepositories.entrySet().iterator();
532-
533-
while (iter.hasNext()) {
534-
Map.Entry<String, Repository> entry = iter.next();
535-
String repositoryID = entry.getKey();
536-
Repository repository = entry.getValue();
537-
538-
if (!SystemRepository.ID.equals(repositoryID)) {
539-
// remove from initialized repositories
540-
iter.remove();
541-
// refresh single repository
542-
refreshRepository(cleanupCon, repositoryID, repository);
543-
}
529+
synchronized (initializedRepositories) {
530+
Iterator<Map.Entry<String, Repository>> iter = initializedRepositories.entrySet().iterator();
531+
532+
while (iter.hasNext()) {
533+
Map.Entry<String, Repository> entry = iter.next();
534+
String repositoryID = entry.getKey();
535+
Repository repository = entry.getValue();
536+
537+
if (!SystemRepository.ID.equals(repositoryID)) {
538+
// remove from initialized repositories
539+
iter.remove();
540+
// refresh single repository
541+
refreshRepository(repositoryID, repository);
544542
}
545543
}
546544
}
547-
finally {
548-
cleanupCon.close();
549-
}
550545
}
551546
catch (RepositoryException re) {
552547
logger.error("Failed to refresh repositories", re);
@@ -576,7 +571,7 @@ public void shutDown() {
576571
}
577572
}
578573

579-
void refreshRepository(RepositoryConnection con, String repositoryID, Repository repository) {
574+
void refreshRepository(String repositoryID, Repository repository) {
580575
logger.debug("Refreshing repository {}...", repositoryID);
581576
try {
582577
if (repository.isInitialized()) {
@@ -587,12 +582,12 @@ void refreshRepository(RepositoryConnection con, String repositoryID, Repository
587582
logger.error("Failed to shut down repository", e);
588583
}
589584

590-
cleanupIfRemoved(con, repositoryID);
585+
cleanupIfRemoved(repositoryID);
591586
}
592587

593-
void cleanupIfRemoved(RepositoryConnection con, String repositoryID) {
588+
void cleanupIfRemoved(String repositoryID) {
594589
try {
595-
if (RepositoryConfigUtil.getContext(con, repositoryID) == null) {
590+
if (!hasRepositoryConfig(repositoryID)) {
596591
logger.debug("Cleaning up repository {}, its configuration has been removed", repositoryID);
597592

598593
cleanUpRepository(repositoryID);

0 commit comments

Comments
 (0)