public override EventBeanWriter GetWriter(string[] properties) { if (writablePropertyDescriptors == null) { InitializeWriters(); } var allSimpleProps = true; var writers = new ObjectArrayEventBeanPropertyWriter[properties.Length]; IList<int> indexes = new List<int>(); var indexesPerProperty = PropertiesIndexes; for (var 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] = (ObjectArrayEventBeanPropertyWriter) GetWriter(properties[i]); if (writers[i] == null) { return null; } allSimpleProps = false; } } if (allSimpleProps) { var propertyIndexes = CollectionUtil.IntArray(indexes); return new ObjectArrayEventBeanWriterSimpleProps(propertyIndexes); } return new ObjectArrayEventBeanWriterPerProp(writers); }
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(); }