View Javadoc
1   package org.codehaus.plexus.component.configurator.converters.composite;
2   
3   /*
4    * The MIT License
5    *
6    * Copyright (c) 2004, The Codehaus
7    *
8    * Permission is hereby granted, free of charge, to any person obtaining a copy of
9    * this software and associated documentation files (the "Software"), to deal in
10   * the Software without restriction, including without limitation the rights to
11   * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12   * of the Software, and to permit persons to whom the Software is furnished to do
13   * so, subject to the following conditions:
14   *
15   * The above copyright notice and this permission notice shall be included in all
16   * copies or substantial portions of the Software.
17   *
18   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24   * SOFTWARE.
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  import java.util.Properties;
35  
36  /**
37   * Converter for <code>java.util.Properties</code>.
38   *
39   * @author <a href="mailto:michal@codehaus.org">Michal Maczka</a>
40   * @version $Id$
41   */
42  public class PropertiesConverter
43      extends AbstractConfigurationConverter
44  {
45      public boolean canConvert( Class type )
46      {
47          return Properties.class.isAssignableFrom( type );
48      }
49  
50      public Object fromConfiguration( ConverterLookup converterLookup, PlexusConfiguration configuration, Class type,
51                                       Class baseType, ClassLoader classLoader, ExpressionEvaluator expressionEvaluator,
52                                       ConfigurationListener listener )
53          throws ComponentConfigurationException
54      {
55  
56          Object retValueInterpolated = fromExpression( configuration, expressionEvaluator, type );
57          if ( retValueInterpolated != null )
58          {
59              return retValueInterpolated;
60          }
61  
62          String element = configuration.getName();
63  
64          Properties retValue = new Properties();
65  
66          PlexusConfiguration[] children = configuration.getChildren( "property" );
67  
68          if ( children != null && children.length > 0 )
69          {
70              for (PlexusConfiguration child : children) {
71                  addEntry(retValue, element, child, expressionEvaluator);
72              }
73          }
74  
75          return retValue;
76      }
77  
78      private void addEntry( Properties properties, String element, PlexusConfiguration property,
79                             ExpressionEvaluator expressionEvaluator )
80          throws ComponentConfigurationException
81      {
82          Object name = fromExpression( property.getChild( "name" ), expressionEvaluator );
83  
84          if ( name == null )
85          {
86              String msg =
87                  "Trying to convert the configuration element: '" + element
88                      + "', missing child element 'name' for property.";
89  
90              throw new ComponentConfigurationException( msg );
91          }
92  
93          Object value = fromExpression( property.getChild( "value" ), expressionEvaluator );
94  
95          if ( value == null )
96          {
97              properties.setProperty( name.toString(), "" );
98          }
99          else
100         {
101             properties.setProperty( name.toString(), value.toString() );
102         }
103     }
104 
105 }