Example #1
0
        /// <summary>
        /// Gets the capablities from the <see cref="IEdmModel"/> for the given <see cref="IEdmVocabularyAnnotatable"/>.
        /// </summary>
        /// <param name="model">The Edm model.</param>
        /// <param name="target">The target.</param>
        /// <param name="kind">Thye Capabilites kind.</param>
        /// <returns>The capabilities restrictions or null.</returns>
        private static ICapablitiesRestrictions GetCapabilities(this IEdmModel model, IEdmVocabularyAnnotatable target, CapabilitesTermKind kind)
        {
            if (model == null || target == null)
            {
                return(null);
            }

            lock (_objectLock)
            {
                if (!ReferenceEquals(_savedModel, model))
                {
                    if (_capabilitesRestrictions != null)
                    {
                        _capabilitesRestrictions.Clear();
                    }
                    _savedModel = model;
                }

                if (_capabilitesRestrictions == null)
                {
                    _capabilitesRestrictions = new Dictionary <IEdmVocabularyAnnotatable, IDictionary <CapabilitesTermKind, ICapablitiesRestrictions> >();
                }

                ICapablitiesRestrictions restriction;
                if (_capabilitesRestrictions.TryGetValue(target, out IDictionary <CapabilitesTermKind, ICapablitiesRestrictions> value))
                {
                    // Here means we visited target before and we are sure that the value is not null.
                    if (value.TryGetValue(kind, out restriction))
                    {
                        return(restriction);
                    }
                    else
                    {
                        restriction = CreateCapabilitesRestrictions(model, target, kind);
                        value[kind] = restriction;
                        return(restriction);
                    }
                }

                // It's first time to query this target, create new dictionary and restriction.
                value = new Dictionary <CapabilitesTermKind, ICapablitiesRestrictions>();
                _capabilitesRestrictions[target] = value;
                restriction = CreateCapabilitesRestrictions(model, target, kind);
                value[kind] = restriction;
                return(restriction);
            }
        }
Example #2
0
        /// <summary>
        /// Create the capabiliites restriction
        /// </summary>
        /// <param name="model">The Edm model.</param>
        /// <param name="target">The Target.</param>
        /// <param name="kind">The Capabiliites kind.</param>
        /// <returns>The <see cref="ICapablitiesRestrictions"/>.</returns>
        public static ICapablitiesRestrictions CreateCapabilitesRestrictions(this IEdmModel model, IEdmVocabularyAnnotatable target, CapabilitesTermKind kind)
        {
            Debug.Assert(model != null);
            Debug.Assert(target != null);

            ICapablitiesRestrictions capabilitiesRestrictions = null;

            switch (kind)
            {
            case CapabilitesTermKind.DeleteRestrictions:     // DeleteRestrictions
                capabilitiesRestrictions = new DeleteRestrictions();
                break;

            case CapabilitesTermKind.UpdateRestrictions:     // UpdateRestrictions
                capabilitiesRestrictions = new UpdateRestrictions();
                break;

            case CapabilitesTermKind.InsertRestrictions:     // InsertRestrictions
                capabilitiesRestrictions = new InsertRestrictions();
                break;

            case CapabilitesTermKind.SearchRestrictions:     // SearchRestrictions
                capabilitiesRestrictions = new SearchRestrictions();
                break;

            case CapabilitesTermKind.ExpandRestrictions:     // ExpandRestrictions
                capabilitiesRestrictions = new ExpandRestrictions();
                break;

            case CapabilitesTermKind.SortRestrictions:     // SortRestrictions
                capabilitiesRestrictions = new SortRestrictions();
                break;

            case CapabilitesTermKind.FilterRestrictions:     // FilterRestrictions
                capabilitiesRestrictions = new FilterRestrictions();
                break;

            case CapabilitesTermKind.NavigationRestrictions:     // NavigationRestrictions
                capabilitiesRestrictions = new NavigationRestrictions();
                break;

            case CapabilitesTermKind.CountRestrictions:     // CountRestrictions
                capabilitiesRestrictions = new CountRestrictions();
                break;

            case CapabilitesTermKind.BatchSupported:     // BatchSupported
                capabilitiesRestrictions = new BatchSupported();
                break;

            case CapabilitesTermKind.SkipSupported:     // SkipSupported
                capabilitiesRestrictions = new SkipSupported();
                break;

            case CapabilitesTermKind.TopSupported:     // TopSupported
                capabilitiesRestrictions = new TopSupported();
                break;

            case CapabilitesTermKind.KeyAsSegmentSupported:     // KeyAsSegmentSupported
                capabilitiesRestrictions = new KeyAsSegmentSupported();
                break;

            case CapabilitesTermKind.IndexableByKey:     // IndexableByKey
                capabilitiesRestrictions = new IndexableByKey();
                break;

            case CapabilitesTermKind.ChangeTracking:                // ChangeTracking
            case CapabilitesTermKind.CrossJoinSupported:            // CrossJoinSupported
            case CapabilitesTermKind.CallbackSupported:             // CallbackSupported
            case CapabilitesTermKind.FilterFunctions:               // FilterFunctions
            case CapabilitesTermKind.BatchContinueOnErrorSupported: // BatchContinueOnErrorSupported
            case CapabilitesTermKind.AsynchronousRequestsSupported: // AsynchronousRequestsSupported
            case CapabilitesTermKind.Isolation:                     // Isolation
            case CapabilitesTermKind.AcceptableEncodings:           // AcceptableEncodings
            case CapabilitesTermKind.SupportedFormats:              // SupportedFormats
            default:
                throw Error.NotSupported(String.Format(SRResource.CapabilitiesKindNotSupported, kind));
            }

            // load the annotation value
            if (!capabilitiesRestrictions.Load(model, target))
            {
                return(null);
            }

            return(capabilitiesRestrictions);
        }