Coverage Report - org.mule.transport.file.ExpressionFilenameParser
 
Classes in this File Line Coverage Branch Coverage Complexity
ExpressionFilenameParser
89%
8/9
75%
3/4
2.333
ExpressionFilenameParser$1
100%
2/2
N/A
2.333
 
 1  
 /*
 2  
  * $Id: ExpressionFilenameParser.java 11232 2008-03-06 22:22:30Z rossmason $
 3  
  * --------------------------------------------------------------------------------------
 4  
  * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
 5  
  *
 6  
  * The software in this package is published under the terms of the CPAL v1.0
 7  
  * license, a copy of which has been included with this distribution in the
 8  
  * LICENSE.txt file.
 9  
  */
 10  
 
 11  
 package org.mule.transport.file;
 12  
 
 13  
 import org.mule.api.transport.MessageAdapter;
 14  
 import org.mule.util.TemplateParser;
 15  
 import org.mule.util.expression.ExpressionEvaluatorManager;
 16  
 
 17  
 /**
 18  
  * <code>ExpressionFilenameParser</code> can use any expression language supported by Mule
 19  
  * to construct a file name for the current message.  Expressions can be xpath, xquery, ognl, mvel, header, function
 20  
  * and more. For more information see http://muledocs.org/v2/Expressions.
 21  
  * <p/>
 22  
  * For example an xpath expression can be defined to pull a message id out of an xml message and use that as the file name -
 23  
  * <code>
 24  
  * ${xpath:/message/header/@id}
 25  
  * </code>
 26  
  * <p/>
 27  
  * This parser superseeds the {@link org.mule.transport.file.SimpleFilenameParser} which has been kept in Mule 2 for
 28  
  * compatibility. The following demonstrates how to achieve the same results when using the <code>ExpressionFilenameParser</code>
 29  
  * over the {@link org.mule.transport.file.SimpleFilenameParser}.
 30  
  * <ul>
 31  
  * <li>${DATE} : ${function:dateStamp}</li>
 32  
  * <li>${DATE:yy-MM-dd} : ${function:dateStamp(yy-MM-dd)}</li>
 33  
  * <li>${SYSTIME} : ${function:systime}</li>
 34  
  * <li>${UUID} : ${function:uuid}</li>
 35  
  * <li>${ORIGINALNAME} : ${header:originalFilename}</li>
 36  
  * <li>${COUNT} : ${function:counter} - note that this is a global counter. If you want a local counter per file connector then you should use the {@link org.mule.transport.file.SimpleFilenameParser}.</li>
 37  
  * <li>${<Message Property Name>} : ${header:<Message Property Name>}</li>
 38  
  * </ul>
 39  
  */
 40  
 
 41  14
 public class ExpressionFilenameParser implements FilenameParser
 42  
 {
 43  
     public static final String DEFAULT_DATE_FORMAT = "dd-MM-yy_HH-mm-ss.SSS";
 44  
     public static final String DEFAULT_EXPRESSION = "${function:uuid}.dat";
 45  
 
 46  14
     private final TemplateParser antParser = TemplateParser.createAntStyleParser();
 47  14
     private final TemplateParser squareParser = TemplateParser.createSquareBracesStyleParser();
 48  
 
 49  
     public String getFilename(MessageAdapter adapter, String expression)
 50  
     {
 51  36
         if (expression == null)
 52  
         {
 53  0
             return expression = DEFAULT_EXPRESSION;
 54  
         }
 55  
 
 56  36
         if (expression.indexOf(ExpressionEvaluatorManager.DEFAULT_EXPRESSION_PREFIX) > -1)
 57  
         {
 58  18
             return getFilename(adapter, expression, antParser);
 59  
         }
 60  
         else
 61  
         {
 62  18
             return getFilename(adapter, expression, squareParser);
 63  
         }
 64  
     }
 65  
 
 66  
 
 67  
     protected String getFilename(final MessageAdapter adapter, String expression, TemplateParser parser)
 68  
     {
 69  36
         return parser.parse(new TemplateParser.TemplateCallback()
 70  
         {
 71  36
             public Object match(String token)
 72  
             {
 73  36
                 return ExpressionEvaluatorManager.evaluate(token, adapter);
 74  
             }
 75  
         }, expression);
 76  
     }
 77  
 }