1
2
3
4
5
6
7 package org.mule.expression;
8
9 import org.mule.api.MuleMessage;
10 import org.mule.api.MuleRuntimeException;
11 import org.mule.api.expression.ExpressionEvaluator;
12 import org.mule.config.i18n.CoreMessages;
13 import org.mule.util.ClassUtils;
14 import org.mule.util.DateUtils;
15 import org.mule.util.UUID;
16
17 import java.net.InetAddress;
18 import java.net.UnknownHostException;
19 import java.sql.Timestamp;
20 import java.util.Date;
21
22 import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicLong;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class FunctionExpressionEvaluator implements ExpressionEvaluator
41 {
42 public static final String NAME = "function";
43
44 public static final String DEFAULT_DATE_FORMAT = "dd-MM-yy_HH-mm-ss.SSS";
45
46
47
48
49
50 private final AtomicLong count = new AtomicLong(0);
51
52 public static final String NOW_FUNCTION = "now";
53 public static final String DATE_FUNCTION = "date";
54 public static final String DATESTAMP_FUNCTION = "datestamp";
55 public static final String SYSTIME_FUNCTION = "systime";
56 public static final String UUID_FUNCTION = "uuid";
57 public static final String HOSTNAME_FUNCTION = "hostname";
58 public static final String IP_FUNCTION = "ip";
59 public static final String COUNT_FUNCTION = "count";
60 public static final String PAYLOAD_CLASS_FUNCTION = "payloadClass";
61 public static final String SHORT_PAYLOAD_CLASS_FUNCTION = "shortPayloadClass";
62
63 public Object evaluate(String name, MuleMessage message)
64 {
65 if (name.equalsIgnoreCase(NOW_FUNCTION))
66 {
67 return new Timestamp(System.currentTimeMillis());
68 }
69 else if (name.equalsIgnoreCase(DATE_FUNCTION))
70 {
71 return new Date(System.currentTimeMillis());
72 }
73 else if (name.toLowerCase().startsWith(DATESTAMP_FUNCTION))
74 {
75 String temp = name.substring(DATESTAMP_FUNCTION.length());
76 if (temp.length() == 0)
77 {
78 return DateUtils.getTimeStamp(DEFAULT_DATE_FORMAT);
79 }
80 else
81 {
82 temp = temp.substring(1);
83 return DateUtils.getTimeStamp(temp);
84 }
85 }
86 else if (name.equalsIgnoreCase(UUID_FUNCTION))
87 {
88 return UUID.getUUID();
89 }
90 else if (name.equalsIgnoreCase(SYSTIME_FUNCTION))
91 {
92 return System.currentTimeMillis();
93 }
94 else if (name.equalsIgnoreCase(HOSTNAME_FUNCTION))
95 {
96 try
97 {
98 return InetAddress.getLocalHost().getHostName();
99 }
100 catch (UnknownHostException e)
101 {
102 throw new MuleRuntimeException(CoreMessages.failedToProcessExtractorFunction(name), e);
103 }
104 }
105 else if (name.equalsIgnoreCase(IP_FUNCTION))
106 {
107 try
108 {
109 return InetAddress.getLocalHost().getHostAddress();
110 }
111 catch (UnknownHostException e)
112 {
113 throw new MuleRuntimeException(CoreMessages.failedToProcessExtractorFunction(name), e);
114 }
115 }
116 else if (name.equalsIgnoreCase(COUNT_FUNCTION))
117 {
118 return count.getAndIncrement();
119 }
120 else if (name.equalsIgnoreCase(PAYLOAD_CLASS_FUNCTION))
121 {
122 return message.getPayload().getClass().getName();
123 }
124 else if (name.equalsIgnoreCase(SHORT_PAYLOAD_CLASS_FUNCTION))
125 {
126 return ClassUtils.getClassName(message.getPayload().getClass());
127 }
128 else
129 {
130 throw new IllegalArgumentException(name);
131 }
132 }
133
134
135
136
137
138
139 public String getName()
140 {
141 return NAME;
142 }
143
144
145
146
147
148
149 public void setName(String name)
150 {
151 throw new UnsupportedOperationException();
152 }
153 }