1
2
3
4
5
6
7
8
9
10 package org.mule.util.expression;
11
12 import org.mule.api.MuleRuntimeException;
13 import org.mule.config.i18n.CoreMessages;
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 public class FunctionExpressionEvaluator implements ExpressionEvaluator
39 {
40 public static final String NAME = "function";
41
42 public static final String DEFAULT_DATE_FORMAT = "dd-MM-yy_HH-mm-ss.SSS";
43
44
45
46
47
48 private final AtomicLong count = new AtomicLong(0);
49
50 public static final String NOW_FUNCTION = "now";
51 public static final String DATE_FUNCTION = "date";
52 public static final String DATESTAMP_FUNCTION = "datestamp";
53 public static final String SYSTIME_FUNCTION = "systime";
54 public static final String UUID_FUNCTION = "uuid";
55 public static final String HOSTNAME_FUNCTION = "hostname";
56 public static final String IP_FUNCTION = "ip";
57 public static final String COUNT_FUNCTION = "count";
58
59 public Object evaluate(String name, Object message)
60 {
61 if (name.equalsIgnoreCase(NOW_FUNCTION))
62 {
63 return new Timestamp(System.currentTimeMillis());
64 }
65 else if (name.equalsIgnoreCase(DATE_FUNCTION))
66 {
67 return new Date(System.currentTimeMillis());
68 }
69 else if (name.toLowerCase().startsWith(DATESTAMP_FUNCTION))
70 {
71 String temp = name.substring(DATESTAMP_FUNCTION.length());
72 if (temp.length()==0)
73 {
74 return DateUtils.getTimeStamp(DEFAULT_DATE_FORMAT);
75 }
76 else
77 {
78 temp = temp.substring(1);
79 return DateUtils.getTimeStamp(temp);
80 }
81 }
82 else if (name.equalsIgnoreCase(UUID_FUNCTION))
83 {
84 return UUID.getUUID();
85 }
86 else if (name.equalsIgnoreCase(SYSTIME_FUNCTION))
87 {
88 return new Long(System.currentTimeMillis());
89 }
90 else if (name.equalsIgnoreCase(HOSTNAME_FUNCTION))
91 {
92 try
93 {
94 return InetAddress.getLocalHost().getHostName();
95 }
96 catch (UnknownHostException e)
97 {
98 throw new MuleRuntimeException(CoreMessages.failedToProcessExtractorFunction(name), e);
99 }
100 }
101 else if (name.equalsIgnoreCase(IP_FUNCTION))
102 {
103 try
104 {
105 return InetAddress.getLocalHost().getHostAddress();
106 }
107 catch (UnknownHostException e)
108 {
109 throw new MuleRuntimeException(CoreMessages.failedToProcessExtractorFunction(name), e);
110 }
111 }
112 else if (name.equalsIgnoreCase(COUNT_FUNCTION))
113 {
114 return new Long(count.getAndIncrement());
115 }
116 else
117 {
118 throw new IllegalArgumentException(name);
119 }
120 }
121
122
123
124
125
126
127 public String getName()
128 {
129 return NAME;
130 }
131
132
133
134
135
136
137 public void setName(String name)
138 {
139 throw new UnsupportedOperationException("setName");
140 }
141 }