package org.dodgybits.shuffle.web.server.persistence;
import java.util.ArrayList;
import java.util.List;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import org.dodgybits.shuffle.web.client.model.KeyValue;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
public class JdoUtils {
private static PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory("transactions-optional");
private static ThreadLocal<PersistenceManager> threadLocalPm =
new ThreadLocal<PersistenceManager>();
public static PersistenceManager getPm() {
PersistenceManager pm = threadLocalPm.get();
if (pm == null) {
pm = pmf.getPersistenceManager();
threadLocalPm.set(pm);
}
return pm;
}
public static void closePm() {
PersistenceManager pm = threadLocalPm.get();
if (pm == null) {
return;
}
if (!pm.isClosed()) {
pm.close();
}
threadLocalPm.set(null);
}
public static <V> KeyValue<V> toKeyValue(Key key) {
KeyValue<V> keyValue = null;
if (key != null) {
keyValue = new KeyValue<V>(KeyFactory.keyToString(key));
}
return keyValue;
}
public static <V> ArrayList<KeyValue<V>> toKeyValues(List<Key> keys) {
ArrayList<KeyValue<V>> keyValues = new ArrayList<KeyValue<V>>();
for (Key key : keys) {
KeyValue<V> keyValue = toKeyValue(key);
keyValues.add(keyValue);
}
return keyValues;
}
public static Key toKey(KeyValue<?> keyValue) {
Key key = null;
if (keyValue != null) {
key = KeyFactory.stringToKey(keyValue.getValue());
}
return key;
}
public static <T> List<Key> toKeys(ArrayList<KeyValue<T>> keyValues) {
List<Key> keys = new ArrayList<Key>();
if (keyValues != null) {
for (KeyValue<?> keyValue : keyValues) {
keys.add(toKey(keyValue));
}
}
return keys;
}
}