/************************************************************************************** * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * **************************************************************************************/ package com.espertech.esper.event.bean; import com.espertech.esper.event.EventPropertyType; import com.espertech.esper.event.property.GenericPropertyDesc; import com.espertech.esper.util.JavaClassHelper; import java.lang.reflect.Method; import java.lang.reflect.Field; /** * Encapsulates the event property information available after introspecting an event's class members * for getter methods. */ public class InternalEventPropDescriptor { private String propertyName; private Method readMethod; private Field accessorField; private EventPropertyType propertyType; /** * Ctor. * @param propertyName - name of property, from getter method * @param readMethod - read method to get value * @param propertyType - type of property */ public InternalEventPropDescriptor(String propertyName, Method readMethod, EventPropertyType propertyType) { this.propertyName = propertyName; this.readMethod = readMethod; this.propertyType = propertyType; } /** * Ctor. * @param propertyName - name of property, from getter method * @param accessorField - field to get value from * @param propertyType - type of property */ public InternalEventPropDescriptor(String propertyName, Field accessorField, EventPropertyType propertyType) { this.propertyName = propertyName; this.accessorField = accessorField; this.propertyType = propertyType; } /** * Return the property name, for mapped and indexed properties this is just the property name * without parantheses or brackets. * @return property name */ public String getPropertyName() { return propertyName; } /** * Returns an enum indicating the type of property: simple, mapped, indexed. * @return enum with property type info */ public EventPropertyType getPropertyType() { return propertyType; } /** * Returns the read method. Can return null if the property is backed by a field.. * @return read method of null if field property */ public Method getReadMethod() { return readMethod; } /** * Returns the accessor field. Can return null if the property is backed by a method. * @return accessor field of null if method property */ public Field getAccessorField() { return accessorField; } /** * Returns the type of the underlying method or field of the event property. * @return return type */ public Class getReturnType() { if (readMethod != null) { return readMethod.getReturnType(); } else { return accessorField.getType(); } } /** * Returns the type of the underlying method or field of the event property. * @return return type */ public GenericPropertyDesc getReturnTypeGeneric() { if (readMethod != null) { return new GenericPropertyDesc(readMethod.getReturnType(), JavaClassHelper.getGenericReturnType(readMethod, true)); } else { return new GenericPropertyDesc(accessorField.getType(), JavaClassHelper.getGenericFieldType(accessorField, true)); } } public String toString() { return "propertyName=" + propertyName + " readMethod=" + readMethod + " accessorField=" + accessorField + " propertyType=" + propertyType; } public boolean equals(Object other) { if (!(other instanceof InternalEventPropDescriptor)) { return false; } InternalEventPropDescriptor otherDesc = (InternalEventPropDescriptor) other; if (!otherDesc.propertyName.equals(propertyName)) { return false; } if ( ((otherDesc.readMethod == null) && (readMethod != null)) || ((otherDesc.readMethod != null) && (readMethod == null)) ) { return false; } if ((otherDesc.readMethod != null) && (readMethod != null) && (!otherDesc.readMethod.equals(readMethod))) { return false; } if ( ((otherDesc.accessorField == null) && (accessorField != null)) || ((otherDesc.accessorField != null) && (accessorField == null)) ) { return false; } if ((otherDesc.accessorField != null) && (accessorField != null) && (!otherDesc.accessorField.equals(accessorField))) { return false; } if (otherDesc.propertyType != propertyType) { return false; } return true; } public int hashCode() { return propertyName.hashCode(); } }