1
2
3
4
5
6
7 package org.mule.transformer.simple;
8
9 import org.mule.api.transformer.DataType;
10 import org.mule.api.transformer.DiscoverableTransformer;
11 import org.mule.api.transformer.TransformerException;
12 import org.mule.transformer.AbstractTransformer;
13 import org.mule.transformer.types.DataTypeFactory;
14 import org.mule.transformer.types.SimpleDataType;
15 import org.mule.util.NumberUtils;
16
17 import java.text.NumberFormat;
18
19
20
21
22
23 public class StringToNumber extends AbstractTransformer implements DiscoverableTransformer
24 {
25
26 private NumberFormat numberFormat;
27
28
29
30
31 private int priorityWeighting = DiscoverableTransformer.DEFAULT_PRIORITY_WEIGHTING + 1;
32
33 public StringToNumber()
34 {
35 registerSourceType(new SimpleDataType<Object>(String.class));
36 setReturnDataType(DataTypeFactory.create(Number.class));
37 }
38
39 public StringToNumber(NumberFormat numberFormat)
40 {
41 this();
42 this.numberFormat = numberFormat;
43 }
44
45 @SuppressWarnings("unchecked")
46 @Override
47 public Object doTransform(Object src, String encoding) throws TransformerException
48 {
49 if (src == null)
50 {
51 return null;
52 }
53 else
54 {
55 if (numberFormat != null)
56 {
57 try
58 {
59 return NumberUtils.convertNumberToTargetClass(numberFormat.parse((String) src),
60 getReturnClass());
61 }
62 catch (Exception e)
63 {
64 throw new TransformerException(this, e);
65 }
66 }
67 else
68 {
69 return NumberUtils.parseNumber((String) src, getReturnClass());
70 }
71 }
72 }
73
74 @SuppressWarnings({"unchecked"})
75 @Override
76 public Class<? extends Number> getReturnClass()
77 {
78 return (Class<Number>) super.getReturnDataType().getType();
79 }
80
81 @Override
82 public void setReturnDataType(DataType<?> type)
83 {
84 if (!Number.class.isAssignableFrom(type.getType()))
85 {
86 throw new IllegalArgumentException("This transformer only supports Number return types.");
87 }
88 else
89 {
90 super.setReturnDataType(type);
91 }
92 }
93
94 public int getPriorityWeighting()
95 {
96 return priorityWeighting;
97 }
98
99 public void setPriorityWeighting(int priorityWeighting)
100 {
101 this.priorityWeighting = priorityWeighting;
102 }
103
104 }