oms3.dsl.BeanBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of oms Show documentation
Show all versions of oms Show documentation
Object Modeling System (OMS) is a pure Java object-oriented framework.
OMS v3.+ is a highly interoperable and lightweight modeling framework for component-based model and simulation development on multiple platforms.
/*
* $Id: BeanBuilder.java 50798ee5e25c 2013-01-09 [email protected] $
*
* This file is part of the Object Modeling System (OMS),
* 2007-2012, Olaf David and others, Colorado State University.
*
* OMS is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 2.1.
*
* OMS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with OMS. If not, see .
*/
package oms3.dsl;
/*
* BeanBuilder.java
*
* Created on March 17, 2007, 10:27 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
import java.beans.BeanInfo;
import java.beans.IndexedPropertyDescriptor;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author jclarke
*/
class BeanBuilder {
HashMap propertyMap;
Class beanClass;
BeanBuilder(Class beanClass) throws IntrospectionException {
this.beanClass = beanClass;
loadBean();
}
protected void loadBean() throws IntrospectionException {
propertyMap = new HashMap();
BeanInfo info = Introspector.getBeanInfo(beanClass);
PropertyDescriptor[] properties = info.getPropertyDescriptors();
for (int i = 0; i < properties.length; i++) {
propertyMap.put(properties[i].getName(), properties[i]);
}
}
public boolean isIndexedProperty(String property) {
return propertyMap.get(property) instanceof IndexedPropertyDescriptor;
}
public boolean hasProperty(String property) {
return propertyMap.containsKey(property);
}
public void setProperties(Object instance, Map map) throws IllegalAccessException, InvocationTargetException {
if (map == null) {
return;
}
for (Object object : map.keySet()) {
String property = (String) object;
Object v = map.get(property);
if (isIndexedProperty(property)) {
Map m = (Map) v;
for (Object object1 : m.keySet()) {
Number n = (Number) object1;
Object propVal = m.get(n);
// System.out.println("Setting Indexed Property: " + property + ": " + n + " = " + propVal);
setProperty(instance, property, n, propVal);
}
} else {
setProperty(instance, property, v);
}
}
}
public void setProperty(Object instance, String property, Number index, Object value)
throws IllegalAccessException, InvocationTargetException {
setProperty(instance, property, index.intValue(), value);
}
public void setProperty(Object instance, String property, int index, Object value)
throws IllegalAccessException, InvocationTargetException {
IndexedPropertyDescriptor desc = (IndexedPropertyDescriptor) propertyMap.get(property);
if (desc == null) {
throw new IllegalArgumentException("Invalid property '" + property + "'");
}
Method meth = desc.getIndexedWriteMethod();
Class propertyType = desc.getIndexedPropertyType();
Object arg = getPropertyTypeValue(propertyType, value);
// System.out.println("Invoking: " + meth.getName() + " Index = " + index + " arg = " + arg);
meth.invoke(instance, new Object[]{new Integer(index), arg});
}
public void setProperty(Object instance, String property, Object value) throws IllegalAccessException, InvocationTargetException {
PropertyDescriptor desc = propertyMap.get(property);
if (desc == null) {
throw new IllegalArgumentException("Invalid property '" + property + "' for " + instance.getClass());
}
Method meth = desc.getWriteMethod();
Class propertyType = desc.getPropertyType();
if (propertyType == null) {
// System.out.println("Cannot determine type for property: " + property);
meth.invoke(instance, value);
return;
}
Object arg = getPropertyTypeValue(propertyType, value);
meth.invoke(instance, new Object[]{arg});
}
/**
* converts ths incoming value to an object for the property type.
*/
private Object getPropertyTypeValue(Class propertyType, Object value) {
if (propertyType.equals(String.class)) {
return value.toString();
} else if (propertyType.equals(Boolean.class) || propertyType.equals(Boolean.TYPE)) {
Boolean arg = null;
if (value instanceof Boolean) {
arg = (Boolean) value;
} else {
arg = Boolean.parseBoolean(value.toString());
}
return arg;
} else if (propertyType.equals(Short.class) || propertyType.equals(Short.TYPE)) {
Short arg = null;
if (value instanceof Short) {
arg = (Short) value;
} else {
arg = Short.parseShort(value.toString());
}
return arg;
} else if (propertyType.equals(Integer.class) || propertyType.equals(Integer.TYPE)) {
Integer arg = null;
if (value instanceof Integer) {
arg = (Integer) value;
} else {
arg = Integer.parseInt(value.toString());
}
return arg;
} else if (propertyType.equals(Long.class) || propertyType.equals(Long.TYPE)) {
Long arg = null;
if (value instanceof Long) {
arg = (Long) value;
} else {
arg = Long.parseLong(value.toString());
}
return arg;
} else if (propertyType.equals(Float.class) || propertyType.equals(Float.TYPE)) {
Float arg = null;
if (value instanceof Float) {
arg = (Float) value;
} else {
arg = Float.parseFloat(value.toString());
}
return arg;
} else if (propertyType.equals(Double.class) || propertyType.equals(Double.TYPE)) {
Double arg = null;
if (value instanceof Double) {
arg = (Double) value;
} else {
arg = Double.parseDouble(value.toString());
}
return arg;
} else { // Object
return value;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy