/// <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); }
/// <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); }
/// <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)))); }
/// <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()); }
/// <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); }
/// <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); }
/// <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); } }
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])); }
public ItemVersion RulesMask(ItemVersion version) { var iv = new ItemVersion(Versioners.ToDictionary(vnr => vnr.VersionKey, vnr => vnr.NoRules ? version[vnr.VersionKey] : null)); return(iv); }