Пример #1
0
        public override EventPropertyWriterSPI GetWriter(string propertyName)
        {
            if (writablePropertyDescriptors == null) {
                InitializeWriters();
            }

            var pair = propertyWriters.Get(propertyName);
            if (pair != null) {
                return pair.Second;
            }

            var property = PropertyParser.ParseAndWalkLaxToSimple(propertyName);
            if (property is MappedProperty) {
                var mapProp = (MappedProperty) property;
                if (!PropertiesIndexes.TryGetValue(mapProp.PropertyNameAtomic, out var index)) {
                    return null;
                }

                return new ObjectArrayEventBeanPropertyWriterMapProp(index, mapProp.Key);
            }

            if (property is IndexedProperty) {
                var indexedProp = (IndexedProperty) property;
                if (!PropertiesIndexes.TryGetValue(indexedProp.PropertyNameAtomic, out var index)) {
                    return null;
                }

                return new ObjectArrayEventBeanPropertyWriterIndexedProp(index, indexedProp.Index);
            }

            return null;
        }
Пример #2
0
        public override EventPropertyWriter GetWriter(String propertyName)
        {
            if (_writablePropertyDescriptors == null)
            {
                InitializeWriters();
            }
            Pair <EventPropertyDescriptor, ObjectArrayEventBeanPropertyWriter> pair = _propertyWriters.Get(propertyName);

            if (pair != null)
            {
                return(pair.Second);
            }

            Property property = PropertyParser.ParseAndWalk(propertyName, false);

            if (property is MappedProperty)
            {
                var mapProp = (MappedProperty)property;

                int index;
                if (!PropertiesIndexes.TryGetValue(mapProp.PropertyNameAtomic, out index))
                {
                    return(null);
                }
                return(new ObjectArrayEventBeanPropertyWriterMapProp(index, mapProp.Key));
            }

            if (property is IndexedProperty)
            {
                var indexedProp = (IndexedProperty)property;

                int index;
                if (!PropertiesIndexes.TryGetValue(indexedProp.PropertyNameAtomic, out index))
                {
                    return(null);
                }

                return(new ObjectArrayEventBeanPropertyWriterIndexedProp(index, indexedProp.Index));
            }

            return(null);
        }
Пример #3
0
        private void InitializeWriters()
        {
            IList<EventPropertyDescriptor> writeableProps = new List<EventPropertyDescriptor>();
            IDictionary<string, Pair<EventPropertyDescriptor, ObjectArrayEventBeanPropertyWriter>> propertyWritersMap =
                new Dictionary<string, Pair<EventPropertyDescriptor, ObjectArrayEventBeanPropertyWriter>>();
            foreach (var prop in PropertyDescriptors) {
                writeableProps.Add(prop);
                var propertyName = prop.PropertyName;
                if (!PropertiesIndexes.TryGetValue(prop.PropertyName, out var index)) {
                    continue;
                }

                var eventPropertyWriter = new ObjectArrayEventBeanPropertyWriter(index);
                propertyWritersMap.Put(
                    propertyName,
                    new Pair<EventPropertyDescriptor, ObjectArrayEventBeanPropertyWriter>(prop, eventPropertyWriter));
            }

            propertyWriters = propertyWritersMap;
            writablePropertyDescriptors = writeableProps.ToArray();
        }