Пример #1
0
        /// <summary>
        /// Create an ItemVersion with null values for all the keys applicable to a type
        /// </summary>
        /// <param name="type">The type for which to create the ItemVersion</param>
        /// <returns>ItemVersion with null values for all the keys applicable</returns>
        public ItemVersion VersionForType(Type type)
        {
            var iv = new ItemVersion(Versioners
                                     .Where(v => v.Versionable(type))
                                     .ToDictionary(vnr => vnr.VersionKey, vnr => (object)null));

            return(iv);
        }
Пример #2
0
        /// <summary>
        /// Make the ItemVersion applicable to a given type by removing any inapplicable keys
        /// </summary>
        /// <param name="version">The original ItemVersion</param>
        /// <param name="t">The type to which to make it applicable</param>
        /// <returns>The modified, applicable ItemVersion</returns>
        public ItemVersion GetApplicableVersion(ItemVersion version, Type t)
        {
            ItemVersion res = new ItemVersion(Versioners
                                              .Where(vnr => version.ContainsKey(vnr.VersionKey) && vnr.Versionable(t))
                                              .ToDictionary(vnr => vnr.VersionKey, vnr => version[vnr.VersionKey]));

            return(res);
        }
Пример #3
0
 /// <summary>
 /// The current version before any override
 /// </summary>
 /// <returns>Current version before override</returns>
 public ItemVersion DefaultCurrentVersion(RouteData rd = null)
 {
     if (rd == null)
     {
         rd = RequestContextManager.Instance.CurrentContext?.GetRouteData();
     }
     return(new ItemVersion(Versioners.ToDictionary(vnr => vnr.VersionKey, vnr => vnr.CurrentValue(VersioningMode.Current, rd))));
 }
Пример #4
0
 /// <summary>
 /// Get all the displays for all the keys in an ItemVersion
 /// </summary>
 /// <param name="version">The ItemVersion to display</param>
 /// <returns>The VersionDisplays for all the keys of the ItemVersion</returns>
 public List <VersionDisplay> DisplayVersion(ItemVersion version)
 {
     return(Versioners
            .OrderBy(v => v.VersionKey)
            .Where(v => version.ContainsKey(v.VersionKey))
            .Select(v => v.DisplayItemVersion(version))
            .Where(vi => vi != null && !string.IsNullOrEmpty(vi.Text))
            .ToList());
 }
Пример #5
0
        /// <summary>
        /// Get the ItemVersion of a container
        /// </summary>
        /// <param name="container">The container</param>
        /// <returns>The ItemVersion of the container</returns>
        public ItemVersion GetVersion(object container)
        {
            var version = new ItemVersion(Versioners
                                          .Select(vnr => new { vnr.VersionKey, val = vnr.GetItemValue(container) })
                                          .Where(vinfo => vinfo.val != ItemVersion.Unset)
                                          .ToDictionary(vinfo => vinfo.VersionKey, vinfo => vinfo.val));

            return(version);
        }
Пример #6
0
 /// <summary>
 /// Register a versioner to add a versioning system to the VersionManager
 /// </summary>
 /// <param name="name">The version key</param>
 /// <param name="isAddressable">Whether the versioning system is addressable (different version values can be accessed by changing url)</param>
 /// <param name="versioner">The Versioner for the versioning system</param>
 /// <param name="versions">All the valid version values for the versioning system (null if these are not limited)</param>
 public void RegisterVersion(
     Versioner versioner)
 {
     Versioners.Add(versioner);
     if (versioner.IsAddressable)
     {
         AddressableVersionKeys.Add(versioner.VersionKey);
     }
     else
     {
         UnaddressableVersionKeys.Add(versioner.VersionKey);
     }
     VersionLists.Add(versioner.VersionKey, versioner.AllVersionValues);
 }
Пример #7
0
 /// <summary>
 /// Register a versioner to add a versioning system to the VersionManager
 /// </summary>
 /// <param name="name">The version key</param>
 /// <param name="versioner">The Versioner for the versioning system</param>
 public void RegisterVersion(Versioner versioner)
 {
     Versioners.Add(versioner);
     if (versioner.IsAddressable)
     {
         AddressableVersionKeys.Add(versioner.VersionKey);
     }
     else
     {
         UnaddressableVersionKeys.Add(versioner.VersionKey);
     }
     if (!VersionLists.ContainsKey(versioner.VersionKey))
     {
         VersionLists.TryAdd(versioner.VersionKey, versioner.AllVersionValues);
     }
 }
Пример #8
0
        private ItemVersion GetCurrentVersion(RouteData rd)
        {
            if (Mode != VersioningMode.Current ||
                currentVersionInvalidated ||
                !RequestThreadCache.Current.ContainsKey(CurrentVersionKey + UniqueId))
            {
                ItemVersion iv = null;
                if (Mode == VersioningMode.All)
                {
                    iv = new ItemVersion();
                }
                else if (Mode == VersioningMode.Specific)
                {
                    iv = SpecificVersion;
                }
                else if (Mode == VersioningMode.Public)
                {
                    iv = new ItemVersion(Versioners.ToDictionary(vnr => vnr.VersionKey, vnr => vnr.PublicVersionValue));
                }
                else
                {
                    iv = DefaultCurrentVersion(rd);

                    var vOver = this.ClientVersionOverride;
                    if (vOver != null && vOver != iv)
                    {
                        var overridden = OverrideVersion(iv, vOver);
                        currentVersionIsOverridden = overridden != null;
                        iv = overridden ?? iv;
                    }
                    else
                    {
                        currentVersionIsOverridden = false;
                    }
                }

                if (Mode == VersioningMode.Current)
                {
                    RequestThreadCache.Current[CurrentVersionKey + UniqueId] = new ItemVersion(iv);
                }

                return(iv);
            }
            return(new ItemVersion((ItemVersion)RequestThreadCache.Current[CurrentVersionKey + UniqueId]));
        }
Пример #9
0
        public ItemVersion RulesMask(ItemVersion version)
        {
            var iv = new ItemVersion(Versioners.ToDictionary(vnr => vnr.VersionKey, vnr => vnr.NoRules ? version[vnr.VersionKey] : null));

            return(iv);
        }