Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.uqbar.commons.model;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.beanutils.PropertyUtils;
import org.uqbar.commons.utils.ReflectionUtils;
/**
* @deprecated Este model la verdad que no me cierra ni un poco. Ver Panel#bindContentsTo.
* Ademas en la nueva version de arena con aspectos no hace falta heredar de aca.
*/
@Deprecated
public class Model implements IModel {
private T target;
public Model(T target) {
this.target = target;
}
// TODO Este método debería ser protected
/**
* Hace un set del field correspondiente a la propiedad y dispara el evento de propertyChange
*/
public void setFieldValue(String fieldName, Object value) {
try {
// Object originalValue = this.getProperty(fieldName);
Field field = this.getSetter(fieldName).getDeclaringClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(this, value);
// this.firePropertyChange(fieldName, originalValue, value);
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Error al obtener el valor al field " + fieldName
+ " de un objeto de tipo " + this.getClass().getSimpleName() + ". "
+ "Es posible que haya habido un error de conversión de tipos primitivos de Java", e);
// Otra posibilidad para esta excepción sería que se esté usando un field de una clase que no está
// en la jerarquía del objeto, pero por la forma en que está construido eso no puede pasar acá.
}
catch (IllegalAccessException e) {
throw new RuntimeException("No se tiene permisos para acceder al field " + fieldName
+ " de un objeto de tipo " + this.getClass().getSimpleName() + "."
+ "Esto no debería pasar, reporte este bug al proveedor del framework .", e);
// Dado que estamos haciendo setAccesible, eso no puede pasar, pero el Java me obliga a manejar
// esa excepción.
}
catch (NoSuchFieldException e) {
throw new RuntimeException("No se encotró un field con nombre " + fieldName + " en un objeto de tipo "
+ this.getClass().getSimpleName(), e);
}
catch (SecurityException e) {
throw new RuntimeException("No se tiene permisos para acceder al field " + fieldName
+ " en un objeto de tipo " + this.getClass().getSimpleName() + ". "
+ "Esto puede ocurrir porque se está utilizando un SecurityManager, "
+ "para poder utilizar esta herramienta deberá modificar la política de seguridad.");
}
}
public Object getProperty(String property) {
return ReflectionUtils.invokeGetter(this.target, property);
// return getPropertyValue(target, property);
}
public static Object getPropertyValue(Object object, String property) {
try {
return PropertyUtils.getProperty(object, property);
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Se intentó obtener el valor a la propiedad " + property
+ " de un objeto, pero el objeto recibido era nulo.", e);
}
catch (IllegalAccessException e) {
throw new RuntimeException("No se tiene acceso a la propiedad " + property + " de un objeto de tipo "
+ object.getClass().getSimpleName() + ". Verifique que la propiedad tenga un getter público.", e);
}
catch (InvocationTargetException e) {
throw new RuntimeException("Al acceder a la propiedad " + property + " de un objeto de tipo "
+ object.getClass().getSimpleName() + ", el método getter tiró una excepción.", e);
}
catch (NoSuchMethodException e) {
throw new RuntimeException("Cannot find getter method for the property with name '" + property
+ "' in an object of type '" + object.getClass().getSimpleName() + "'", e);
}
}
protected Method getSetter(String property) {
return getPropertyDescriptor(target, property).getWriteMethod();
}
public static PropertyDescriptor getPropertyDescriptor(Object object, String property) {
try {
PropertyDescriptor propertyDescriptor;
if(!property.contains(".")){
propertyDescriptor = ScalaBeanInfo.getPropertyDescriptor(object, property);
}else{
String[] parts = property.split("\\.");
propertyDescriptor = ScalaBeanInfo.getPropertyDescriptor(object, parts[0]);
Class> nestedTarget = propertyDescriptor.getPropertyType();
for (int i = 1; i < parts.length; i++) {
propertyDescriptor = Model.propertyDescriptor(nestedTarget, parts[i]);
nestedTarget = propertyDescriptor.getPropertyType();
}
}
if (propertyDescriptor == null) {
throw new RuntimeException("No se encuentra un property descriptor para la propiedad " + property
+ " en un objeto de la clase " + object.getClass() + " o ese clase no tiene dicha propiedad.");
}
return propertyDescriptor;
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Se intentó acceder a la propiedad " + property
+ " de un objeto, pero el objeto recibido era nulo.", e);
}
}
private static PropertyDescriptor propertyDescriptor(Class> beanClass, String propertyName){
final PropertyDescriptor[] propertyDescriptors = ScalaBeanInfo.getPropertyDescriptors(beanClass);
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
if(propertyDescriptor.getName().equals(propertyName)){
return propertyDescriptor;
}
}
throw new RuntimeException("No se encuentra un property descriptor para la propiedad " + propertyName
+ " en un objeto de la clase " + beanClass);
}
public T getSource() {
return target;
}
public void setTarget(T target) {
this.target = target;
}
}