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