public override void Update(EventBean[] newData, EventBean[] oldData) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QViewProcessIRStream(this, _sortWindowViewFactory.ViewName, newData, oldData); } OneEventCollection removedEvents = null; // Remove old data if (oldData != null) { for (var i = 0; i < oldData.Length; i++) { var oldDataItem = oldData[i]; var sortValues = GetSortValues(oldDataItem); var result = CollectionUtil.RemoveEventByKeyLazyListMap(sortValues, oldDataItem, _sortedEvents); if (result) { _eventCount--; if (removedEvents == null) { removedEvents = new OneEventCollection(); } removedEvents.Add(oldDataItem); InternalHandleRemoved(sortValues, oldDataItem); } } } // Add new data if (newData != null) { for (var i = 0; i < newData.Length; i++) { var newDataItem = newData[i]; var sortValues = GetSortValues(newDataItem); CollectionUtil.AddEventByKeyLazyListMapFront(sortValues, newDataItem, _sortedEvents); _eventCount++; InternalHandleAdd(sortValues, newDataItem); } } // Remove data that sorts to the bottom of the window if (_eventCount > _sortWindowSize) { var removeCount = _eventCount - _sortWindowSize; for (var i = 0; i < removeCount; i++) { // Remove the last element of the last key - sort order is key and then natural order of arrival var lastKey = _sortedEvents.Keys.Last(); var lastEntry = _sortedEvents.Get(lastKey); if (lastEntry is IList <EventBean> ) { var events = (IList <EventBean>)lastEntry; var theEvent = events.DeleteAt(events.Count - 1); // remove oldest event, newest events are first in list _eventCount--; if (events.IsEmpty()) { _sortedEvents.Remove(lastKey); } if (removedEvents == null) { removedEvents = new OneEventCollection(); } removedEvents.Add(theEvent); InternalHandleRemoved(lastKey, theEvent); } else { var theEvent = (EventBean)lastEntry; _eventCount--; _sortedEvents.Remove(lastKey); if (removedEvents == null) { removedEvents = new OneEventCollection(); } removedEvents.Add(theEvent); InternalHandleRemoved(lastKey, theEvent); } } } // If there are child views, fireStatementStopped Update method if (_optionalSortedRandomAccess != null) { _optionalSortedRandomAccess.Refresh(_sortedEvents, _eventCount, _sortWindowSize); } if (HasViews) { EventBean[] expiredArr = null; if (removedEvents != null) { expiredArr = removedEvents.ToArray(); } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QViewIndicate(this, _sortWindowViewFactory.ViewName, newData, expiredArr); } UpdateChildren(newData, expiredArr); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AViewIndicate(); } } if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().AViewProcessIRStream(); } }
public override void Update( EventBean[] newData, EventBean[] oldData) { agentInstanceContext.AuditProvider.View(newData, oldData, agentInstanceContext, factory); agentInstanceContext.InstrumentationProvider.QViewProcessIRStream(factory, newData, oldData); OneEventCollection removedEvents = null; // Remove old data if (oldData != null) { for (var i = 0; i < oldData.Length; i++) { var oldDataItem = oldData[i]; var sortValues = GetSortValues(oldDataItem); var result = CollectionUtil.RemoveEventByKeyLazyListMap(sortValues, oldDataItem, sortedEvents); if (result) { eventCount--; if (removedEvents == null) { removedEvents = new OneEventCollection(); } removedEvents.Add(oldDataItem); InternalHandleRemoved(sortValues, oldDataItem); } } } // Add new data if (newData != null) { for (var i = 0; i < newData.Length; i++) { var newDataItem = newData[i]; var sortValues = GetSortValues(newDataItem); CollectionUtil.AddEventByKeyLazyListMapFront(sortValues, newDataItem, sortedEvents); eventCount++; InternalHandleAdd(sortValues, newDataItem); } } // Remove data that sorts to the bottom of the window if (eventCount > sortWindowSize) { var removeCount = eventCount - sortWindowSize; for (var i = 0; i < removeCount; i++) { // Remove the last element of the last key - sort order is key and then natural order of arrival var lastKey = sortedEvents.Keys.Last(); var lastEntry = sortedEvents.Get(lastKey); if (lastEntry is IList<EventBean>) { var events = (IList<EventBean>) lastEntry; var theEvent = events.DeleteAt(events.Count - 1); // remove oldest event, newest events are first in list eventCount--; if (events.IsEmpty()) { sortedEvents.Remove(lastKey); } if (removedEvents == null) { removedEvents = new OneEventCollection(); } removedEvents.Add(theEvent); InternalHandleRemoved(lastKey, theEvent); } else { var theEvent = (EventBean) lastEntry; eventCount--; sortedEvents.Remove(lastKey); if (removedEvents == null) { removedEvents = new OneEventCollection(); } removedEvents.Add(theEvent); InternalHandleRemoved(lastKey, theEvent); } } } // If there are child views, fireStatementStopped update method optionalSortedRandomAccess?.Refresh(sortedEvents, eventCount, sortWindowSize); if (child != null) { EventBean[] expiredArr = null; if (removedEvents != null) { expiredArr = removedEvents.ToArray(); } agentInstanceContext.InstrumentationProvider.QViewIndicate(factory, newData, expiredArr); child.Update(newData, expiredArr); agentInstanceContext.InstrumentationProvider.AViewIndicate(); } agentInstanceContext.InstrumentationProvider.AViewProcessIRStream(); }