Ejemplo n.º 1
0
 /// <summary>
 ///     NOTE: Code-generation-invoked method, method name and parameter order matters
 /// </summary>
 /// <param name="eventBean">bean</param>
 /// <param name="propertyGetterCache">cache</param>
 /// <param name="propertyName">name</param>
 /// <returns>value</returns>
 public static bool VariantExists(
     EventBean eventBean,
     VariantPropertyGetterCache propertyGetterCache,
     string propertyName)
 {
     var variant = (VariantEvent) eventBean;
     var getter = propertyGetterCache.GetGetter(propertyName, variant.UnderlyingEventBean.EventType);
     return getter != null && getter.IsExistsProperty(variant.UnderlyingEventBean);
 }
Ejemplo n.º 2
0
        /// <summary>
        ///     NOTE: Code-generation-invoked method, method name and parameter order matters
        /// </summary>
        /// <param name="eventBean">bean</param>
        /// <param name="propertyGetterCache">cache</param>
        /// <param name="propertyName">name</param>
        /// <returns>value</returns>
        /// <throws>PropertyAccessException ex</throws>
        public static object VariantGet(
            EventBean eventBean,
            VariantPropertyGetterCache propertyGetterCache,
            string propertyName)
        {
            var variant = (VariantEvent) eventBean;
            var getter = propertyGetterCache.GetGetter(propertyName, variant.UnderlyingEventBean.EventType);

            var result = getter?.Get(variant.UnderlyingEventBean);
            return result;
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     Ctor.
        /// </summary>
        /// <param name="variantSpec">the variant specification</param>
        /// <param name="metadata">event type metadata</param>
        public VariantEventType(
            EventTypeMetadata metadata,
            VariantSpec variantSpec)
        {
            Metadata = metadata;
            Variants = variantSpec.EventTypes;
            IsVariantAny = variantSpec.TypeVariance == TypeVariance.ANY;
            VariantPropertyGetterCache = new VariantPropertyGetterCache(variantSpec.EventTypes);
            if (IsVariantAny) {
                propertyResStrategy = new VariantPropResolutionStrategyAny(this);
            }
            else {
                propertyResStrategy = new VariantPropResolutionStrategyDefault(this);
            }

            propertyDesc = new Dictionary<string, VariantPropertyDesc>();

            foreach (var type in Variants) {
                foreach (var property in CollectionUtil.CopyAndSort(type.PropertyNames)) {
                    if (!propertyDesc.ContainsKey(property)) {
                        FindProperty(property);
                    }
                }
            }

            var propertyNameKeySet = propertyDesc.Keys;
            PropertyNames = propertyNameKeySet.ToArray();

            // for each of the properties in each type, attempt to load the property to build a property list
            PropertyDescriptors = new EventPropertyDescriptor[propertyDesc.Count];
            propertyDescriptorMap = new Dictionary<string, EventPropertyDescriptor>();
            var count = 0;
            foreach (var desc in propertyDesc) {
                var type = desc.Value.PropertyType;
                var descriptor = new EventPropertyDescriptor(
                    desc.Key,
                    type,
                    type.GetIndexType(),
                    false,
                    false,
                    type.IsIndexed(),
                    false,
                    desc.Value.PropertyType.IsFragmentableType());
                PropertyDescriptors[count++] = descriptor;
                propertyDescriptorMap.Put(desc.Key, descriptor);
            }
        }