shuber 2005/02/16 15:27:29 CET
Modified files:
core/src/java/org/jahia/services/webdav/listeners
CMSSlideContentListener.java
Log:
Implemented possibility to set extra field values, that can even use JEXL
expression to access all the data on the ParamBean, such as the user's name, a
user's property, the siteID, the pageID, etc...
Note : this is a reduced paramBean object that doesn't contain everything.
Notably the request and response objects are not available, so this also means
that the compose*Url methods won't work.
Revision Changes Path
1.12 +68 -6
jahia/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java.diff?r1=1.11&r2=1.12&f=h
Index: CMSSlideContentListener.java
===================================================================
RCS file:
/home/cvs/repository/jahia/core/src/java/org/jahia/services/webdav/listeners/CMSSlideContentListener.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- CMSSlideContentListener.java 15 Feb 2005 14:31:08 -0000 1.11
+++ CMSSlideContentListener.java 16 Feb 2005 14:27:29 -0000 1.12
@@ -40,6 +40,10 @@
import org.jahia.services.usermanager.JahiaUser;
import org.jahia.services.version.EntryLoadRequest;
import org.jahia.urls.URI;
+import org.apache.commons.jexl.Expression;
+import org.apache.commons.jexl.ExpressionFactory;
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.JexlHelper;
/**
* A WebDAV listener that creates pages and containers for folder and files
@@ -371,7 +375,7 @@
lookupPage(pageId, jParams);
// add a container
- JahiaContainer pageContainer = new JahiaContainer(0,
+ JahiaContainer fileContainer = new JahiaContainer(0,
site.getID(),
containerPageID,
containerListID,
@@ -379,16 +383,16 @@
containerListACLID,
containerDefID,
0, 2);
- JahiaContainerDefinition containerDef =
pageContainer.getDefinition();
+ JahiaContainerDefinition containerDef =
fileContainer.getDefinition();
Locale locale = (Locale) site.getLanguageSettingsAsLocales(true).
iterator().next();
jahiaContainersService.
- saveContainer(pageContainer, containerListID, jParams);
- pageContainer.setLanguageCode(locale.toString());
- pageContainer.fieldsStructureCheck(jParams);
+ saveContainer(fileContainer, containerListID, jParams);
+ fileContainer.setLanguageCode(locale.toString());
+ fileContainer.fieldsStructureCheck(jParams);
- JahiaField jahiaField = pageContainer.getField(props.getProperty(
+ JahiaField jahiaField = fileContainer.getField(props.getProperty(
"file.field.name"));
jahiaField.setValue(uri);
JahiaFile file = new JahiaFile( -1, // filemanager id
@@ -416,6 +420,38 @@
fieldObject.setDownloadUrl(url.toString());
jahiaField.setObject(fieldObject);
jahiaField.save(jParams);
+
+ // now let's process the extra fields.
+ int i=1;
+ while (props.getProperty("file.container.extrafield.name." + i) !=
null) {
+ String fieldName =
props.getProperty("file.container.extrafield.name." + i);
+ String fieldValue =
props.getProperty("file.container.extrafield.value." + i);
+
+ // now let's process expression if there are any...
+ int startPos = -1;
+ while ((startPos = fieldValue.indexOf("${")) != -1) {
+ int endPos = fieldValue.indexOf("}", startPos);
+ if (endPos == -1) {
+ endPos = fieldValue.length();
+ }
+ String expr = fieldValue.substring(startPos+2, endPos);
+ String exprValue = processExpression(expr, jParams);
+ if (endPos < fieldValue.length()) {
+ fieldValue = fieldValue.substring(0, startPos) +
exprValue +
+ fieldValue.substring(endPos+1);
+ } else {
+ fieldValue = fieldValue.substring(0, startPos) +
exprValue;
+ }
+ }
+
+ JahiaField extraField = fileContainer.getField(fieldName);
+ if (extraField != null) {
+ extraField.setValue(fieldValue);
+ extraField.save(jParams);
+ }
+
+ i++;
+ }
}
public void fork (ContentEvent event)
@@ -657,4 +693,30 @@
throws VetoException {
}
+
+ private String processExpression(String expr, ParamBean paramBean) {
+ String value = "";
+ try {
+ Expression e = ExpressionFactory.createExpression(expr);
+
+ JexlContext jc = JexlHelper.createContext();
+ jc.getVars().put("paramBean", paramBean);
+
+ Object o = e.evaluate(jc);
+
+ if (o == null) {
+ logger.warn("Didn't find object for expression " + expr);
+ } else {
+ if (o instanceof String) {
+ value = (String) o;
+ } else {
+ value = o.toString();
+ }
+ }
+ } catch (Exception e) {
+ logger.error("Error while evaluating JEXL expression [" + expr +
+ "]", e);
+ }
+ return value;
+ }
}