package com.baselet.gwt.client.element;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.baselet.element.interfaces.GridElement;
import com.google.gwt.storage.client.Storage;
/**
* uses local storage of browser
* local storage calculator: http://glynrob.com/webapp/lscalc/
*/
public class BrowserStorage {
private static final String CLIPBOARD = "Clipboard";
private static final String SAVE_PREFIX = "s_";
private static Storage localStorage;
public static boolean initLocalStorageAndCheckIfAvailable() {
try {
localStorage = Storage.getLocalStorageIfSupported();
return localStorage != null;
} catch (Exception e) {
return false; // Firefox with the Cookie setting "ask everytime" will throw an exception here!
}
}
public static void addSavedDiagram(String name, String diagramXml) {
set(SAVE_PREFIX + name, diagramXml);
}
public static void removeSavedDiagram(String chosenName) {
remove(SAVE_PREFIX + chosenName);
}
public static String getSavedDiagram(String name) {
return get(SAVE_PREFIX + name);
}
public static Collection<String> getSavedDiagramKeys() {
return getWithPrefix(SAVE_PREFIX, true).keySet();
}
public static void setClipboard(List<GridElement> gridelements) {
set(CLIPBOARD, DiagramXmlParser.gridElementsToXml(gridelements));
}
public static List<GridElement> getClipboard() {
return DiagramXmlParser.xmlToGridElements(get(CLIPBOARD));
}
private static String get(String id) {
return localStorage.getItem(id);
}
private static void remove(String id) {
localStorage.removeItem(id);
}
private static Map<String, String> getWithPrefix(String prefix, boolean removePrefixFromKey) {
Map<String, String> returnList = new HashMap<String, String>();
for (int i = 0; i < localStorage.getLength(); i++) {
String key = localStorage.key(i);
if (key.startsWith(prefix)) {
if (removePrefixFromKey) {
key = key.substring(prefix.length());
}
returnList.put(key, localStorage.getItem(key));
}
}
return returnList;
}
private static void set(String id, String value) {
localStorage.setItem(id, value);
}
}