/*
* Copyright (c) 2011 PonySDK
* Owners:
* Luciano Broussal <luciano.broussal AT gmail.com>
* Mathieu Barbier <mathieu.barbier AT gmail.com>
* Nicolas Ciaravola <nicolas.ciaravola.pro AT gmail.com>
*
* WebSite:
* http://code.google.com/p/pony-sdk/
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.ponysdk.core.ui.basic;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.json.JsonArray;
import javax.json.JsonObject;
import com.ponysdk.core.model.ClientToServerModel;
import com.ponysdk.core.model.ServerToClientModel;
import com.ponysdk.core.server.stm.Txn;
import com.ponysdk.core.writer.ModelWriter;
public class PCookies {
private static final int ID = 0; // reserved
private final Map<String, String> cachedCookies = new HashMap<>();
private boolean isInitialized = false;
public interface CookiesListener {
void onInitialized();
}
private CookiesListener listener;
public PCookies() {
}
public String getCookie(final String name) {
return cachedCookies.get(name);
}
public String removeCookie(final String name) {
return removeCookie(name, null);
}
public String removeCookie(final String name, final String path) {
final ModelWriter writer = Txn.getWriter();
writer.beginObject();
writer.write(ServerToClientModel.TYPE_UPDATE, ID);
writer.write(ServerToClientModel.REMOVE_COOKIE, name);
if (path != null) writer.write(ServerToClientModel.COOKIE_PATH, path);
writer.endObject();
return cachedCookies.remove(name);
}
public void setCookie(final String name, final String value) {
setCookie(name, value, null, null);
}
public void setCookie(final String name, final String value, final String path) {
setCookie(name, value, null, path);
}
public void setCookie(final String name, final String value, final Date expires) {
setCookie(name, value, expires, null);
}
public void setCookie(final String name, final String value, final Date expires, final String path) {
setCookie(name, value, expires, path, null, false);
}
public void setCookie(final String name, final String value, final Date expires, final String domain, final String path,
final boolean secure) {
cachedCookies.put(name, value);
final ModelWriter writer = Txn.getWriter();
writer.beginObject();
writer.write(ServerToClientModel.TYPE_UPDATE, ID);
writer.write(ServerToClientModel.ADD_COOKIE, name);
writer.write(ServerToClientModel.VALUE, value);
if (expires != null) writer.write(ServerToClientModel.COOKIE_EXPIRE, expires.getTime());
if (domain != null) writer.write(ServerToClientModel.COOKIE_DOMAIN, domain);
if (path != null) writer.write(ServerToClientModel.COOKIE_PATH, path);
if (secure) writer.write(ServerToClientModel.COOKIE_SECURE, secure);
writer.endObject();
}
public void onClientData(final JsonObject event) {
final JsonArray cookies = event.getJsonArray(ClientToServerModel.COOKIES.toStringValue());
for (int i = 0; i < cookies.size(); i++) {
final JsonObject object = cookies.getJsonObject(i);
final String key = object.getString(ClientToServerModel.COOKIE_NAME.toStringValue());
final String value = object.getString(ClientToServerModel.COOKIE_VALUE.toStringValue());
cachedCookies.put(key, value);
}
if (!isInitialized) {
isInitialized = true;
if (listener != null) listener.onInitialized();
}
}
public boolean isInitialized() {
return isInitialized;
}
public void setListener(final CookiesListener listener) {
this.listener = listener;
}
public Collection<String> getNames() {
return cachedCookies.keySet();
}
}