diff --git a/.classpath b/.classpath
deleted file mode 100644
index 54931c2..0000000
--- a/.classpath
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 625723d..0000000
--- a/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-eclipse.preferences.version=1
-encoding//src/main=UTF-8
-encoding//src/main/java=UTF-8
-encoding//src/test=UTF-8
-encoding//src/test/java=UTF-8
-encoding/=UTF-8
-encoding/TestFiles=UTF-8
-encoding/resources=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 13b3428..0000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,13 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f..0000000
--- a/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/pom.xml b/pom.xml
index ebc57f7..1cc67a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -105,6 +105,11 @@
jena-base
3.12.0
+
+ org.apache.jena
+ jena-tdb
+ 3.12.0
+
diff --git a/src/main/java/org/spdx/spdxRdfStore/RdfStore.java b/src/main/java/org/spdx/spdxRdfStore/RdfStore.java
index a6ba7ce..d889c9b 100644
--- a/src/main/java/org/spdx/spdxRdfStore/RdfStore.java
+++ b/src/main/java/org/spdx/spdxRdfStore/RdfStore.java
@@ -37,6 +37,8 @@
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.ARQ;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.util.FileManager;
@@ -71,11 +73,21 @@ public class RdfStore implements IModelStore, ISerializableModelStore {
Map documentUriModelMap = new ConcurrentHashMap<>();
private OutputFormat outputFormat = OutputFormat.XML_ABBREV;
+
+ private Dataset dataset;
static {
ARQ.init(); // Insure ARQ is initialized
}
+ public RdfStore() {
+ dataset = DatasetFactory.create();
+ }
+
+ public RdfStore(Dataset dataset) {
+ this.dataset = dataset;
+ }
+
/**
* @return the outputFormat
@@ -143,7 +155,7 @@ public void create(String documentUri, String id, String type) throws InvalidSPD
Objects.requireNonNull(type, "Missing required type");
RdfSpdxDocumentModelManager modelManager = documentUriModelMap.get(documentUri);
if (Objects.isNull(modelManager)) {
- Model model = ModelFactory.createDefaultModel();
+ Model model = dataset.getNamedModel(documentUri);
model.getGraph().getPrefixMapping().setNsPrefix("spdx", SpdxConstants.SPDX_NAMESPACE);
model.getGraph().getPrefixMapping().setNsPrefix("doap", SpdxConstants.DOAP_NAMESPACE);
model.getGraph().getPrefixMapping().setNsPrefix("ptr", SpdxConstants.RDF_POINTER_NAMESPACE);
@@ -218,7 +230,7 @@ public String getNextId(IdType idType, String documentUri) throws InvalidSPDXAna
Objects.requireNonNull(idType, "Missing required ID type");
RdfSpdxDocumentModelManager modelManager = documentUriModelMap.get(documentUri);
if (Objects.isNull(modelManager)) {
- Model model = ModelFactory.createDefaultModel();
+ Model model = dataset.getNamedModel(documentUri);
model.getGraph().getPrefixMapping().setNsPrefix("spdx", SpdxConstants.SPDX_NAMESPACE);
model.getGraph().getPrefixMapping().setNsPrefix("doap", SpdxConstants.DOAP_NAMESPACE);
modelManager = new RdfSpdxDocumentModelManager(documentUri, model);
@@ -518,8 +530,10 @@ public String deSerialize(InputStream stream, boolean overwrite) throws InvalidS
Model model = ModelFactory.createDefaultModel();
model.read(stream, null);
String documentNamespace = getDocumentNamespace(model);
- RdfSpdxDocumentModelManager modelManager = new RdfSpdxDocumentModelManager(documentNamespace, model);
CompatibilityUpgrader.upgrade(model);
+ dataset.addNamedModel(documentNamespace, model);
+ RdfSpdxDocumentModelManager modelManager = new RdfSpdxDocumentModelManager(documentNamespace,
+ dataset.getNamedModel(documentNamespace));
RdfSpdxDocumentModelManager previousModel = documentUriModelMap.putIfAbsent(documentNamespace, modelManager);
if (!Objects.isNull(previousModel)) {
if (overwrite) {
diff --git a/src/test/java/org/spdx/spdxRdfStore/RdfStoreTest.java b/src/test/java/org/spdx/spdxRdfStore/RdfStoreTest.java
index de33b86..12d00cf 100644
--- a/src/test/java/org/spdx/spdxRdfStore/RdfStoreTest.java
+++ b/src/test/java/org/spdx/spdxRdfStore/RdfStoreTest.java
@@ -5,12 +5,17 @@
import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.commons.io.FileUtils;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.tdb.TDBFactory;
import org.spdx.library.InvalidSPDXAnalysisException;
import org.spdx.library.SpdxConstants;
import org.spdx.library.model.ExternalRef;
@@ -174,5 +179,33 @@ public void testLoadModelFromFile() throws InvalidSPDXAnalysisException, IOExcep
documentDescribes = doc.getDocumentDescribes();
assertEquals(2, documentDescribes.size());
}
+
+ public void testTdb() throws InvalidSPDXAnalysisException, IOException {
+ File tdbDir = Files.createTempDirectory("TDB").toFile();
+ Dataset dataset = null;
+ try {
+ dataset = TDBFactory.createDataset(tdbDir.getAbsolutePath());
+ RdfStore rdfStore = new RdfStore(dataset);
+ SpdxModelFactory.createModelObject(rdfStore, DOCUMENT_URI1, SpdxConstants.SPDX_DOCUMENT_ID, SpdxConstants.CLASS_SPDX_DOCUMENT, null);
+ SpdxModelFactory.createModelObject(rdfStore, DOCUMENT_URI1, ID_2, SpdxConstants.CLASS_SPDX_FILE, null);
+ SpdxModelFactory.createModelObject(rdfStore, DOCUMENT_URI1, ID_3, SpdxConstants.CLASS_SPDX_FILE, null);
+ SpdxModelFactory.createModelObject(rdfStore, DOCUMENT_URI1, ID_4, SpdxConstants.CLASS_SPDX_FILE, null);
+ Stream result = rdfStore.getAllItems(DOCUMENT_URI1, SpdxConstants.CLASS_SPDX_FILE);
+ final ArrayList resultList = new ArrayList<>();
+ resultList.add(new TypedValue(ID_2, SpdxConstants.CLASS_SPDX_FILE));
+ resultList.add(new TypedValue(ID_3, SpdxConstants.CLASS_SPDX_FILE));
+ resultList.add(new TypedValue(ID_4, SpdxConstants.CLASS_SPDX_FILE));
+ for (TypedValue tv:result.collect(Collectors.toList())) {
+ assertTrue(resultList.contains(tv));
+ resultList.remove(tv);
+ }
+ assertEquals(0, resultList.size());
+ } finally {
+ if (dataset != null) {
+ dataset.end();
+ }
+ FileUtils.deleteDirectory(tdbDir);
+ }
+ }
}