/**************************************************************************************
* 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.property;
import com.espertech.esper.client.EventPropertyGetter;
import com.espertech.esper.event.EventAdapterService;
import com.espertech.esper.event.arr.ObjectArrayEventPropertyGetter;
import com.espertech.esper.event.arr.ObjectArrayIndexedPropertyGetter;
import com.espertech.esper.event.bean.BeanEventType;
import com.espertech.esper.event.bean.DynamicIndexedPropertyGetter;
import com.espertech.esper.event.map.MapEventPropertyGetter;
import com.espertech.esper.event.map.MapIndexedPropertyGetter;
import com.espertech.esper.event.xml.BaseXMLEventType;
import com.espertech.esper.event.xml.DOMIndexedGetter;
import com.espertech.esper.event.xml.SchemaElementComplex;
import com.espertech.esper.event.xml.SchemaItem;
import java.io.StringWriter;
import java.util.Map;
/**
* Represents a dynamic indexed property of a given name.
* <p>
* Dynamic properties always exist, have an Object type and are resolved to a method during runtime.
*/
public class DynamicIndexedProperty extends PropertyBase implements DynamicProperty
{
private final int index;
/**
* Ctor.
* @param propertyName is the property name
* @param index is the index of the array or indexed property
*/
public DynamicIndexedProperty(String propertyName, int index)
{
super(propertyName);
this.index = index;
}
public boolean isDynamic()
{
return true;
}
public String[] toPropertyArray()
{
return new String[] {this.getPropertyNameAtomic()};
}
public EventPropertyGetter getGetter(BeanEventType eventType, EventAdapterService eventAdapterService)
{
return new DynamicIndexedPropertyGetter(propertyNameAtomic, index, eventAdapterService);
}
public Class getPropertyType(BeanEventType eventType, EventAdapterService eventAdapterService)
{
return Object.class;
}
public GenericPropertyDesc getPropertyTypeGeneric(BeanEventType beanEventType, EventAdapterService eventAdapterService)
{
return GenericPropertyDesc.getObjectGeneric();
}
public Class getPropertyTypeMap(Map optionalMapPropTypes, EventAdapterService eventAdapterService)
{
return Object.class;
}
public MapEventPropertyGetter getGetterMap(Map optionalMapPropTypes, EventAdapterService eventAdapterService)
{
return new MapIndexedPropertyGetter(this.getPropertyNameAtomic(), index);
}
public ObjectArrayEventPropertyGetter getGetterObjectArray(Map<String, Integer> indexPerProperty, Map<String, Object> nestableTypes, EventAdapterService eventAdapterService) {
Integer propertyIndex = indexPerProperty.get(propertyNameAtomic);
return propertyIndex == null ? null : new ObjectArrayIndexedPropertyGetter(propertyIndex, index);
}
public void toPropertyEPL(StringWriter writer)
{
writer.append(propertyNameAtomic);
writer.append('[');
writer.append(Integer.toString(index));
writer.append(']');
writer.append('?');
}
public EventPropertyGetter getGetterDOM(SchemaElementComplex complexProperty, EventAdapterService eventAdapterService, BaseXMLEventType eventType, String propertyExpression)
{
return new DOMIndexedGetter(propertyNameAtomic, index, null);
}
public SchemaItem getPropertyTypeSchema(SchemaElementComplex complexProperty, EventAdapterService eventAdapterService)
{
return null; // dynamic properties always return Node
}
public EventPropertyGetter getGetterDOM()
{
return new DOMIndexedGetter(propertyNameAtomic, index, null);
}
}