public override EventBeanWriter GetWriter(string[] properties) { if (_writablePropertyDescriptors == null) { InitializeWriters(); } var allSimpleProps = true; var writers = new MapEventBeanPropertyWriter[properties.Length]; for (var i = 0; i < properties.Length; i++) { var writerPair = _propertyWriters.Get(properties[i]); if (writerPair != null) { writers[i] = writerPair.Second; } else { writers[i] = (MapEventBeanPropertyWriter) GetWriter(properties[i]); if (writers[i] == null) { return null; } allSimpleProps = false; } } if (allSimpleProps) { return new MapEventBeanWriterSimpleProps(properties); } return new MapEventBeanWriterPerProp(writers); }
private void InitializeWriters() { IList<EventPropertyDescriptor> writeableProps = new List<EventPropertyDescriptor>(); IDictionary<string, Pair<EventPropertyDescriptor, MapEventBeanPropertyWriter>> propertWritersMap = new Dictionary<string, Pair<EventPropertyDescriptor, MapEventBeanPropertyWriter>>(); foreach (var prop in PropertyDescriptors) { writeableProps.Add(prop); var propertyName = prop.PropertyName; var eventPropertyWriter = new MapEventBeanPropertyWriter(propertyName); propertWritersMap.Put( propertyName, new Pair<EventPropertyDescriptor, MapEventBeanPropertyWriter>(prop, eventPropertyWriter)); } _propertyWriters = propertWritersMap; _writablePropertyDescriptors = writeableProps.ToArray(); }