StoreRepositoryDefault.java
package org.linkedopenactors.rdfpub.store.rdf4j;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import org.apache.commons.rdf.api.IRI;
import org.apache.commons.rdfrdf4j.RDF4J;
import org.apache.commons.rdfrdf4j.RDF4JDataset;
import org.linkedopenactors.rdfpub.store.DatasetRepository;
import org.linkedopenactors.rdfpub.store.StoreRepository;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Component
@Slf4j
class StoreRepositoryDefault implements StoreRepository {
private DatasetRepository datasetRepository;
private RDF4J rdf;
public StoreRepositoryDefault(RDF4J rdf, DatasetRepository datasetRepository) {
this.rdf = rdf;
this.datasetRepository = datasetRepository;
}
@Override
public Optional<org.linkedopenactors.rdfpub.store.Store> findStore(IRI storeName) {
return datasetRepository.findDataset(encode(storeName))
.map(ds->new StoreDefault(rdf, (RDF4JDataset)ds, storeName));
}
@Override
public org.linkedopenactors.rdfpub.store.Store createStore(IRI storeName) {
return new StoreDefault(rdf, (RDF4JDataset)datasetRepository.findDataset(encode(storeName))
.orElse((RDF4JDataset)datasetRepository.createDataset(encode(storeName))), storeName);
}
private String encode(IRI storeName) {
try {
String encoded = URLEncoder.encode(storeName.toString(), StandardCharsets.UTF_8.toString());
log.debug("encoded: " + encoded);
return encoded;
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("Unable to encode storeName: " + storeName, e);
}
}
@Override
public void shutdown() {
datasetRepository.shutdown();
}
}