Пример #1
0
        public override EventBeanWriter GetWriter(String[] properties)
        {
            if (_writablePropertyDescriptors == null)
            {
                InitializeWriters();
            }

            var allSimpleProps     = true;
            var writers            = new ObjectArrayEventBeanPropertyWriter[properties.Length];
            var indexes            = new List <int>();
            var indexesPerProperty = PropertiesIndexes;

            for (int i = 0; i < properties.Length; i++)
            {
                var writerPair = _propertyWriters.Get(properties[i]);
                if (writerPair != null)
                {
                    writers[i] = writerPair.Second;
                    indexes.Add(indexesPerProperty.Get(writerPair.First.PropertyName));
                }
                else
                {
                    writers[i] = GetWriter(properties[i]) as ObjectArrayEventBeanPropertyWriter;
                    if (writers[i] == null)
                    {
                        return(null);
                    }
                    allSimpleProps = false;
                }
            }

            if (allSimpleProps)
            {
                int[] propertyIndexes = CollectionUtil.IntArray(indexes);
                return(new ObjectArrayEventBeanWriterSimpleProps(propertyIndexes));
            }
            else
            {
                return(new ObjectArrayEventBeanWriterPerProp(writers));
            }
        }
Пример #2
0
        private void InitializeWriters()
        {
            var writeableProps    = new List <EventPropertyDescriptor>();
            var propertWritersMap = new Dictionary <String, Pair <EventPropertyDescriptor, ObjectArrayEventBeanPropertyWriter> >();

            foreach (var prop in PropertyDescriptors)
            {
                writeableProps.Add(prop);
                var propertyName = prop.PropertyName;
                int index;

                if (!PropertiesIndexes.TryGetValue(prop.PropertyName, out index))
                {
                    continue;
                }

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

            _propertyWriters             = propertWritersMap;
            _writablePropertyDescriptors = writeableProps.ToArray();
        }