package org.ourproject.massmob.client; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.Cookies; import com.google.inject.Inject; public class CookiesUserSelfPreferences implements UserSelfPreferences { private static final String COOKIE_NAME = "massmobuserpref"; private final WaveUtils waveUtils; @Inject public CookiesUserSelfPreferences(final WaveUtils waveUtils) { this.waveUtils = waveUtils; } @Override public String get(final String key, final String defValue) { final JSONValue jsonValue = getCookieJson(); JSONObject obj = jsonValue.isObject(); if (obj != null) { final JSONValue wavePrefObj = obj.get(getWaveId()); if (wavePrefObj != null) { obj = wavePrefObj.isObject(); if (obj != null) { final JSONValue keyObject = obj.get(key); if (keyObject != null) { final String name = keyObject.isString().stringValue(); if (name != null) { return name; } } } } } return defValue; } @Override public void set(final String key, final String value) { final JSONValue jsonValue = getCookieJson(); JSONObject obj = jsonValue.isObject(); if (obj == null) { obj = initCookie(); } JSONValue wavePrefObj = obj.get(getWaveId()); if (wavePrefObj == null) { obj = initCookie(); wavePrefObj = obj.get(getWaveId()); } JSONObject wavePrefs = wavePrefObj.isObject(); if (wavePrefs == null) { obj = initCookie(); wavePrefs = wavePrefObj.isObject(); } wavePrefs.put(key, new JSONString(value)); setCookie(obj); } private JSONValue getCookieJson() { final String cookieValue = Cookies.getCookie(COOKIE_NAME); // Log.info(cookieValue); JSONValue jsonValue; if (cookieValue == null) { jsonValue = initCookie(); } else { jsonValue = JSONParser.parse(cookieValue); } return jsonValue; } private String getWaveId() { return waveUtils.getWaveId(); } private JSONObject initCookie() { final JSONObject parent = new JSONObject(); parent.put(getWaveId(), new JSONObject()); setCookie(parent); return parent; } private void setCookie(final JSONObject parent) { Cookies.setCookie(COOKIE_NAME, parent.toString()); } }