77 *******************************************************************************/
88package org .eclipse .rdf4j .repository .manager ;
99
10+ import java .io .ByteArrayInputStream ;
11+ import java .io .ByteArrayOutputStream ;
1012import java .io .IOException ;
13+ import java .io .InputStream ;
1114import java .net .MalformedURLException ;
1215import java .net .URL ;
1316import java .util .ArrayList ;
1417import java .util .Collection ;
18+ import java .util .LinkedHashSet ;
1519import java .util .List ;
20+ import java .util .Set ;
1621
1722import org .apache .http .client .HttpClient ;
18- import org .eclipse .rdf4j .http .client .HttpClientSessionManager ;
19- import org .eclipse .rdf4j .http .client .SharedHttpClientSessionManager ;
2023import org .eclipse .rdf4j .http .client .RDF4JProtocolSession ;
24+ import org .eclipse .rdf4j .http .client .SharedHttpClientSessionManager ;
25+ import org .eclipse .rdf4j .http .protocol .Protocol ;
2126import org .eclipse .rdf4j .http .protocol .UnauthorizedException ;
2227import org .eclipse .rdf4j .model .IRI ;
28+ import org .eclipse .rdf4j .model .Model ;
29+ import org .eclipse .rdf4j .model .Resource ;
2330import org .eclipse .rdf4j .model .Value ;
31+ import org .eclipse .rdf4j .model .impl .LinkedHashModel ;
32+ import org .eclipse .rdf4j .model .impl .SimpleValueFactory ;
2433import org .eclipse .rdf4j .model .util .Literals ;
2534import org .eclipse .rdf4j .query .BindingSet ;
2635import org .eclipse .rdf4j .query .QueryEvaluationException ;
2736import org .eclipse .rdf4j .query .TupleQueryResult ;
2837import org .eclipse .rdf4j .repository .Repository ;
2938import org .eclipse .rdf4j .repository .RepositoryException ;
39+ import org .eclipse .rdf4j .repository .config .RepositoryConfig ;
3040import org .eclipse .rdf4j .repository .config .RepositoryConfigException ;
31- import org .eclipse .rdf4j .repository .config .RepositoryConfigUtil ;
3241import 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 );
0 commit comments