summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow/provider/MapCollectionProvider.java
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2015-05-12 07:26:22 -0700
committerJesse Morgan <jesse@jesterpm.net>2015-05-12 07:26:22 -0700
commitb5ad47d5b77bfc023b9d3d466f9fd9ed2c29a452 (patch)
treef7409dd2e286bc5aac64b52d69cc1a11fb608e2a /src/com/p4square/grow/provider/MapCollectionProvider.java
parentd4e0c770e3a79e5f36ce974f3ed4dd4834639f4f (diff)
Adding tests for TrainingRecordResource.
Diffstat (limited to 'src/com/p4square/grow/provider/MapCollectionProvider.java')
-rw-r--r--src/com/p4square/grow/provider/MapCollectionProvider.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/com/p4square/grow/provider/MapCollectionProvider.java b/src/com/p4square/grow/provider/MapCollectionProvider.java
new file mode 100644
index 0000000..4c5cef6
--- /dev/null
+++ b/src/com/p4square/grow/provider/MapCollectionProvider.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2015 Jesse Morgan
+ */
+
+package com.p4square.grow.provider;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * In-memory CollectionProvider implementation, useful for tests.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class MapCollectionProvider<C, K, V> implements CollectionProvider<C, K, V> {
+ private final Map<C, Map<K, V>> mMap;
+
+ public MapCollectionProvider() {
+ mMap = new HashMap<>();
+ }
+
+ @Override
+ public synchronized V get(C collection, K key) throws IOException {
+ Map<K, V> map = mMap.get(collection);
+ if (map != null) {
+ return map.get(key);
+ }
+
+ return null;
+ }
+
+ @Override
+ public synchronized Map<K, V> query(C collection) throws IOException {
+ Map<K, V> map = mMap.get(collection);
+ if (map == null) {
+ map = new HashMap<K, V>();
+ }
+
+ return map;
+ }
+
+ @Override
+ public synchronized Map<K, V> query(C collection, int limit) throws IOException {
+ Map<K, V> map = query(collection);
+
+ if (map.size() > limit) {
+ Map<K, V> smallMap = new HashMap<>();
+
+ Iterator<Map.Entry<K, V>> iterator = map.entrySet().iterator();
+ for (int i = 0; i < limit; i++) {
+ Map.Entry<K, V> entry = iterator.next();
+ smallMap.put(entry.getKey(), entry.getValue());
+ }
+
+ return smallMap;
+
+ } else {
+ return map;
+ }
+ }
+
+ @Override
+ public synchronized void put(C collection, K key, V obj) throws IOException {
+ Map<K, V> map = mMap.get(collection);
+ if (map == null) {
+ map = new HashMap<K, V>();
+ mMap.put(collection, map);
+ }
+
+ map.put(key, obj);
+ }
+}