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 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 private final TemplateParser antParser = TemplateParser.createAntStyleParser(); 47 private final TemplateParser squareParser = TemplateParser.createSquareBracesStyleParser(); 48 49 public String getFilename(MessageAdapter adapter, String expression) 50 { 51 if (expression == null) 52 { 53 return expression = DEFAULT_EXPRESSION; 54 } 55 56 if (expression.indexOf(ExpressionEvaluatorManager.DEFAULT_EXPRESSION_PREFIX) > -1) 57 { 58 return getFilename(adapter, expression, antParser); 59 } 60 else 61 { 62 return getFilename(adapter, expression, squareParser); 63 } 64 } 65 66 67 protected String getFilename(final MessageAdapter adapter, String expression, TemplateParser parser) 68 { 69 return parser.parse(new TemplateParser.TemplateCallback() 70 { 71 public Object match(String token) 72 { 73 return ExpressionEvaluatorManager.evaluate(token, adapter); 74 } 75 }, expression); 76 } 77 }