1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.exolab.castor.xml.util.resolvers;
15
16 import java.util.HashMap;
17 import java.util.Map;
18
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
21 import org.castor.xml.AbstractInternalContext;
22 import org.exolab.castor.mapping.ClassDescriptor;
23 import org.exolab.castor.xml.ResolverException;
24 import org.exolab.castor.xml.XMLClassDescriptor;
25 import org.exolab.castor.xml.util.ResolverStrategy;
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class CastorXMLStrategy implements ResolverStrategy {
41
42 private static final Log LOG = LogFactory.getLog(CastorXMLStrategy.class);
43
44
45 private Map _properties;
46
47
48
49
50
51
52 public CastorXMLStrategy() {
53 _properties = new HashMap();
54 }
55
56
57
58
59 public void setProperty(final String key, final Object value) {
60 if (_properties == null) {
61 _properties = new HashMap();
62 }
63 if (LOG.isDebugEnabled()) {
64 LOG.debug("Setting property: " + key + " to value: " + value);
65 }
66 _properties.put(key, value);
67 }
68
69
70
71
72 public ClassDescriptor resolveClass(final ResolverStrategy.ResolverResults resolverResults,
73 final String className) throws ResolverException {
74
75 if ((className == null) || ("".equals(className))) {
76 String message = "Class name to resolve must not be null or empty!";
77 LOG.warn(message);
78 throw new IllegalArgumentException(message);
79 }
80
81 XMLClassDescriptor descriptor = this.getDescriptor(resolverResults, className);
82 return descriptor;
83 }
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 private XMLClassDescriptor getDescriptor(final ResolverStrategy.ResolverResults resolverResults,
107 final String className) throws ResolverException {
108
109 String packageName = ResolveHelpers.getPackageName(className);
110
111 XMLClassDescriptor descriptor = resolverResults.getDescriptor(className);
112 if (descriptor != null) {
113 return descriptor;
114 }
115
116 resolverResults.addAllDescriptors(new ByMappingLoader().resolve(className, _properties));
117 descriptor = resolverResults.getDescriptor(className);
118 if (descriptor != null) {
119 return descriptor;
120 }
121
122 this.resolvePackage(resolverResults, packageName);
123 descriptor = resolverResults.getDescriptor(className);
124 if (descriptor != null) {
125 return descriptor;
126 }
127
128 resolverResults.addAllDescriptors(new ByDescriptorClass().resolve(className, _properties));
129 descriptor = resolverResults.getDescriptor(className);
130 if (descriptor != null) {
131 return descriptor;
132 }
133
134 resolverResults.addAllDescriptors(new ByIntrospection().resolve(className, _properties));
135 descriptor = resolverResults.getDescriptor(className);
136 if (descriptor != null) {
137 return descriptor;
138 }
139
140
141 resolverResults.addDescriptor(className, null);
142 return null;
143 }
144
145
146
147
148 public void resolvePackage(final ResolverResults resolverResults, final String packageName)
149 throws ResolverException {
150 resolverResults.addAllDescriptors(new ByCDR().resolve(packageName, _properties));
151 resolverResults.addAllDescriptors(new ByPackageMapping().resolve(packageName, _properties));
152 }
153 }