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)); }
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)); } }