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