1 package org.codehaus.plexus.component.configurator.converters.composite;
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 java.util.Properties;
28
29 import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
30 import org.codehaus.plexus.component.configurator.ConfigurationListener;
31 import org.codehaus.plexus.component.configurator.converters.AbstractConfigurationConverter;
32 import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup;
33 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
34 import org.codehaus.plexus.configuration.PlexusConfiguration;
35
36
37
38
39
40
41 public class PropertiesConverter extends AbstractConfigurationConverter {
42 public boolean canConvert(Class type) {
43 return Properties.class.isAssignableFrom(type);
44 }
45
46 public Object fromConfiguration(
47 ConverterLookup converterLookup,
48 PlexusConfiguration configuration,
49 Class type,
50 Class baseType,
51 ClassLoader classLoader,
52 ExpressionEvaluator expressionEvaluator,
53 ConfigurationListener listener)
54 throws ComponentConfigurationException {
55
56 Object retValueInterpolated = fromExpression(configuration, expressionEvaluator, type);
57 if (retValueInterpolated != null) {
58 return retValueInterpolated;
59 }
60
61 String element = configuration.getName();
62
63 Properties retValue = new Properties();
64
65 PlexusConfiguration[] children = configuration.getChildren("property");
66
67 if (children != null && children.length > 0) {
68 for (PlexusConfiguration child : children) {
69 addEntry(retValue, element, child, expressionEvaluator);
70 }
71 }
72
73 return retValue;
74 }
75
76 private void addEntry(
77 Properties properties,
78 String element,
79 PlexusConfiguration property,
80 ExpressionEvaluator expressionEvaluator)
81 throws ComponentConfigurationException {
82 Object name = fromExpression(property.getChild("name"), expressionEvaluator);
83
84 if (name == null) {
85 String msg = "Trying to convert the configuration element: '" + element
86 + "', missing child element 'name' for property.";
87
88 throw new ComponentConfigurationException(msg);
89 }
90
91 Object value = fromExpression(property.getChild("value"), expressionEvaluator);
92
93 if (value == null) {
94 properties.setProperty(name.toString(), "");
95 } else {
96 properties.setProperty(name.toString(), value.toString());
97 }
98 }
99 }