package eu.fbk.knowledgestore.client; import java.io.InputStream; import java.net.URL; import java.util.List; import java.util.Map; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.openrdf.model.Statement; import org.openrdf.model.URI; import org.openrdf.rio.RDFFormat; import eu.fbk.knowledgestore.KnowledgeStore; import eu.fbk.knowledgestore.OperationException; import eu.fbk.knowledgestore.Session; import eu.fbk.knowledgestore.data.Data; import eu.fbk.knowledgestore.data.Record; import eu.fbk.knowledgestore.data.Representation; import eu.fbk.knowledgestore.data.Stream; import eu.fbk.knowledgestore.internal.Util; import eu.fbk.knowledgestore.internal.rdf.RDFUtil; import eu.fbk.knowledgestore.vocabulary.KS; public class ClientExample { private static final String SERVER_URL = "http://localhost:8080/"; private static final String USERNAME = "ks"; private static final String PASSWORD = "kspass"; private static final String RECORD_RESOURCE = "resources.ttl"; private static final Map<String, String> FILE_RESOURCES = ImmutableMap .<String, String>builder() // .put("http://www.newsreader-project.eu/2013/4/30/58B2-1JT1-DYTM-916F.xml", "58B2-1JT1-DYTM-916F.xml") // .put("http://www.newsreader-project.eu/2013/4/30/58B2-1JT1-DYTM-916F.naf", "58B2-1JT1-DYTM-916F.naf") // .put("http://www.newsreader-project.eu/2013/4/30/589F-S2Y1-JD34-V1MC.xml", "589F-S2Y1-JD34-V1MC.xml") // .put("http://www.newsreader-project.eu/2013/4/30/589F-S2Y1-JD34-V1MC.naf", "589F-S2Y1-JD34-V1MC.naf") // .put("http://www.newsreader-project.eu/2013/4/30/58B2-1JT1-DYTM-9159.xml", "58B2-1JT1-DYTM-9159.xml") // .put("http://www.newsreader-project.eu/2013/4/30/58B2-1JT1-DYTM-9159.naf", "58B2-1JT1-DYTM-9159.naf") // .build(); public static void main(final String... args) throws OperationException { // Initialize a KnowledgeStore client final KnowledgeStore store = Client.builder(SERVER_URL).maxConnections(2) .validateServer(false).build(); try { // Acquire a session for a given username/password pair final Session session = store.newSession(USERNAME, PASSWORD); // Clear all resources stored in the KS session.delete(KS.RESOURCE).exec(); // Store resource records, in a single operation final List<Record> records = loadRecords(RECORD_RESOURCE); session.merge(KS.RESOURCE).criteria("overwrite *").records(records).exec(); // Store resource files, one at a time for (final Map.Entry<String, String> entry : FILE_RESOURCES.entrySet()) { final URI resourceID = Data.getValueFactory().createURI(entry.getKey()); final Representation representation = loadRepresentations(entry.getValue()); try { session.upload(resourceID).representation(representation).exec(); } finally { representation.close(); } } // Count and print the number of resources in the KS final long numResources = session.count(KS.RESOURCE).exec(); System.out.println(numResources + " resources in the KS"); // Count and print the number of files in the KS long numFiles = 0L; for (final String id : FILE_RESOURCES.keySet()) { final URI resourceID = Data.getValueFactory().createURI(id); final Representation storedRepresentation = session.download(resourceID).exec(); if (storedRepresentation != null) { storedRepresentation.close(); ++numFiles; } } System.out.println(numFiles + " files in the KS"); // Close the session session.close(); } finally { // Ensure to close the KS (will also close pending sessions) store.close(); } } private static List<Record> loadRecords(final String resourceName) { final InputStream in = ClientExample.class.getResourceAsStream(resourceName); try { final RDFFormat format = RDFFormat.forFileName(resourceName); final Stream<Statement> stmt = RDFUtil.readRDF(in, format, null, null, false); return Record.decode(stmt, ImmutableList.of(KS.RESOURCE, KS.MENTION), false).toList(); } finally { Util.closeQuietly(in); } } private static Representation loadRepresentations(final String resourceName) { final URL url = ClientExample.class.getResource(resourceName); return Representation.create(url); } }