private void InitializeFromState(EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextControllerState controllerState, int pathIdToUse, AgentInstanceSelector agentInstanceSelector) { var factoryContext = _factory.FactoryContext; var states = controllerState.States; var childContexts = ContextControllerStateUtil.GetChildContexts(factoryContext, pathIdToUse, states); var maxSubpathId = int.MinValue; foreach (var entry in childContexts) { var hashAlgoGeneratedId = (int?)_factory.Binding.ByteArrayToObject(entry.Value.Blob, null); // merge filter addendum, if any var filterAddendumToUse = _activationFilterAddendum; if (_factory.HasFiltersSpecsNestedContexts()) { filterAddendumToUse = _activationFilterAddendum != null?_activationFilterAddendum.DeepCopy() : new ContextInternalFilterAddendum(); _factory.PopulateContextInternalFilterAddendums(filterAddendumToUse, hashAlgoGeneratedId); } // check if exists already if (controllerState.IsImported) { var existingHandle = _partitionKeys.Get(hashAlgoGeneratedId.Value); if (existingHandle != null) { _activationCallback.ContextPartitionNavigate(existingHandle, this, controllerState, entry.Value.OptionalContextPartitionId.Value, filterAddendumToUse, agentInstanceSelector, entry.Value.Blob); continue; } } var properties = ContextPropertyEventType.GetHashBean(factoryContext.ContextName, hashAlgoGeneratedId.Value); var assignedSubPathId = !controllerState.IsImported ? entry.Key.SubPath : ++_currentSubpathId; var handle = _activationCallback.ContextPartitionInstantiate(entry.Value.OptionalContextPartitionId, assignedSubPathId, entry.Key.SubPath, this, optionalTriggeringEvent, optionalTriggeringPattern, hashAlgoGeneratedId, properties, controllerState, filterAddendumToUse, factoryContext.IsRecoveringResilient, entry.Value.State); _partitionKeys.Put(hashAlgoGeneratedId.Value, handle); if (entry.Key.SubPath > maxSubpathId) { maxSubpathId = assignedSubPathId; } } if (!controllerState.IsImported) { _currentSubpathId = maxSubpathId != int.MinValue ? maxSubpathId : 0; } }
private void InitializeFromState( EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextInternalFilterAddendum activationFilterAddendum, ContextControllerState controllerState, int pathIdToUse, AgentInstanceSelector agentInstanceSelector, bool loadingExistingState) { var states = controllerState.States; var childContexts = ContextControllerStateUtil.GetChildContexts( Factory.FactoryContext, pathIdToUse, states); int maxSubpathId = int.MinValue; foreach (var entry in childContexts) { var categoryNumber = (int)_factory.Binding.ByteArrayToObject(entry.Value.Blob, null); ContextDetailCategoryItem category = _factory.CategorySpec.Items[categoryNumber]; // merge filter addendum, if any var filterAddendumToUse = activationFilterAddendum; if (_factory.HasFiltersSpecsNestedContexts) { filterAddendumToUse = activationFilterAddendum != null ? activationFilterAddendum.DeepCopy() : new ContextInternalFilterAddendum(); _factory.PopulateContextInternalFilterAddendums(filterAddendumToUse, categoryNumber); } // check if exists already if (controllerState.IsImported) { var existingHandle = _handleCategories.Get(categoryNumber); if (existingHandle != null) { _activationCallback.ContextPartitionNavigate( existingHandle, this, controllerState, entry.Value.OptionalContextPartitionId.Value, filterAddendumToUse, agentInstanceSelector, entry.Value.Blob, loadingExistingState); continue; } } var context = ContextPropertyEventType.GetCategorizedBean(Factory.FactoryContext.ContextName, 0, category.Name); var contextPartitionId = entry.Value.OptionalContextPartitionId.Value; var assignedSubPathId = !controllerState.IsImported ? entry.Key.SubPath : ++_currentSubpathId; var handle = _activationCallback.ContextPartitionInstantiate( contextPartitionId, assignedSubPathId, entry.Key.SubPath, this, null, null, categoryNumber, context, controllerState, filterAddendumToUse, loadingExistingState || Factory.FactoryContext.IsRecoveringResilient, entry.Value.State); _handleCategories.Put(categoryNumber, handle); if (entry.Key.SubPath > maxSubpathId) { maxSubpathId = assignedSubPathId; } } if (!controllerState.IsImported) { _currentSubpathId = maxSubpathId != int.MinValue ? maxSubpathId : 0; } }
private void InitializeFromState( EventBean optionalTriggeringEvent, IDictionary <String, Object> optionalTriggeringPattern, ContextInternalFilterAddendum filterAddendum, ContextControllerState controllerState, int pathIdToUse, AgentInstanceSelector agentInstanceSelector, bool loadingExistingState) { var factoryContext = _factory.FactoryContext; var states = controllerState.States; // restart if there are states var maxSubpathId = int.MinValue; var childContexts = ContextControllerStateUtil.GetChildContexts(factoryContext, pathIdToUse, states); var eventAdapterService = _factory.FactoryContext.ServicesContext.EventAdapterService; foreach (var entry in childContexts) { var keys = (Object[])_factory.Binding.ByteArrayToObject(entry.Value.Blob, eventAdapterService); var mapKey = GetKeyObjectForLookup(keys); // merge filter addendum, if any var myFilterAddendum = _activationFilterAddendum; if (_factory.HasFiltersSpecsNestedContexts) { filterAddendum = _activationFilterAddendum != null ? _activationFilterAddendum.DeepCopy() : new ContextInternalFilterAddendum(); _factory.PopulateContextInternalFilterAddendums(filterAddendum, mapKey); } // check if exists already if (controllerState.IsImported) { var existingHandle = _partitionKeys.Get(mapKey); if (existingHandle != null) { _activationCallback.ContextPartitionNavigate( existingHandle, this, controllerState, entry.Value.OptionalContextPartitionId.Value, myFilterAddendum, agentInstanceSelector, entry.Value.Blob, loadingExistingState); continue; } } var props = ContextPropertyEventType.GetPartitionBean( factoryContext.ContextName, 0, mapKey, _factory.SegmentedSpec.Items[0].PropertyNames); var assignedSubpathId = !controllerState.IsImported ? entry.Key.SubPath : ++_currentSubpathId; var handle = _activationCallback.ContextPartitionInstantiate( entry.Value.OptionalContextPartitionId, assignedSubpathId, entry.Key.SubPath, this, optionalTriggeringEvent, optionalTriggeringPattern, mapKey, props, controllerState, myFilterAddendum, loadingExistingState || factoryContext.IsRecoveringResilient, entry.Value.State); _partitionKeys.Put(mapKey, handle); if (entry.Key.SubPath > maxSubpathId) { maxSubpathId = assignedSubpathId; } } if (!controllerState.IsImported) { _currentSubpathId = maxSubpathId != int.MinValue ? maxSubpathId : 0; } }