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.Iterator; 021 import java.util.List; 022 import java.util.Map; 023 import java.util.Properties; 024 import java.util.Vector; 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 $Revision: 439648 $, $Date: 2006-09-02 22:42:10 +0200 (Sa, 02. Sep 2006) $ 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 Iterator keys = config.getKeys(); 079 080 while (keys.hasNext()) 081 { 082 String key = (String) keys.next(); 083 Object property = config.getProperty(key); 084 085 // turn lists into vectors 086 if (property instanceof List) 087 { 088 property = new Vector((List) property); 089 } 090 091 props.setProperty(key, property); 092 } 093 094 return props; 095 } 096 097 /** 098 * Convert a Configuration class into a Properties class. List properties 099 * are joined into a string using the delimiter of the configuration if it 100 * extends AbstractConfiguration, and a comma otherwise. 101 * 102 * @param config Configuration object to convert 103 * @return Properties created from the Configuration 104 */ 105 public static Properties getProperties(Configuration config) 106 { 107 Properties props = new Properties(); 108 109 char delimiter = (config instanceof AbstractConfiguration) 110 ? ((AbstractConfiguration) config).getListDelimiter() : ','; 111 112 Iterator keys = config.getKeys(); 113 while (keys.hasNext()) 114 { 115 String key = (String) keys.next(); 116 List list = config.getList(key); 117 118 // turn the list into a string 119 props.setProperty(key, StringUtils.join(list.iterator(), delimiter)); 120 } 121 122 return props; 123 } 124 125 /** 126 * Convert a Configuration class into a Map class. 127 * 128 * @param config Configuration object to convert 129 * @return Map created from the Configuration 130 */ 131 public static Map getMap(Configuration config) 132 { 133 return new ConfigurationMap(config); 134 } 135 136 }