Ejemplo n.º 1
0
        public override EventPropertyGetter GetGetter(BeanEventType eventType, EventAdapterService eventAdapterService)
        {
            var propertyDesc = eventType.GetSimpleProperty(PropertyNameAtomic);

            if (propertyDesc == null)
            {
                return(null);
            }
            if (!propertyDesc.PropertyType.Equals(EventPropertyType.SIMPLE))
            {
                return(null);
            }
            return(eventType.GetGetter(PropertyNameAtomic));
        }
Ejemplo n.º 2
0
        public MapEventPropertyGetter GetGetterMap(Map optionalMapPropTypes, EventAdapterService eventAdapterService)
        {
            var getters           = new List <EventPropertyGetter>();
            var currentDictionary = optionalMapPropTypes;

            int count = 0;

            for (var it = Properties.EnumerateWithLookahead(); it.HasNext();)
            {
                count++;
                Property property = it.Next();

                // manufacture a getter for getting the item out of the map
                EventPropertyGetter getter = property.GetGetterMap(currentDictionary, eventAdapterService);
                if (getter == null)
                {
                    return(null);
                }
                getters.Add(getter);

                var @base        = (PropertyBase)property;
                var propertyName = @base.PropertyNameAtomic;

                // For the next property if there is one, check how to property type is defined
                if (!it.HasNext())
                {
                    continue;
                }

                if (currentDictionary != null)
                {
                    // check the type that this property will return
                    Object propertyReturnType = currentDictionary.Get(propertyName);

                    if (propertyReturnType == null)
                    {
                        currentDictionary = null;
                    }
                    if (propertyReturnType != null)
                    {
                        if (propertyReturnType is Map)
                        {
                            currentDictionary = (Map)propertyReturnType;
                        }
                        else if (ReferenceEquals(propertyReturnType, typeof(Map)))
                        {
                            currentDictionary = null;
                        }
                        else if (propertyReturnType is String)
                        {
                            String nestedName = propertyReturnType.ToString();
                            bool   isArray    = EventTypeUtility.IsPropertyArray(nestedName);
                            if (isArray)
                            {
                                nestedName = EventTypeUtility.GetPropertyRemoveArray(nestedName);
                            }

                            EventType innerType = eventAdapterService.GetEventTypeByName(nestedName);
                            if (innerType == null)
                            {
                                return(null);
                            }

                            String remainingProps           = ToPropertyEPL(Properties, count);
                            EventPropertyGetter getterInner = innerType.GetGetter(remainingProps);
                            if (getterInner == null)
                            {
                                return(null);
                            }

                            getters.Add(getterInner);
                            break; // the single getter handles the rest
                        }
                        else if (propertyReturnType is EventType)
                        {
                            var innerType      = (EventType)propertyReturnType;
                            var remainingProps = ToPropertyEPL(Properties, count);
                            var getterInner    = innerType.GetGetter(remainingProps);
                            if (getterInner == null)
                            {
                                return(null);
                            }

                            getters.Add(getterInner);
                            break; // the single getter handles the rest
                        }
                        else
                        {
                            // treat the return type of the map property as an object
                            var returnType = (Type)propertyReturnType;
                            if (!returnType.IsArray)
                            {
                                BeanEventType beanType =
                                    eventAdapterService.BeanEventTypeFactory.CreateBeanType(returnType.Name, returnType,
                                                                                            false, false, false);
                                String remainingProps           = ToPropertyEPL(Properties, count);
                                EventPropertyGetter getterInner = beanType.GetGetter(remainingProps);
                                if (getterInner == null)
                                {
                                    return(null);
                                }
                                getters.Add(getterInner);
                                break; // the single getter handles the rest
                            }
                            else
                            {
                                Type          componentType = returnType.GetElementType();
                                BeanEventType beanType      = eventAdapterService.BeanEventTypeFactory.CreateBeanType(
                                    componentType.Name, componentType, false, false, false);
                                String remainingProps           = ToPropertyEPL(Properties, count);
                                EventPropertyGetter getterInner = beanType.GetGetter(remainingProps);
                                if (getterInner == null)
                                {
                                    return(null);
                                }
                                getters.Add(getterInner);
                                break; // the single pono getter handles the rest
                            }
                        }
                    }
                }
            }

            var hasNonmapGetters = false;

            for (int i = 0; i < getters.Count; i++)
            {
                if (!(getters[i] is MapEventPropertyGetter))
                {
                    hasNonmapGetters = true;
                }
            }
            if (!hasNonmapGetters)
            {
                return(new MapNestedPropertyGetterMapOnly(getters, eventAdapterService));
            }
            else
            {
                return(new MapNestedPropertyGetterMixedType(getters, eventAdapterService));
            }
        }