示例#1
0
        public void VisitSelectedPartitions(ContextPartitionSelector contextPartitionSelector, ContextPartitionVisitor visitor)
        {
            int nestingLevel = _factory.FactoryContext.NestingLevel;

            if (contextPartitionSelector is ContextPartitionSelectorHash)
            {
                var hash = (ContextPartitionSelectorHash)contextPartitionSelector;
                if (hash.Hashes == null || hash.Hashes.IsEmpty())
                {
                    return;
                }
                foreach (int hashCode in hash.Hashes)
                {
                    var handle = _partitionKeys.Get(hashCode);
                    if (handle != null)
                    {
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, hashCode, this, handle);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorFiltered)
            {
                var filter         = (ContextPartitionSelectorFiltered)contextPartitionSelector;
                var identifierHash = new ContextPartitionIdentifierHash();
                foreach (var entry in _partitionKeys)
                {
                    identifierHash.Hash = entry.Key;
                    identifierHash.ContextPartitionId = entry.Value.ContextPartitionOrPathId;
                    if (filter.Filter(identifierHash))
                    {
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, entry.Key, this, entry.Value);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorAll)
            {
                foreach (var entry in _partitionKeys)
                {
                    visitor.Visit(nestingLevel, _pathId, _factory.Binding, entry.Key, this, entry.Value);
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorById)
            {
                var byId = (ContextPartitionSelectorById)contextPartitionSelector;
                foreach (var entry in _partitionKeys)
                {
                    int cpid = entry.Value.ContextPartitionOrPathId;
                    if (byId.ContextPartitionIds.Contains(cpid))
                    {
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, entry.Key, this, entry.Value);
                    }
                }
                return;
            }
            throw ContextControllerSelectorUtil.GetInvalidSelector(new Type[] { typeof(ContextPartitionSelectorHash) }, contextPartitionSelector);
        }
        public void VisitSelectedPartitions(ContextPartitionSelector contextPartitionSelector, ContextPartitionVisitor visitor)
        {
            var nestingLevel = _factory.FactoryContext.NestingLevel;

            if (contextPartitionSelector is ContextPartitionSelectorFiltered filtered)
            {
                var identifier = new ContextPartitionIdentifierPartitioned();
                foreach (var entry in _partitionKeys)
                {
                    identifier.ContextPartitionId = entry.Value.ContextPartitionOrPathId;
                    var identifierOA = GetKeyObjectsAccountForMultikey(entry.Key);
                    identifier.Keys = identifierOA;

                    if (filtered.Filter(identifier))
                    {
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, identifierOA, this, entry.Value);
                    }
                }
                return;
            }
            else if (contextPartitionSelector is ContextPartitionSelectorSegmented partitioned)
            {
                if (partitioned.PartitionKeys?.IsEmpty() != false)
                {
                    return;
                }
                foreach (var keyObjects in partitioned.PartitionKeys)
                {
                    var key            = GetKeyObjectForLookup(keyObjects);
                    var instanceHandle = _partitionKeys.Get(key);
                    if (instanceHandle != null)
                    {
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, keyObjects, this, instanceHandle);
                    }
                }
                return;
            }
            else if (contextPartitionSelector is ContextPartitionSelectorById filteredById)
            {
                foreach (var entry in _partitionKeys)
                {
                    if (filteredById.ContextPartitionIds.Contains(entry.Value.ContextPartitionOrPathId))
                    {
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, GetKeyObjectsAccountForMultikey(entry.Key), this, entry.Value);
                    }
                }
                return;
            }
            else if (contextPartitionSelector is ContextPartitionSelectorAll)
            {
                foreach (var entry in _partitionKeys)
                {
                    visitor.Visit(nestingLevel, _pathId, _factory.Binding, GetKeyObjectsAccountForMultikey(entry.Key), this, entry.Value);
                }
                return;
            }
            throw ContextControllerSelectorUtil.GetInvalidSelector(new Type[] { typeof(ContextPartitionSelectorSegmented) }, contextPartitionSelector);
        }
示例#3
0
        public void VisitSelectedPartitions(ContextPartitionSelector contextPartitionSelector, ContextPartitionVisitor visitor)
        {
            var nestingLevel = _factory.FactoryContext.NestingLevel;

            if (contextPartitionSelector is ContextPartitionSelectorFiltered)
            {
                var filter     = (ContextPartitionSelectorFiltered)contextPartitionSelector;
                var identifier = new ContextPartitionIdentifierInitiatedTerminated();
                foreach (var entry in EndConditions)
                {
                    identifier.EndTime            = entry.Value.EndTime;
                    identifier.StartTime          = entry.Value.StartTime;
                    identifier.Properties         = entry.Value.StartProperties;
                    identifier.ContextPartitionId = entry.Value.InstanceHandle.ContextPartitionOrPathId;
                    if (filter.Filter(identifier))
                    {
                        var state = new ContextControllerInitTermState(_factory.FactoryContext.ServicesContext.SchedulingService.Time, entry.Value.StartProperties);
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, state, this, entry.Value.InstanceHandle);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorById)
            {
                var filter = (ContextPartitionSelectorById)contextPartitionSelector;
                foreach (var entry in EndConditions)
                {
                    if (filter.ContextPartitionIds.Contains(entry.Value.InstanceHandle.ContextPartitionOrPathId))
                    {
                        var state = new ContextControllerInitTermState(_factory.FactoryContext.ServicesContext.SchedulingService.Time, entry.Value.StartProperties);
                        visitor.Visit(nestingLevel, _pathId, _factory.Binding, state, this, entry.Value.InstanceHandle);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorAll)
            {
                foreach (var entry in EndConditions)
                {
                    var state = new ContextControllerInitTermState(_factory.FactoryContext.ServicesContext.SchedulingService.Time, entry.Value.StartProperties);
                    visitor.Visit(nestingLevel, _pathId, _factory.Binding, state, this, entry.Value.InstanceHandle);
                }
                return;
            }
            throw ContextControllerSelectorUtil.GetInvalidSelector(new Type[0], contextPartitionSelector);
        }
        public void VisitSelectedPartitions(
            ContextPartitionSelector contextPartitionSelector,
            ContextPartitionVisitor visitor)
        {
            var nestingLevel = Factory.FactoryContext.NestingLevel;

            if (contextPartitionSelector is ContextPartitionSelectorFiltered)
            {
                var filter     = (ContextPartitionSelectorFiltered)contextPartitionSelector;
                var identifier = new ContextPartitionIdentifierCategory();
                foreach (var entry in _handleCategories)
                {
                    identifier.ContextPartitionId = entry.Value.ContextPartitionOrPathId;
                    var categoryName = _factory.CategorySpec.Items[entry.Key].Name;
                    identifier.Label = categoryName;
                    if (filter.Filter(identifier))
                    {
                        visitor.Visit(nestingLevel, PathId, _factory.Binding, entry.Key, this, entry.Value);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorCategory)
            {
                var category = (ContextPartitionSelectorCategory)contextPartitionSelector;
                if (category.Labels == null || category.Labels.IsEmpty())
                {
                    return;
                }
                foreach (var entry in _handleCategories)
                {
                    String categoryName = _factory.CategorySpec.Items[entry.Key].Name;
                    if (category.Labels.Contains(categoryName))
                    {
                        visitor.Visit(nestingLevel, PathId, _factory.Binding, entry.Key, this, entry.Value);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorById)
            {
                var byId = (ContextPartitionSelectorById)contextPartitionSelector;
                foreach (var entry in _handleCategories)
                {
                    var cpid = entry.Value.ContextPartitionOrPathId;
                    if (byId.ContextPartitionIds.Contains(cpid))
                    {
                        visitor.Visit(nestingLevel, PathId, _factory.Binding, entry.Key, this, entry.Value);
                    }
                }
                return;
            }
            if (contextPartitionSelector is ContextPartitionSelectorAll)
            {
                foreach (var entry in _handleCategories)
                {
                    var categoryName = _factory.CategorySpec.Items[entry.Key].Name;
                    visitor.Visit(nestingLevel, PathId, _factory.Binding, entry.Key, this, entry.Value);
                }
                return;
            }
            throw ContextControllerSelectorUtil.GetInvalidSelector(
                      new Type[]
            {
                typeof(ContextPartitionSelectorCategory)
            }, contextPartitionSelector);
        }