Author: michiel Date: 2010-02-09 19:05:28 +0100 (Tue, 09 Feb 2010) New Revision: 40950
Added: mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Cookies.java Modified: mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/CloudTag.java mmbase/trunk/core/src/main/java/org/mmbase/bridge/Cloud.java Log: MMB-1931 Modified: mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/CloudTag.java =================================================================== --- mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/CloudTag.java 2010-02-09 18:04:00 UTC (rev 40949) +++ mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/CloudTag.java 2010-02-09 18:05:28 UTC (rev 40950) @@ -518,6 +518,7 @@ if (cloud.getCloudContext() instanceof LocalContext) { cloud.setProperty(Cloud.PROP_REQUEST, request); + cloud.setProperty(Cloud.PROP_RESPONSE, response); } cloud.setProperty(LocaleTag.TZ_KEY, getTimeZone()); Modified: mmbase/trunk/core/src/main/java/org/mmbase/bridge/Cloud.java =================================================================== --- mmbase/trunk/core/src/main/java/org/mmbase/bridge/Cloud.java 2010-02-09 18:04:00 UTC (rev 40949) +++ mmbase/trunk/core/src/main/java/org/mmbase/bridge/Cloud.java 2010-02-09 18:05:28 UTC (rev 40950) @@ -48,13 +48,20 @@ /** - * With the Cloud a ServletRequest can be associated and stored in the 'property. + * With the Cloud a ServletRequest can be associated and stored in a property with this name * * @since MMBase-1.9 */ public static final String PROP_REQUEST = "request"; + /** + * With the Cloud a ServletResponse can be associated and stored in a property with this name. + * + * @since MMBase-1.9.3 + */ + public static final String PROP_RESPONSE = "response"; + /** * If you set this property on the cloud to true, validation errors will not be fatal, and nodes * can be saved anyways. Copied: mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Cookies.java (from rev 40949, mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/processors/Cookies.java) =================================================================== --- mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Cookies.java (rev 0) +++ mmbase/trunk/core/src/main/java/org/mmbase/datatypes/processors/Cookies.java 2010-02-09 18:05:28 UTC (rev 40950) @@ -0,0 +1,100 @@ +/* + +This software is OSI Certified Open Source Software. +OSI Certified is a certification mark of the Open Source Initiative. + +The license (Mozilla version 1.0) can be read at the MMBase site. +See http://www.MMBase.org/license + +*/ +package org.mmbase.datatypes.processors; + +import org.mmbase.bridge.*; +import org.mmbase.bridge.util.*; +import org.mmbase.util.Casting; +import org.mmbase.util.logging.*; +import javax.servlet.http.*; + + +/** + * This processor can be used on a field to return a certain function value of the node, if the + * field is empty. Noticeably, this can be used on 'virtual' field, to map their value to a function + * value, which can come in handy sometimes. + * + * @author Michiel Meeuwissen + * @version $Id: FunctionValueIfEmptyGetter.java 34900 2009-05-01 16:29:42Z michiel $ + * @since MMBase-1.9.3 + */ + +public class Cookies { + + private static final Logger LOG = Logging.getLoggerInstance(Cookies.class); + + + protected static abstract class CookieBase { + private static final long serialVersionUID = 1L; + + protected String cookie; + public void setCookie(String s) { + cookie = s; + } + } + + public static class Getter extends CookieBase implements Processor { + private static final long serialVersionUID = 1L; + + public Object process(Node node, Field field, Object value) { + LOG.info("Getting defaul gvalue for " + field); + Cloud cloud = CloudThreadLocal.currentCloud(); + if (cloud == null) { + LOG.info("No cloud using " + value); + return value; + } else { + HttpServletRequest req = (HttpServletRequest) cloud.getProperty(Cloud.PROP_REQUEST); + if (req == null) { + LOG.info("No request using " + value); + return value; + } + Cookie[] cookies = req.getCookies(); + if (cookies != null) { + for (Cookie c : cookies) { + LOG.info("Considering " + c.getName()); + if (c.getName().equals(cookie)) { + LOG.info("Found! " + c.getValue()); + return c.getValue(); + } + } + } + LOG.info("Cookie not found using " + value); + return value; + } + } + } + + public static class Setter extends CookieBase implements Processor { + private static final long serialVersionUID = 1L; + public Object process(Node node, Field field, Object value) { + Cloud cloud = CloudThreadLocal.currentCloud(); + if (cloud == null) { + return value; + } else { + HttpServletResponse res = (HttpServletResponse) cloud.getProperty(Cloud.PROP_RESPONSE); + if (res == null) { + return value; + } + Cookie c = new Cookie(cookie, Casting.toString(value)); + c.setMaxAge(60 * 60 * 24 * 365); + if (res.isCommitted()) { + LOG.warn("Cannot set cookie " + c); + } else { + LOG.service("Setting cookie " + c); + res.addCookie(c); + } + return value; + } + } + } + +} + + _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs