I am developing a new action named CookiePropagator that lets the user
create Cookies in the response using an external descriptor file like
this:
<cookies-descriptor>
<cookie name=".." value=".." maxage=".." (and other cookie fields)/>
<cookie name=".." value=".." maxage=".." (and other cookie fields)/>
</cookies-descriptor>
The problem is that it should be useful to implement here the sitemap
parameters substitution to let the user insert values like "{myparam}"
instead of the constant directly. I wrote the first action that sets
cookies correctly but I want to implement that feature as soon as
possible because it gives me more flexibility. How can the "substitute"
method can be called from inside an action to replace an {name} entry
with its value?
Thanx everyone. I attach my code!
ByeBye,
Paolo Scaffardi
AIRVENT SAM S.p.A.
package org.apache.cocoon.acting;
import java.util.HashMap;
import java.util.Map;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.Constants;
import org.apache.cocoon.acting.*;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Cookie;
import org.apache.cocoon.environment.Response;
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.log.Logger;
/**
* Title: Giotto
* Description:
* Copyright: Copyright (c) 2001
* Company: Airvent SAM S.p.A.
* @author Paolo Scaffardi
* @version 1.0
*/
public class CookiePropagatorAction extends AbstractComplementaryConfigurableAction
{
public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws java.lang.Exception {
getLogger().debug("COOKIEPROPAGATOR: start");
HashMap actionMap = new HashMap ();
Response res = (Response) objectModel.get(Constants.RESPONSE_OBJECT);
/* check response validity */
if (res == null) {
getLogger ().debug ("COOKIEPROPAGATOR: no response object");
return null;
}
// read global parameter settings
boolean reloadable = Constants.DESCRIPTOR_RELOADABLE_DEFAULT;
if (this.settings.containsKey("reloadable"))
reloadable = Boolean.getBoolean((String) this.settings.get("reloadable"));
Configuration conf = this.getConfiguration (
parameters.getParameter ("descriptor", (String) this.settings.get("descriptor")),
parameters.getParameterAsBoolean("reloadable",reloadable));
Configuration[] select = conf.getChildren ("cookie");
int i = 0 ;
try {
for (; i < select.length; i ++) {
String cookieName = null,
cookieValue = null,
cookieComment = null,
cookieDomain = null,
cookiePath = null,
cookieMaxAge = null,
cookieVersion = null,
cookieSecure = null;
try {
cookieName = select[i].getAttribute("name");
cookieValue = select[i].getAttribute("value");
}
catch (Exception e) {
continue;
}
if ((cookieName == null) || cookieName.trim().equals("")){
getLogger ().debug ("COOKIEPROPAGATOR: name attribute not defined") ;
return null;
}
if ((cookieValue == null) || cookieValue.trim().equals("")) {
getLogger ().debug ("COOKIEPROPAGATOR: value attribute not defined") ;
return null;
}
try {
cookieValue = parameters.getParameter(cookieValue, null);
}
catch (Exception e) {
}
Cookie cookie = res.createCookie(cookieName, cookieValue) ;
try {
cookieComment = select[i].getAttribute("comment");
}
catch (Exception e) {
}
try {
cookieDomain = select[i].getAttribute("domain");
}
catch (Exception e) {
}
try {
cookiePath = select[i].getAttribute("path");
}
catch (Exception e) {
}
try {
cookieMaxAge = select[i].getAttribute("maxage");
}
catch (Exception e) {
}
try {
cookieVersion = select[i].getAttribute("version");
}
catch (Exception e) {
}
try {
cookieSecure = select[i].getAttribute("secure");
}
catch (Exception e) {
}
if (cookieMaxAge == null)
cookieMaxAge = "0";
if (cookieVersion == null)
cookieVersion = "0";
if (cookieComment != null)
cookie.setComment(cookieComment);
if (cookieDomain != null)
cookie.setDomain(cookieDomain);
if (cookiePath != null)
cookie.setPath (cookiePath);
if (cookieSecure != null)
cookie.setSecure(Boolean.valueOf(cookieSecure).booleanValue());
cookie.setMaxAge(Integer.parseInt(cookieMaxAge));
cookie.setVersion(Integer.parseInt(cookieVersion));
res.addCookie(cookie) ;
getLogger().debug("COOKIEPROPAGATOR: set cookie " + cookieName + "=" + cookieValue + " (version " + cookieVersion +", will expire in " + cookieMaxAge +" seconds)");
}
} catch (Exception e) {
getLogger ().debug ("COOKIEPROPAGATOR: got exception: " + e);
return null;
}
getLogger().debug("COOKIEPROPAGATOR: Done "+ i + " cookies");
return actionMap ;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]