1 package org.codehaus.plexus.component.configurator.converters.basic;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
28 import org.codehaus.plexus.component.configurator.ConfigurationListener;
29 import org.codehaus.plexus.component.configurator.converters.AbstractConfigurationConverter;
30 import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup;
31 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
32 import org.codehaus.plexus.configuration.PlexusConfiguration;
33
34
35
36
37 public class EnumConverter extends AbstractConfigurationConverter {
38
39 public boolean canConvert(Class type) {
40 return type.isEnum();
41 }
42
43 public Object fromConfiguration(
44 ConverterLookup converterLookup,
45 PlexusConfiguration configuration,
46 Class type,
47 Class baseType,
48 ClassLoader classLoader,
49 ExpressionEvaluator expressionEvaluator,
50 ConfigurationListener listener)
51 throws ComponentConfigurationException {
52 if (configuration.getChildCount() > 0) {
53 throw new ComponentConfigurationException("When configuring a basic element the configuration cannot "
54 + "contain any child elements. " + "Configuration element '" + configuration.getName() + "'.");
55 }
56
57 Object retValue = fromExpression(configuration, expressionEvaluator);
58
59 if (retValue instanceof String) {
60 try {
61 retValue = Enum.valueOf(type, (String) retValue);
62 } catch (RuntimeException e) {
63 throw new ComponentConfigurationException(
64 "Cannot assign value " + retValue + " to property " + configuration.getName() + " of "
65 + baseType.getName() + ": " + e.getMessage(),
66 e);
67 }
68 }
69
70 return retValue;
71 }
72 }