Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
ExpressionFilenameParser |
|
| 2.3333333333333335;2.333 | ||||
ExpressionFilenameParser$1 |
|
| 2.3333333333333335;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 | } |