/* * ************************************************************************************* * 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.epl.enummethod.dot; import com.espertech.esper.epl.expression.ExprChainedSpec; import com.espertech.esper.event.EventAdapterService; import com.espertech.esper.event.bean.BeanEventType; import com.espertech.esper.util.JavaClassHelper; import java.lang.reflect.Method; import java.util.Collection; import java.util.List; public class ExprDotStaticMethodWrapFactory { public static ExprDotStaticMethodWrap make(Method method, EventAdapterService eventAdapterService, List<ExprChainedSpec> modifiedChain) { if (modifiedChain.isEmpty() || (!EnumMethodEnum.isEnumerationMethod(modifiedChain.get(0).getName()))) { return null; } if (method.getReturnType().isArray()) { Class componentType = method.getReturnType().getComponentType(); if (componentType == null || JavaClassHelper.isJavaBuiltinDataType(componentType)) { return new ExprDotStaticMethodWrapArrayScalar(method.getName(), componentType); } BeanEventType type = (BeanEventType) eventAdapterService.addBeanType(componentType.getName(), componentType, false, false, false); return new ExprDotStaticMethodWrapArrayEvents(eventAdapterService, type); } if (JavaClassHelper.isImplementsInterface(method.getReturnType(), Collection.class)) { Class genericType = JavaClassHelper.getGenericReturnType(method, true); if (genericType == null || JavaClassHelper.isJavaBuiltinDataType(genericType)) { return new ExprDotStaticMethodWrapCollection(method.getName(), genericType); } } if (JavaClassHelper.isImplementsInterface(method.getReturnType(), Iterable.class)) { Class genericType = JavaClassHelper.getGenericReturnType(method, true); if (genericType == null || JavaClassHelper.isJavaBuiltinDataType(genericType)) { return new ExprDotStaticMethodWrapIterableScalar(method.getName(), genericType); } BeanEventType type = (BeanEventType) eventAdapterService.addBeanType(genericType.getName(), genericType, false, false, false); return new ExprDotStaticMethodWrapIterableEvents(eventAdapterService, type); } return null; } }