/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.security;
import com.badlogic.gdx.files.FileHandle;
import com.google.common.collect.Maps;
import com.happydroids.droidtowers.gamestate.GameSaveFactory;
import com.happydroids.droidtowers.gamestate.server.TowerGameService;
import com.happydroids.error.ErrorUtil;
import com.happydroids.jackson.HappyDroidObjectMapper;
import java.io.IOException;
import java.util.HashMap;
public class SecurePreferences {
private HashMap<String, String> values;
private FileHandle storage;
private HappyDroidObjectMapper mapper;
public SecurePreferences(String fileName) {
try {
mapper = TowerGameService.instance().getObjectMapper();
storage = GameSaveFactory.getStorageRoot().child(fileName);
if (storage.exists()) {
values = mapper.readValue(storage.readBytes(), mapper.getTypeFactory()
.constructMapType(HashMap.class, String.class, String.class));
} else {
values = Maps.newHashMap();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public synchronized boolean contains(String key) {
return values.containsKey(key);
}
public synchronized void putString(String key, String value) {
if (key != null) {
values.put(key, value);
} else {
ErrorUtil.rethrowError(new RuntimeException("putString() requires a non null key!"));
}
}
public synchronized void flush() {
try {
storage.writeBytes(mapper.writeValueAsBytes(values), false);
} catch (IOException e) {
ErrorUtil.rethrowError(e);
}
}
public synchronized String getString(String key, String defautValue) {
if (!values.containsKey(key)) {
return defautValue;
}
return getString(key);
}
public synchronized String getString(String key) {
return values.get(key);
}
public synchronized void remove(String key) {
values.remove(key);
}
public synchronized void putBoolean(String key, boolean value) {
values.put(key, String.valueOf(value));
}
public synchronized boolean getBoolean(String key, boolean defaultValue) {
if (!values.containsKey(key)) {
return defaultValue;
}
return getBoolean(key);
}
public synchronized int getInteger(String key) {
return Integer.parseInt(values.get(key));
}
public synchronized boolean getBoolean(String key) {
return Boolean.parseBoolean(values.get(key));
}
public synchronized void putInteger(String key, int value) {
values.put(key, String.valueOf(value));
}
public synchronized int incrementInt(String key) {
int integer = getInteger(key, 0) + 1;
putInteger(key, integer);
return integer;
}
private synchronized int getInteger(String key, int defaultValue) {
if (!values.containsKey(key)) {
return defaultValue;
}
return Integer.parseInt(values.get(key));
}
public void putFloat(String key, float value) {
values.put(key, String.valueOf(value));
}
public float getFloat(String key, float defaultValue) {
if (!values.containsKey(key)) {
return defaultValue;
}
return Float.parseFloat(values.get(key));
}
}