/* MBeanValueConverter.java * * Copyright 2009-2015 Comcast Interactive Media, LLC. * * 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 org.fishwife.jrugged.spring.jmx; import java.util.Map; /** * The MBeanValueConverter is used to convert {@link String} parameter values stored in a {@link Map} of * parameter names to values into their native types. */ public class MBeanValueConverter { private Map<String, String[]> parameterMap; /** * Constructor. * @param parameterMap the {@link Map} of parameter names to {@link String} values. */ public MBeanValueConverter(Map<String, String[]> parameterMap) { this.parameterMap = parameterMap; } /** * Convert the {@link String} parameter value into its native type. * The {@link String} '<null>' is converted into a null value. * Only types String, Boolean, Int, Long, Float, and Double are supported. * @param parameterName the parameter name to convert. * @param type the native type for the parameter. * @return the converted value. * @throws NumberFormatException the parameter is not a number * @throws UnhandledParameterTypeException unable to recognize the parameter type */ public Object convertParameterValue(String parameterName, String type) throws NumberFormatException, UnhandledParameterTypeException { String[] valueList = parameterMap.get(parameterName); if (valueList == null || valueList.length == 0) return null; String value = valueList[0]; if (value.equals("<null>")) return null; if (type.equals("java.lang.String")) return value; if (type.equals("boolean")) return Boolean.parseBoolean(value); if (type.equals("int")) return Integer.parseInt(value); if (type.equals("long")) return Long.parseLong(value); if (type.equals("float")) return Float.parseFloat(value); if (type.equals("double")) return Double.parseDouble(value); throw new UnhandledParameterTypeException("Cannot convert " + value + " into type " + type + " for parameter " + parameterName); } }