1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.converters;
12
13
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.StringTokenizer;
17
18 import javax.xml.namespace.QName;
19
20 import org.apache.commons.beanutils.ConversionException;
21 import org.apache.commons.beanutils.Converter;
22
23
24
25
26
27 public class QNameConverter implements Converter
28 {
29
30 boolean explicit = false;
31
32 public QNameConverter()
33 {
34 super();
35 }
36
37 public QNameConverter(boolean explicit)
38 {
39 this.explicit = explicit;
40 }
41
42
43
44
45
46
47
48
49
50
51
52
53 public Object convert(Class type, Object value)
54 {
55 if (value == null)
56 {
57 throw new ConversionException("No value specified");
58 }
59
60 if (value instanceof QName)
61 {
62 return (value);
63 }
64
65 String val = value.toString();
66 if (val.startsWith("qname{"))
67 {
68 return parseQName(val.substring(6, val.length() - 1));
69 }
70 else if (!explicit)
71 {
72 return parseQName(val);
73 }
74 else
75 {
76 return new QName(val);
77 }
78 }
79
80 protected QName parseQName(String val)
81 {
82 StringTokenizer st = new StringTokenizer(val, ":");
83 List elements = new ArrayList();
84
85 while (st.hasMoreTokens())
86 {
87 elements.add(st.nextToken());
88 }
89
90 switch (elements.size())
91 {
92 case 1 :
93 return new QName((String) elements.get(0));
94 case 2 :
95 return new QName((String) elements.get(0), (String) elements.get(1));
96 case 3 :
97 return new QName((String) elements.get(1) + ":" + (String) elements.get(2),
98 (String) elements.get(0));
99 case 4 :
100 return new QName((String) elements.get(2) + ":" + (String) elements.get(3),
101 (String) elements.get(1), (String) elements.get(0));
102 default :
103 return null;
104 }
105 }
106
107 }