Salesforce provides a very useful System.Cookie class, but I found myself wanting something a bit simpler. Below is a class you can use to easily create and manage your cookies.
SF_Cookie
/**
* A wrapper class for System.Cookie. Provides helper methods for creating,
* removing, getting the value, and checking the existence of a cookie.
* <p>
* Usage:
* <p>store your cookie definition as a static class variable:
* <code>private static SF_Cookie myCookie = new SF_Cookie('my cookie', null, 600, false);</code>
* <p>create a cookie if it doesn't exist:
* <code>if (!myCookie.exists()) myCookie.create('my value');</code>
* <p>remove a cookie
* <code>myCookie.remove();</code>
*/
public class SF_Cookie {
//-------------------------------------------------------------------------
// Constants
public final static String DEFAULT_PATH = '/';
public final static Integer DEFAULT_MAX_AGE = -1;
public final static Boolean DEFAULT_IS_SECURE = false;
//-------------------------------------------------------------------------
// Properties
@testVisible private System.Cookie theCookie;
@testVisible private String name;
@testVisible private String path;
@testVisible private Integer maxAge;
@testVisible private Boolean isSecure;
//-------------------------------------------------------------------------
// Methods
/**
* constructs a cookie object, but doesn't 'set' it
* @param name may not be null
* @param path
* @param maxAge defaults to -1 (session); may not be 0 (indicates delete)
* @param isSecure defaults to false
* @see System.Cookie
*/
public SF_Cookie(String name, String path, Integer maxAge, Boolean isSecure) {
SF.preCondition((null != name) && ('' != name.trim()), 'SF_Cookie: name is required');
SF.preCondition(0 != maxAge, 'SF_Cookie: maxAge of 0 indicates delete. Use the remove method instead.');
this.name = name;
this.path = path;
this.maxAge = maxAge;
this.isSecure = isSecure;
}
/** removes any existing cookie, then creates a new one */
public void create(String value) {
SF.preCondition((null != value) && ('' != value.trim()), 'Cookie.create: value is required');
this.remove();
theCookie = new System.Cookie(name, value, path, maxAge, isSecure);
ApexPages.currentPage().setCookies(new System.Cookie[] { theCookie });
}
/** returns true if the cookie exists and is accessible to the current page */
public Boolean exists() {
theCookie = ApexPages.currentPage().getCookies().get(name);
return (null != theCookie);
}
/** returns the value of the cookie */
public String getValue() {
SF.preCondition(this.exists(), 'Cookie.getValue: cookie must exist');
return ApexPages.currentPage().getCookies().get(name).getValue();
}
/** removes the cookie */
public void remove() {
ApexPages.currentPage().setCookies(new System.Cookie[] { new System.Cookie(name, null, null, 0, false) });
ApexPages.currentPage().getCookies().put(name, null);
theCookie = null;
}
}
No comments:
Post a Comment