All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geoserver.ows.util.OwsUtils Maven / Gradle / Ivy

There is a newer version: 1.7.0
Show newest version
/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
 * This code is licensed under the GPL 2.0 license, availible at the root
 * application directory.
 */
package org.geoserver.ows.util;

import java.lang.reflect.Method;


/**
 * Utility class for performing reflective operations.
 *
 * @author Justin Deoliveira, The Open Planning Project
 *
 */
public class OwsUtils {
    
    /**
     * Returns a setter method for a property of java bean.
     * 

* The type parameter may be null to indicate the * the setter for the property should be returned regardless of the type. If * not null it will be used to filter the returned method. *

* @param clazz The type of the bean. * @param property The property name. * @param type The type of the property, may be null. * * @return The setter method, or null if not found. */ public static Method setter(Class clazz, String property, Class type) { //TODO: this lookup doesn't deal with classes that might have two setters // that are in the same class hierachy Method[] methods = clazz.getMethods(); final String methodName = "set" + property; for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase(methodName)) { if (method.getParameterTypes().length == 1) { if ( type != null ) { if (method.getParameterTypes()[0].isAssignableFrom(type)) { return method; } } else { return method; } } } } //nto found, check for case where setter property is primtive and the // class specified is its wrapper class if ( type != null ) { for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase(methodName)) { if ((method.getParameterTypes().length == 1)) { Class target = method.getParameterTypes()[0]; if ( target.isPrimitive() && type == wrapper( target ) ) { return method; } if ( type.isPrimitive() && target == wrapper( type ) ) { return method; } } } } } //could not be found, try again with a more lax match String lax = lax(property); if (!lax.equals(property)) { return setter(clazz, lax, type); } return null; } /** * Returns a getter method for a property of java bean. * * @param clazz The type of the bean. * @param property The property name. * @param type The type of the property, may be null. * * @return The setter method, or null if not found. */ public static Method getter(Class clazz, String property, Class type) { //TODO: this lookup doesn't deal with classes that might have two setters // that are in the same class hierachy Method[] methods = clazz.getMethods(); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase("get" + property)) { if (type != null) { if (type.equals(method.getReturnType())) { return method; } } else { return method; } } } //check for case where one of the classes is primitive and the other // is a wrapper if ( type != null ) { for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase("get" + property)) { Class target = method.getReturnType(); if ( target != null ) { if ( target.isPrimitive() && type == wrapper( target ) ) { return method; } if ( type.isPrimitive() && target == wrapper( type ) ) { return method; } } } } } //could not be found, try again with a more lax match String lax = lax(property); if (!lax.equals(property)) { return getter(clazz, lax, type); } return null; } /** * Reflectivley retreives a propety from a java bean. * * @param object The java bean. * @param property The property to retreive. * @param type Teh type of the property to retreive. * * @return The property, or null if it could not be found.. */ public static Object property(Object object, String property, Class type) { Method getter = getter(object.getClass(), property, type); if (getter != null) { try { return getter.invoke(object, null); } catch (Exception e) { //TODO: log this } } return null; } /** * Returns a method with a pariticular name of a class, ignoring method * paramters. * * @param clazz The class * @param name The name of the method. * * @return The method, or null if it could not be found. */ public static Method method(Class clazz, String name) { Method[] methods = clazz.getMethods(); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase(name)) { return method; } } return null; } /** * Returns an object of a particular type in a list of objects of * various types. * * @param parameters A list of objects, of various types. * @param type The type of paramter to be returned. * * @return The object of the specified type, or null */ public static Object parameter(Object[] parameters, Class type) { for (int i = 0; i < parameters.length; i++) { Object parameter = parameters[i]; if ((parameter != null) && type.isAssignableFrom(parameter.getClass())) { return parameter; } } return null; } /** * Returns the wrapper class for a primitive class. * * @param primitive A primtive class, like int.class, double.class, etc... */ static Class wrapper( Class primitive ) { if ( boolean.class == primitive ) { return Boolean.class; } if ( char.class == primitive ) { return Character.class; } if ( byte.class == primitive ) { return Byte.class; } if ( short.class == primitive ) { return Short.class; } if ( int.class == primitive ) { return Integer.class; } if ( long.class == primitive ) { return Long.class; } if ( float.class == primitive ) { return Float.class; } if ( double.class == primitive ) { return Double.class; } return null; } /** * Does some checks on the property name to turn it into a java bean property. *

* Checks include collapsing any "_" characters. *

*/ static String lax(String property) { return property.replaceAll("_", ""); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy