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

com.espertech.esper.event.bean.PropertyListBuilderPublic Maven / Gradle / Ivy

Go to download

Complex event processing and event series analysis component

There is a newer version: 7.1.0
Show newest version
/**************************************************************************************
 * 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.client.ConfigurationEventTypeLegacy;
import com.espertech.esper.event.bean.InternalEventPropDescriptor;
import com.espertech.esper.event.bean.PropertyHelper;

import java.util.List;
import java.util.LinkedList;
import java.lang.reflect.Method;
import java.lang.reflect.Field;

/**
 * Implementation for a property list builder that considers any public method
 * and public field as the exposed event properties, plus any explicitly configured props.
 */
public class PropertyListBuilderPublic implements PropertyListBuilder
{
    private ConfigurationEventTypeLegacy legacyConfig;

    /**
     * Ctor.
     * @param legacyConfig configures legacy type
     */
    public PropertyListBuilderPublic(ConfigurationEventTypeLegacy legacyConfig)
    {
        if (legacyConfig == null)
        {
            throw new IllegalArgumentException("Required configuration not passed");
        }
        this.legacyConfig = legacyConfig;
    }

    public List assessProperties(Class clazz)
    {
        List result = new LinkedList();
        PropertyListBuilderExplicit.getExplicitProperties(result, clazz, legacyConfig);
        addPublicFields(result, clazz);
        addPublicMethods(result, clazz);
        return result;
    }

    private static void addPublicMethods(List result, Class clazz)
    {
        Method[] methods = clazz.getMethods();
        for (int i = 0; i < methods.length; i++)
        {
            if (methods[i].getReturnType() == void.class)
            {
                continue;
            }
            if (methods[i].getParameterTypes().length >= 2)
            {
                continue;
            }
            if (methods[i].getParameterTypes().length == 1)
            {
                Class parameterType = methods[i].getParameterTypes()[0];
                if ((parameterType != int.class) && ((parameterType != Integer.class)) &&
                    (parameterType != String.class))
                {
                    continue;
                }
            }

            InternalEventPropDescriptor desc = PropertyListBuilderExplicit.makeMethodDesc(methods[i], methods[i].getName());
            result.add(desc);
        }

        PropertyHelper.removeJavaProperties(result);
    }

    private static void addPublicFields(List result, Class clazz)
    {
        Field[] fields = clazz.getFields();
        for (int i = 0; i < fields.length; i++)
        {
            InternalEventPropDescriptor desc = PropertyListBuilderExplicit.makeFieldDesc(fields[i], fields[i].getName());
            result.add(desc);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy