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;
  +    }
   }
  

Reply via email to