Removed default storageKey get() methods (they were confusing)

This commit is contained in:
nathan 2017-08-04 16:04:30 +02:00
parent 973d6d99c2
commit ec84231b1b
4 changed files with 26 additions and 126 deletions

View File

@ -37,7 +37,6 @@ import dorkbox.util.SerializationManager;
@SuppressWarnings({"Convert2Diamond", "Convert2Lambda"}) @SuppressWarnings({"Convert2Diamond", "Convert2Lambda"})
class DiskStorage implements Storage { class DiskStorage implements Storage {
private final DelayTimer timer; private final DelayTimer timer;
private final StorageKey defaultKey;
private final StorageBase storage; private final StorageBase storage;
private final AtomicInteger references = new AtomicInteger(1); private final AtomicInteger references = new AtomicInteger(1);
@ -52,7 +51,6 @@ class DiskStorage implements Storage {
*/ */
DiskStorage(File storageFile, SerializationManager serializationManager, final boolean readOnly, final Logger logger) throws IOException { DiskStorage(File storageFile, SerializationManager serializationManager, final boolean readOnly, final Logger logger) throws IOException {
this.storage = new StorageBase(storageFile, serializationManager, logger); this.storage = new StorageBase(storageFile, serializationManager, logger);
this.defaultKey = new StorageKey("");
if (readOnly) { if (readOnly) {
this.timer = null; this.timer = null;
@ -120,15 +118,6 @@ class DiskStorage implements Storage {
return this.actionMap.containsKey(wrap) || this.storage.contains(wrap); return this.actionMap.containsKey(wrap) || this.storage.contains(wrap);
} }
/**
* Reads a object using the default (blank) key, and casts it to the expected class
*/
@Override
public final
<T> T get() {
return get0(this.defaultKey);
}
/** /**
* Reads a object using the specific key, and casts it to the expected class * Reads a object using the specific key, and casts it to the expected class
*/ */
@ -156,19 +145,6 @@ class DiskStorage implements Storage {
return get0(key); return get0(key);
} }
/**
* Uses the DEFAULT key ("") to return saved data. Also saves the data.
* <p/>
* This will check to see if there is an associated key for that data, if not - it will use data as the default
*
* @param data The data that will hold the copy of the data from disk
*/
@Override
public
<T> T getAndPut(T data) {
return getAndPut(this.defaultKey, data);
}
/** /**
* Returns the saved data for the specified key. Also saves the data. * Returns the saved data for the specified key. Also saves the data.
* *
@ -176,10 +152,10 @@ class DiskStorage implements Storage {
*/ */
@Override @Override
public public
<T> T getAndPut(String key, T data) { <T> T get(String key, T data) {
StorageKey wrap = new StorageKey(key); StorageKey wrap = new StorageKey(key);
return getAndPut(wrap, data); return get(wrap, data);
} }
/** /**
@ -189,8 +165,8 @@ class DiskStorage implements Storage {
*/ */
@Override @Override
public public
<T> T getAndPut(byte[] key, T data) { <T> T get(byte[] key, T data) {
return getAndPut(new StorageKey(key), data); return get(new StorageKey(key), data);
} }
/** /**
@ -203,7 +179,7 @@ class DiskStorage implements Storage {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public public
<T> T getAndPut(StorageKey key, T data) { <T> T get(StorageKey key, T data) {
Object source = get0(key); Object source = get0(key);
if (source == null) { if (source == null) {
@ -305,27 +281,6 @@ class DiskStorage implements Storage {
} }
} }
/**
* Adds the given object to the storage using a default (blank) key, OR -- if it has been registered, using it's registered key
* <p/>
* Also will update existing data. If the new contents do not fit in the original space, then the update is handled by
* deleting the old data and adding the new.
*/
@Override
public final
void put(Object object) {
if (!this.isOpen.get()) {
throw new RuntimeException("Unable to act on closed storage");
}
if (timer != null) {
action(this.defaultKey, object);
// timer action runs on TIMER thread, not this thread
this.timer.delay(this.milliSeconds);
}
}
/** /**
* Deletes an object from storage. * Deletes an object from storage.
* *

View File

@ -23,13 +23,11 @@ import java.util.concurrent.ConcurrentHashMap;
*/ */
class MemoryStorage implements Storage { class MemoryStorage implements Storage {
private final ConcurrentHashMap<StorageKey, Object> storage; private final ConcurrentHashMap<StorageKey, Object> storage;
private final StorageKey defaultKey;
private int version; private int version;
MemoryStorage() { MemoryStorage() {
this.storage = new ConcurrentHashMap<StorageKey, Object>(); this.storage = new ConcurrentHashMap<StorageKey, Object>();
this.defaultKey = new StorageKey("");
} }
@ -51,16 +49,6 @@ class MemoryStorage implements Storage {
return storage.containsKey(new StorageKey(key)); return storage.containsKey(new StorageKey(key));
} }
/**
* Reads a object using the default (blank) key, and casts it to the expected class
*/
@SuppressWarnings("unchecked")
@Override
public
<T> T get() {
return (T) storage.get(defaultKey);
}
/** /**
* Reads a object using the specific key, and casts it to the expected class * Reads a object using the specific key, and casts it to the expected class
*/ */
@ -89,19 +77,6 @@ class MemoryStorage implements Storage {
return (T) storage.get(key); return (T) storage.get(key);
} }
/**
* Uses the DEFAULT key ("") to return saved data.
* <p/>
* This will check to see if there is an associated key for that data, if not - it will use data as the default
*
* @param data The data that will hold the copy of the data from disk
*/
@Override
public
<T> T getAndPut(T data) {
return getAndPut(this.defaultKey, data);
}
/** /**
* Returns the saved data for the specified key. * Returns the saved data for the specified key.
* *
@ -109,10 +84,10 @@ class MemoryStorage implements Storage {
*/ */
@Override @Override
public public
<T> T getAndPut(String key, T data) { <T> T get(String key, T data) {
StorageKey wrap = new StorageKey(key); StorageKey wrap = new StorageKey(key);
return getAndPut(wrap, data); return get(wrap, data);
} }
/** /**
@ -122,14 +97,14 @@ class MemoryStorage implements Storage {
*/ */
@Override @Override
public public
<T> T getAndPut(byte[] key, T data) { <T> T get(byte[] key, T data) {
return getAndPut(new StorageKey(key), data); return get(new StorageKey(key), data);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public public
<T> T getAndPut(final StorageKey key, final T data) { <T> T get(final StorageKey key, final T data) {
final Object o = storage.get(key); final Object o = storage.get(key);
if (o == null) { if (o == null) {
storage.put(key, data); storage.put(key, data);
@ -174,18 +149,6 @@ class MemoryStorage implements Storage {
storage.put(key, object); storage.put(key, object);
} }
/**
* Saves the given data to storage with the associated key.
* <p/>
* Also will update existing data. If the new contents do not fit in the original space, then the update is handled by
* deleting the old data and adding the new.
*/
@Override
public
void put(final Object data) {
put(defaultKey, data);
}
/** /**
* Deletes an object from storage. * Deletes an object from storage.
* *

View File

@ -33,11 +33,6 @@ interface Storage {
*/ */
boolean contains(String key); boolean contains(String key);
/**
* Reads a object using the DEFAULT key ("") key, and casts it to the expected class
*/
<T> T get();
/** /**
* Reads a object using the specific key, and casts it to the expected class. * Reads a object using the specific key, and casts it to the expected class.
*/ */
@ -54,13 +49,12 @@ interface Storage {
<T> T get(StorageKey key); <T> T get(StorageKey key);
/** /**
* Uses the DEFAULT key ("") to return saved data. * Returns the saved data for the specified key.
* <p/>
* This will check to see if there is an associated key for that data, if not - it will use data as the default
* *
* @param key The key used to check if data already exists.
* @param data This is the default value, and if there is no value with the key in the DB this default value will be saved. * @param data This is the default value, and if there is no value with the key in the DB this default value will be saved.
*/ */
<T> T getAndPut(T data); <T> T get(String key, T data);
/** /**
* Returns the saved data for the specified key. * Returns the saved data for the specified key.
@ -68,7 +62,7 @@ interface Storage {
* @param key The key used to check if data already exists. * @param key The key used to check if data already exists.
* @param data This is the default value, and if there is no value with the key in the DB this default value will be saved. * @param data This is the default value, and if there is no value with the key in the DB this default value will be saved.
*/ */
<T> T getAndPut(String key, T data); <T> T get(byte[] key, T data);
/** /**
* Returns the saved data for the specified key. * Returns the saved data for the specified key.
@ -76,15 +70,7 @@ interface Storage {
* @param key The key used to check if data already exists. * @param key The key used to check if data already exists.
* @param data This is the default value, and if there is no value with the key in the DB this default value will be saved. * @param data This is the default value, and if there is no value with the key in the DB this default value will be saved.
*/ */
<T> T getAndPut(byte[] key, T data); <T> T get(StorageKey key, T data);
/**
* Returns the saved data for the specified key.
*
* @param key The key used to check if data already exists.
* @param data This is the default value, and if there is no value with the key in the DB this default value will be saved.
*/
<T> T getAndPut(StorageKey key, T data);
/** /**
* Saves the given data to storage with the associated key. * Saves the given data to storage with the associated key.
@ -110,14 +96,6 @@ interface Storage {
*/ */
void put(StorageKey key, Object data); void put(StorageKey key, Object data);
/**
* Adds the given object to the storage using a default (blank) key, OR -- if it has been registered, using it's registered key
* <p/>
* Also will update existing data. If the new contents do not fit in the original space, then the update is handled by
* deleting the old data and adding the new.
*/
void put(Object data);
/** /**
* Deletes an object from storage. * Deletes an object from storage.
* *

View File

@ -27,6 +27,7 @@ import org.junit.Test;
import org.junit.runners.MethodSorters; import org.junit.runners.MethodSorters;
import dorkbox.util.storage.Storage; import dorkbox.util.storage.Storage;
import dorkbox.util.storage.StorageKey;
import dorkbox.util.storage.StorageSystem; import dorkbox.util.storage.StorageSystem;
@FixMethodOrder(MethodSorters.NAME_ASCENDING) @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@ -63,7 +64,8 @@ class StorageTest {
@Test @Test
public public
void testCreateDB() throws IOException { void testCreateDB() throws IOException {
TEST_DB.delete(); StorageSystem.shutdown();
StorageSystem.delete(TEST_DB);
Storage storage = StorageSystem.Disk() Storage storage = StorageSystem.Disk()
.file(TEST_DB) .file(TEST_DB)
.build(); .build();
@ -134,13 +136,15 @@ class StorageTest {
.file(TEST_DB) .file(TEST_DB)
.build(); .build();
StorageKey storageKey = new StorageKey("foobar!");
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
log("adding record " + i + "..."); log("adding record " + i + "...");
String addRecord = createData(i); String addRecord = createData(i);
storage.put(addRecord); storage.put(storageKey, addRecord);
log("reading record " + i + "..."); log("reading record " + i + "...");
String readData = storage.get(); String readData = storage.get(storageKey);
Assert.assertEquals("Object is not the same", addRecord, readData); Assert.assertEquals("Object is not the same", addRecord, readData);
} }
@ -152,7 +156,7 @@ class StorageTest {
String dataCheck = createData(total - 1); String dataCheck = createData(total - 1);
log("reading record " + (total - 1) + "..."); log("reading record " + (total - 1) + "...");
String readData = storage.get(); String readData = storage.get(storageKey);
// the ONLY entry in storage should be the last one that we added // the ONLY entry in storage should be the last one that we added
Assert.assertEquals("Object is not the same", dataCheck, readData); Assert.assertEquals("Object is not the same", dataCheck, readData);
@ -288,7 +292,7 @@ class StorageTest {
storage.put(createKey, data); storage.put(createKey, data);
Data data2; Data data2;
data2 = storage.getAndPut(createKey, new Data()); data2 = storage.get(createKey, new Data());
Assert.assertEquals("Object is not the same", data, data2); Assert.assertEquals("Object is not the same", data, data2);
StorageSystem.close(storage); StorageSystem.close(storage);
@ -296,7 +300,7 @@ class StorageTest {
.file(TEST_DB) .file(TEST_DB)
.build(); .build();
data2 = storage.getAndPut(createKey, new Data()); data2 = storage.get(createKey, new Data());
Assert.assertEquals("Object is not the same", data, data2); Assert.assertEquals("Object is not the same", data, data2);
StorageSystem.close(storage); StorageSystem.close(storage);
@ -465,7 +469,7 @@ class StorageTest {
String createKey = createKey(i); String createKey = createKey(i);
Data data2; Data data2;
data2 = storage.getAndPut(createKey, new Data()); data2 = storage.get(createKey, new Data());
Assert.assertEquals("Object is not the same", data, data2); Assert.assertEquals("Object is not the same", data, data2);
} }
StorageSystem.close(storage); StorageSystem.close(storage);