001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.configuration;
019
020 import java.util.ArrayList;
021 import java.util.Iterator;
022 import java.util.List;
023 import java.util.Map;
024 import java.util.Properties;
025
026 import org.apache.commons.collections.ExtendedProperties;
027 import org.apache.commons.lang.StringUtils;
028
029 /**
030 * Configuration converter. Helper class to convert between Configuration,
031 * ExtendedProperties and standard Properties.
032 *
033 * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
034 * @version $Id: ConfigurationConverter.java 1208788 2011-11-30 21:15:37Z oheger $
035 */
036 public final class ConfigurationConverter
037 {
038 /**
039 * Private constructor prevents instances from being created.
040 */
041 private ConfigurationConverter()
042 {
043 // to prevent instanciation...
044 }
045
046 /**
047 * Convert a ExtendedProperties class into a Configuration class.
048 *
049 * @param eprops ExtendedProperties object to convert
050 * @return Configuration created from the ExtendedProperties
051 */
052 public static Configuration getConfiguration(ExtendedProperties eprops)
053 {
054 return new MapConfiguration(eprops);
055 }
056
057 /**
058 * Convert a standard Properties class into a configuration class.
059 *
060 * @param props properties object to convert
061 * @return Configuration configuration created from the Properties
062 */
063 public static Configuration getConfiguration(Properties props)
064 {
065 return new MapConfiguration(props);
066 }
067
068 /**
069 * Convert a Configuration class into a ExtendedProperties class.
070 *
071 * @param config Configuration object to convert
072 * @return ExtendedProperties created from the Configuration
073 */
074 public static ExtendedProperties getExtendedProperties(Configuration config)
075 {
076 ExtendedProperties props = new ExtendedProperties();
077
078 for (Iterator<String> keys = config.getKeys(); keys.hasNext();)
079 {
080 String key = keys.next();
081 Object property = config.getProperty(key);
082
083 // turn lists into vectors
084 if (property instanceof List)
085 {
086 property = new ArrayList<Object>((List<?>) property);
087 }
088
089 props.setProperty(key, property);
090 }
091
092 return props;
093 }
094
095 /**
096 * Convert a Configuration class into a Properties class. List properties
097 * are joined into a string using the delimiter of the configuration if it
098 * extends AbstractConfiguration, and a comma otherwise.
099 *
100 * @param config Configuration object to convert
101 * @return Properties created from the Configuration
102 */
103 public static Properties getProperties(Configuration config)
104 {
105 Properties props = new Properties();
106
107 char delimiter = (config instanceof AbstractConfiguration)
108 ? ((AbstractConfiguration) config).getListDelimiter() : ',';
109
110 for (Iterator<String> keys = config.getKeys(); keys.hasNext();)
111 {
112 String key = keys.next();
113 List<Object> list = config.getList(key);
114
115 // turn the list into a string
116 props.setProperty(key, StringUtils.join(list.iterator(), delimiter));
117 }
118
119 return props;
120 }
121
122 /**
123 * Convert a Configuration class into a Map class.
124 *
125 * @param config Configuration object to convert
126 * @return Map created from the Configuration
127 */
128 public static Map<Object, Object> getMap(Configuration config)
129 {
130 return new ConfigurationMap(config);
131 }
132
133 }