From 44f30aafeeb8b655fef8e4c3b864f79b6dd138f2 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sun, 16 Apr 2017 10:11:46 +0200 Subject: [PATCH] add a new facade in front of DataStore This is done in preparation for the proposal API. In order to compute proposals we need to consume the API of the DataStore, but the code does not need to be in the DataStore. Extracting the API allows us to separate these concerns. --- .../org/lucares/pdb/datastore/DataStore.java | 1 - .../java/org/lucares/pdb/datastore/PdbDB.java | 34 +++++++++ .../org/lucares/pdb/datastore}/Proposal.java | 2 +- .../lucares/pdb/datastore/ProposalsTest.java | 74 +++++++++++++++++++ .../java/org/lucares/pdbui/PdbController.java | 2 +- .../lucares/performance/db/PerformanceDb.java | 7 +- .../lucares/performance/db/TagsToFile.java | 6 +- .../performance/db/TagsToFilesTest.java | 10 +-- 8 files changed, 122 insertions(+), 14 deletions(-) create mode 100644 data-store/src/main/java/org/lucares/pdb/datastore/PdbDB.java rename {performanceDb/src/main/java/org/lucares/performance/db => data-store/src/main/java/org/lucares/pdb/datastore}/Proposal.java (98%) create mode 100644 data-store/src/test/java/org/lucares/pdb/datastore/ProposalsTest.java diff --git a/data-store/src/main/java/org/lucares/pdb/datastore/DataStore.java b/data-store/src/main/java/org/lucares/pdb/datastore/DataStore.java index 3d0c949..9f21f57 100644 --- a/data-store/src/main/java/org/lucares/pdb/datastore/DataStore.java +++ b/data-store/src/main/java/org/lucares/pdb/datastore/DataStore.java @@ -195,5 +195,4 @@ public class DataStore { return result; } - } diff --git a/data-store/src/main/java/org/lucares/pdb/datastore/PdbDB.java b/data-store/src/main/java/org/lucares/pdb/datastore/PdbDB.java new file mode 100644 index 0000000..cded1c6 --- /dev/null +++ b/data-store/src/main/java/org/lucares/pdb/datastore/PdbDB.java @@ -0,0 +1,34 @@ +package org.lucares.pdb.datastore; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; +import java.util.SortedSet; + +import org.lucares.pdb.api.Tags; + +public class PdbDB { + + private final DataStore dataStore; + + public PdbDB(final Path dataDirectory) throws IOException { + dataStore = new DataStore(dataDirectory); + } + + public List search(final String query) { + return dataStore.search(query); + } + + public Path createNewFile(final Tags tags) throws IOException { + return dataStore.createNewFile(tags); + } + + public List getAvailableFields() { + return dataStore.getAvailableFields(); + } + + public SortedSet getAvailableValuesForKey(final String query, final String fieldName) { + return dataStore.getAvailableValuesForKey(query, fieldName); + } + +} diff --git a/performanceDb/src/main/java/org/lucares/performance/db/Proposal.java b/data-store/src/main/java/org/lucares/pdb/datastore/Proposal.java similarity index 98% rename from performanceDb/src/main/java/org/lucares/performance/db/Proposal.java rename to data-store/src/main/java/org/lucares/pdb/datastore/Proposal.java index dfcb98e..b437cce 100644 --- a/performanceDb/src/main/java/org/lucares/performance/db/Proposal.java +++ b/data-store/src/main/java/org/lucares/pdb/datastore/Proposal.java @@ -1,4 +1,4 @@ -package org.lucares.performance.db; +package org.lucares.pdb.datastore; public class Proposal implements Comparable { private final String proposedTag; diff --git a/data-store/src/test/java/org/lucares/pdb/datastore/ProposalsTest.java b/data-store/src/test/java/org/lucares/pdb/datastore/ProposalsTest.java new file mode 100644 index 0000000..bc61319 --- /dev/null +++ b/data-store/src/test/java/org/lucares/pdb/datastore/ProposalsTest.java @@ -0,0 +1,74 @@ +package org.lucares.pdb.datastore; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.lucares.pdb.api.Tags; +import org.lucares.utils.file.FileUtils; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +@Test +public class ProposalsTest { + + private Path dataDirectory; + private DataStore dataStore; + private Map tagsToPath; + + @BeforeMethod + public void beforeMethod() throws IOException { + dataDirectory = Files.createTempDirectory("pdb"); + } + + @AfterMethod + public void afterMethod() throws IOException { + FileUtils.delete(dataDirectory); + dataStore = null; + tagsToPath = null; + } + + @Test(enabled = false) + public void testProposals() throws Exception { + tagsToPath = new LinkedHashMap<>(); + final Tags eagleTim = Tags.create("bird", "eagle", "name", "Tim"); + final Tags pigeonJennifer = Tags.create("bird", "pigeon", "name", "Jennifer"); + final Tags flamingoJennifer = Tags.create("bird", "flamingo", "name", "Jennifer"); + final Tags labradorJenny = Tags.create("dog", "labrador", "name", "Jenny"); + final Tags labradorTim = Tags.create("dog", "labrador", "name", "Tim"); + + tagsToPath.put(eagleTim, null); + tagsToPath.put(pigeonJennifer, null); + tagsToPath.put(flamingoJennifer, null); + tagsToPath.put(labradorJenny, null); + tagsToPath.put(labradorTim, null); + + dataStore = new DataStore(dataDirectory); + + for (final Tags tags : tagsToPath.keySet()) { + final Path newFile = dataStore.createNewFile(tags); + tagsToPath.put(tags, newFile); + } + + assertProposals("", 0, // + new Proposal("name", "name=*", 5), // + new Proposal("bird", "bird=*", 3), // + new Proposal("dog", "dog=*", 2)// + ); + } + + private void assertProposals(final String query, final int caretIndex, final Proposal... expected) + throws InterruptedException { + + // final List actual = dataStore.propose(query, caretIndex); + // final List expectedList = Arrays.asList(expected); + // Collections.sort(expectedList); + // + // System.out.println("actual: " + actual); + // System.out.println("expected: " + expectedList); + // Assert.assertEquals(expectedList, actual); + } +} diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java index e9eb317..f706a21 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java @@ -11,6 +11,7 @@ import java.util.Locale; import java.util.Map; import java.util.SortedSet; +import org.lucares.pdb.datastore.Proposal; import org.lucares.pdb.plot.api.PlotSettings; import org.lucares.pdbui.domain.AutocompleteProposal; import org.lucares.pdbui.domain.AutocompleteProposalByValue; @@ -18,7 +19,6 @@ import org.lucares.pdbui.domain.AutocompleteResponse; import org.lucares.pdbui.domain.PlotRequest; import org.lucares.pdbui.domain.PlotResponse; import org.lucares.performance.db.PerformanceDb; -import org.lucares.performance.db.Proposal; import org.lucares.recommind.logs.DataSeries; import org.lucares.recommind.logs.InternalPlottingException; import org.lucares.recommind.logs.NoDataPointsException; diff --git a/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java b/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java index 02438b2..3bc92d2 100644 --- a/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java +++ b/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java @@ -22,7 +22,8 @@ import org.lucares.pdb.api.Entry; import org.lucares.pdb.api.GroupResult; import org.lucares.pdb.api.Result; import org.lucares.pdb.api.Tags; -import org.lucares.pdb.datastore.DataStore; +import org.lucares.pdb.datastore.PdbDB; +import org.lucares.pdb.datastore.Proposal; import org.lucares.pdb.datastore.lang.SyntaxException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,11 +34,11 @@ public class PerformanceDb implements AutoCloseable { private final TagsToFile tagsToFile; - private final DataStore db; + private final PdbDB db; public PerformanceDb(final Path dataDirectory) throws IOException { - db = new DataStore(dataDirectory); + db = new PdbDB(dataDirectory); tagsToFile = new TagsToFile(db); } diff --git a/performanceDb/src/main/java/org/lucares/performance/db/TagsToFile.java b/performanceDb/src/main/java/org/lucares/performance/db/TagsToFile.java index 3d586c2..81774e0 100644 --- a/performanceDb/src/main/java/org/lucares/performance/db/TagsToFile.java +++ b/performanceDb/src/main/java/org/lucares/performance/db/TagsToFile.java @@ -17,8 +17,8 @@ import java.util.function.Consumer; import java.util.stream.Collectors; import org.lucares.pdb.api.Tags; -import org.lucares.pdb.datastore.DataStore; import org.lucares.pdb.datastore.Doc; +import org.lucares.pdb.datastore.PdbDB; import org.lucares.utils.CollectionUtils; import org.lucares.utils.file.FileUtils; import org.slf4j.Logger; @@ -64,11 +64,11 @@ public class TagsToFile implements AutoCloseable { } } - private final DataStore db; + private final PdbDB db; private final Map cachedWriters = new HashMap<>(); - public TagsToFile(final DataStore db) { + public TagsToFile(final PdbDB db) { this.db = db; } diff --git a/performanceDb/src/test/java/org/lucares/performance/db/TagsToFilesTest.java b/performanceDb/src/test/java/org/lucares/performance/db/TagsToFilesTest.java index bf004c0..10a6673 100644 --- a/performanceDb/src/test/java/org/lucares/performance/db/TagsToFilesTest.java +++ b/performanceDb/src/test/java/org/lucares/performance/db/TagsToFilesTest.java @@ -8,7 +8,7 @@ import java.time.ZoneOffset; import org.lucares.pdb.api.Entry; import org.lucares.pdb.api.Tags; -import org.lucares.pdb.datastore.DataStore; +import org.lucares.pdb.datastore.PdbDB; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; @@ -31,7 +31,7 @@ public class TagsToFilesTest { public void test() throws Exception { - final DataStore db = new DataStore(dataDirectory); + final PdbDB db = new PdbDB(dataDirectory); try (final TagsToFile tagsToFile = new TagsToFile(db)) { final OffsetDateTime date = OffsetDateTime.now(ZoneOffset.UTC); @@ -46,7 +46,7 @@ public class TagsToFilesTest { } public void testAppendingToSameFileIfNewDateIsAfter() throws Exception { - final DataStore db = new DataStore(dataDirectory); + final PdbDB db = new PdbDB(dataDirectory); try (final TagsToFile tagsToFile = new TagsToFile(db);) { final OffsetDateTime day1 = DateUtils.getDate(2016, 1, 1, 1, 1, 1); @@ -66,7 +66,7 @@ public class TagsToFilesTest { @Test(invocationCount = 1) public void testNewFileIfDateIsTooOld() throws Exception { - final DataStore db = new DataStore(dataDirectory); + final PdbDB db = new PdbDB(dataDirectory); try (final TagsToFile tagsToFile = new TagsToFile(db);) { final OffsetDateTime afternoon = DateUtils.getDate(2016, 1, 1, 13, 1, 1); @@ -104,7 +104,7 @@ public class TagsToFilesTest { public void testIdenticalDatesGoIntoSameFile() throws Exception { - final DataStore db = new DataStore(dataDirectory); + final PdbDB db = new PdbDB(dataDirectory); try (final TagsToFile tagsToFile = new TagsToFile(db)) { final OffsetDateTime timestamp = DateUtils.getDate(2016, 1, 1, 13, 1, 1);