| /* |
| * |
| * 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.cloud.agent.properties; |
| |
| import com.cloud.utils.PropertiesUtil; |
| import java.io.File; |
| import java.io.IOException; |
| import org.apache.cloudstack.utils.security.KeyStoreUtils; |
| import org.apache.commons.beanutils.ConvertUtils; |
| import org.apache.commons.beanutils.converters.IntegerConverter; |
| import org.apache.commons.beanutils.converters.LongConverter; |
| import org.apache.commons.lang3.StringUtils; |
| import org.apache.logging.log4j.Logger; |
| import org.apache.logging.log4j.LogManager; |
| |
| /** |
| * This class provides a facility to read the agent's properties file and get |
| * its properties, according to the {@link AgentProperties} properties constants. |
| * |
| */ |
| public class AgentPropertiesFileHandler { |
| |
| protected static Logger LOGGER = LogManager.getLogger(AgentPropertiesFileHandler.class); |
| |
| /** |
| * This method reads the property in the agent.properties file. |
| * |
| * @param property the property to retrieve. |
| * @return The value of the property. If the property is not available, the |
| * default defined value will be used. |
| */ |
| public static <T> T getPropertyValue(AgentProperties.Property<T> property) { |
| T defaultValue = property.getDefaultValue(); |
| String name = property.getName(); |
| |
| File agentPropertiesFile = PropertiesUtil.findConfigFile(KeyStoreUtils.AGENT_PROPSFILE); |
| |
| if (agentPropertiesFile == null) { |
| LOGGER.debug("File [{}] was not found, we will use default defined values. Property [{}]: [{}].", KeyStoreUtils.AGENT_PROPSFILE, name, defaultValue); |
| |
| return defaultValue; |
| } |
| |
| try { |
| String configValue = PropertiesUtil.loadFromFile(agentPropertiesFile).getProperty(name); |
| if (StringUtils.isBlank(configValue)) { |
| LOGGER.debug("Property [{}] has empty or null value. Using default value [{}].", name, defaultValue); |
| return defaultValue; |
| } |
| |
| if (defaultValue instanceof Integer) { |
| ConvertUtils.register(new IntegerConverter(defaultValue), Integer.class); |
| } |
| |
| if (defaultValue instanceof Long) { |
| ConvertUtils.register(new LongConverter(defaultValue), Long.class); |
| } |
| |
| LOGGER.debug("Property [{}] was altered. Now using the value [{}].", name, configValue); |
| return (T)ConvertUtils.convert(configValue, property.getTypeClass()); |
| |
| } catch (IOException ex) { |
| LOGGER.debug("Failed to get property [{}]. Using default value [{}].", name, defaultValue, ex); |
| } |
| |
| return defaultValue; |
| } |
| |
| } |