/*
* Copyright 2008 Jeff Dwyer
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.apress.progwt.server.util;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
/**
* HostPrecedingPropertyPlaceholderConfigurer
*
* Extends PropertyPlaceholderConfigurer to insert $hostname.property
*
* sample properties file:
*
* jdbc.user=live_user
* server.jdbc.url=jdbc:postgresql://db.host.com:5432/db
* server.magic.file.location=/var/magic_file
*
* jdbc.user=devel_user
* devel.jdbc.url=jdbc:postgresql://devel-db.host.com:5432/db
* devel.magic.file.location=c:\\var\magic_file
*
* my.property=a property referenced through a method besides
* HostPrecedingPropertyPlaceholderConfigurer
*
* <bean id="propertyConfigurer"
* class="com.util.spring.HostPrecedingPropertyPlaceholderConfigurer">
* <property name="location" value="classpath:config.properties" />
* </bean>
*
* <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
* destroy-method="close"> <property name="driverClass"
* value="${jdbc.driverClass}" /> <property name="jdbcUrl"
* value="${HOST.jdbc.url}" /> <property name="user" value="${jdbc.user}" />
* <property name="password" value="${jdbc.password}" /> </bean>
*
*
* @author Jeff Dwyer (blog) http://jdwyah.blogspot.com
*
*/
public class HostPrecedingPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private static Logger log = Logger
.getLogger(HostPrecedingPropertyPlaceholderConfigurer.class);
public String resolvePlaceholder(String placeholder){
Properties mergedProps;
try {
mergedProps = mergeProperties();
} catch (IOException e) {
log.error(e);
throw new RuntimeException(e);
}
return resolvePlaceholder(placeholder, mergedProps);
}
public String resolvePlaceholder(String placeholder, Properties props) {
try {
if (placeholder.startsWith("HOST.")) {
log.debug("Host: "
+ InetAddress.getLocalHost().getHostName()
+ " for property " + placeholder);
String replace = placeholder.replaceFirst("HOST",
InetAddress.getLocalHost().getHostName());
String prop = props.getProperty(replace);
if (prop == null) {
log.warn("Please define property: " + replace);
}
return prop;
} else {
log.debug("reg");
return props.getProperty(placeholder);
}
} catch (UnknownHostException e) {
log.warn(e);
return null;
}
}
}