001//////////////////////////////////////////////////////////////////////////////// 002// checkstyle: Checks Java source code for adherence to a set of rules. 003// Copyright (C) 2001-2018 the original author or authors. 004// 005// This library is free software; you can redistribute it and/or 006// modify it under the terms of the GNU Lesser General Public 007// License as published by the Free Software Foundation; either 008// version 2.1 of the License, or (at your option) any later version. 009// 010// This library is distributed in the hope that it will be useful, 011// but WITHOUT ANY WARRANTY; without even the implied warranty of 012// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013// Lesser General Public License for more details. 014// 015// You should have received a copy of the GNU Lesser General Public 016// License along with this library; if not, write to the Free Software 017// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 018//////////////////////////////////////////////////////////////////////////////// 019 020package com.puppycrawl.tools.checkstyle; 021 022import java.util.Enumeration; 023import java.util.HashMap; 024import java.util.Map; 025import java.util.Properties; 026 027/** 028 * Resolves external properties from an 029 * underlying {@code Properties} object. 030 * 031 * @author lkuehne 032 */ 033public final class PropertiesExpander 034 implements PropertyResolver { 035 036 /** The underlying values. */ 037 private final Map<String, String> values; 038 039 /** 040 * Creates a new PropertiesExpander. 041 * @param properties the underlying properties to use for 042 * property resolution. 043 * @throws IllegalArgumentException indicates null was passed 044 */ 045 public PropertiesExpander(Properties properties) { 046 if (properties == null) { 047 throw new IllegalArgumentException("cannot pass null"); 048 } 049 values = new HashMap<>(properties.size()); 050 for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) { 051 final String name = (String) e.nextElement(); 052 values.put(name, properties.getProperty(name)); 053 } 054 } 055 056 @Override 057 public String resolve(String name) { 058 return values.get(name); 059 } 060 061}