/** * VMware Continuent Tungsten Replicator * Copyright (C) 2015 VMware, Inc. All rights reserved. * * 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. * * Initial developer(s): * Contributor(s): */ package com.continuent.tungsten.common.config.cluster; import java.lang.reflect.Field; import com.continuent.tungsten.common.config.PropertyException; import com.continuent.tungsten.common.config.TungstenProperties; public class ConfigUtilities { static public void setProperty(String name, String value, Object o, TungstenProperties mirror, boolean ignoreIfNotFound) throws PropertyException { Field field = findField(name, o); if (field == null) { if (ignoreIfNotFound == true) return; throw new PropertyException("Could not find field=" + name); } try { if (field.getType() == Integer.TYPE) { field.setInt(o, new Integer(value).intValue()); } else if (field.getType() == Long.TYPE) { field.setLong(o, new Long(value).longValue()); } else if (field.getType() == Boolean.TYPE) { field.setBoolean(o, new Boolean(value).booleanValue()); } else if (field.getType() == String.class) { field.set(o, value); } else { throw new PropertyException( "Unsupported property type for 'setProperty':" + field.getType()); } } catch (IllegalAccessException i) { throw new PropertyException("Exception while trying to set field=" + field.getName() + " of class=" + o.getClass().getSimpleName()); } mirror.setObject(name, value); } static private Field findField(String name, Object o) { Field foundField = null; Field[] fields = o.getClass().getDeclaredFields(); for (Field field : fields) { if (field.getName().equals(name)) { field.setAccessible(true); foundField = field; break; } } return foundField; } }