int SafeGetFilterPrecedence(OrchestrationStateQueryFilter filter)
        {
            if (!FilterPrecedenceMap.ContainsKey(filter.GetType()))
            {
                throw new InvalidOperationException("Unknown filter type: " + filter.GetType());
            }

            return(FilterPrecedenceMap[filter.GetType()]);
        }
Ejemplo n.º 2
0
        string GetSecondaryFilterExpression(OrchestrationStateQueryFilter filter)
        {
            string filterExpression;

            if (filter is OrchestrationStateInstanceFilter)
            {
                var typedFilter = filter as OrchestrationStateInstanceFilter;
                if (typedFilter.StartsWith)
                {
                    filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                     AzureTableConstants.InstanceQuerySecondaryFilterRangeTemplate,
                                                     typedFilter.InstanceId, ComputeNextKeyInRange(typedFilter.InstanceId));
                }
                else
                {
                    if (string.IsNullOrEmpty(typedFilter.ExecutionId))
                    {
                        filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                         AzureTableConstants.InstanceQuerySecondaryFilterTemplate, typedFilter.InstanceId);
                    }
                    else
                    {
                        filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                         AzureTableConstants.InstanceQuerySecondaryFilterExactTemplate, typedFilter.InstanceId,
                                                         typedFilter.ExecutionId);
                    }
                }
            }
            else if (filter is OrchestrationStateNameVersionFilter)
            {
                var typedFilter = filter as OrchestrationStateNameVersionFilter;
                if (typedFilter.Version == null)
                {
                    filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                     AzureTableConstants.NameVersionQuerySecondaryFilterTemplate, typedFilter.Name);
                }
                else
                {
                    filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                     AzureTableConstants.NameVersionQuerySecondaryFilterExactTemplate, typedFilter.Name,
                                                     typedFilter.Version);
                }
            }
            else if (filter is OrchestrationStateStatusFilter)
            {
                var typedFilter = filter as OrchestrationStateStatusFilter;
                var template    = AzureTableConstants.StatusQuerySecondaryFilterTemplate;
                filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                 template, comparisonOperatorMap[typedFilter.ComparisonType], typedFilter.Status);
            }
            else if (filter is OrchestrationStateTimeRangeFilter)
            {
                var typedFilter = filter as OrchestrationStateTimeRangeFilter;
                typedFilter.StartTime = ClipStartTime(typedFilter.StartTime);
                typedFilter.EndTime   = ClipEndTime(typedFilter.EndTime);

                string startTime = XmlConvert.ToString(typedFilter.StartTime, XmlDateTimeSerializationMode.RoundtripKind);
                string endTime   = XmlConvert.ToString(typedFilter.EndTime, XmlDateTimeSerializationMode.RoundtripKind);

                switch (typedFilter.FilterType)
                {
                case OrchestrationStateTimeRangeFilterType.OrchestrationCreatedTimeFilter:
                    filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                     AzureTableConstants.CreatedTimeRangeQuerySecondaryFilterTemplate, startTime, endTime);
                    break;

                case OrchestrationStateTimeRangeFilterType.OrchestrationCompletedTimeFilter:
                    filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                     AzureTableConstants.CompletedTimeRangeQuerySecondaryFilterTemplate, startTime, endTime);
                    break;

                case OrchestrationStateTimeRangeFilterType.OrchestrationLastUpdatedTimeFilter:
                    filterExpression = string.Format(CultureInfo.InvariantCulture,
                                                     AzureTableConstants.LastUpdatedTimeRangeQuerySecondaryFilterTemplate, startTime, endTime);
                    break;

                default:
                    throw new InvalidOperationException("Unsupported filter type: " +
                                                        typedFilter.FilterType.GetType());
                }
            }
            else
            {
                throw new InvalidOperationException("Unsupported filter type: " + filter.GetType());
            }

            return(filterExpression);
        }
        int SafeGetFilterPrecedence(OrchestrationStateQueryFilter filter)
        {
            if (!FilterPrecedenceMap.ContainsKey(filter.GetType()))
            {
                throw new InvalidOperationException("Unknown filter type: " + filter.GetType());
            }

            return FilterPrecedenceMap[filter.GetType()];
        }