/********************************************************************++ Copyright (c) Microsoft Corporation. All rights reserved. --********************************************************************/ using System.Management.Automation.Internal; using System.Globalization; using System.Diagnostics; using System.Text; using System.Collections.ObjectModel; namespace System.Management.Automation.Help { /// /// Represents each supported culture /// internal class CultureSpecificUpdatableHelp { /// /// Class constructor /// /// culture info /// version info internal CultureSpecificUpdatableHelp(CultureInfo culture, Version version) { Debug.Assert(version != null); Debug.Assert(culture != null); Culture = culture; Version = version; } /// /// Culture version /// internal Version Version { get; set; } /// /// Supported culture /// internal CultureInfo Culture { get; set; } } /// /// This class represents the HelpInfo metadata XML /// internal class UpdatableHelpInfo { /// /// Class constructor /// /// unresolved help content URI /// supported UI cultures internal UpdatableHelpInfo(string unresolvedUri, CultureSpecificUpdatableHelp[] cultures) { Debug.Assert(cultures != null); UnresolvedUri = unresolvedUri; HelpContentUriCollection = new Collection(); UpdatableHelpItems = cultures; } /// /// Unresolved URI /// internal string UnresolvedUri { get; } /// /// Link to the actual help content /// internal Collection HelpContentUriCollection { get; } /// /// Supported UI cultures /// internal CultureSpecificUpdatableHelp[] UpdatableHelpItems { get; } /// /// Checks if the other HelpInfo has a newer version /// /// HelpInfo object to check /// culture to check /// true if the other HelpInfo is newer, false if not internal bool IsNewerVersion(UpdatableHelpInfo helpInfo, CultureInfo culture) { Debug.Assert(helpInfo != null); Version v1 = helpInfo.GetCultureVersion(culture); Version v2 = GetCultureVersion(culture); Debug.Assert(v1 != null); if (v2 == null) { return true; } return v1 > v2; ; } /// /// Checks if a culture is supported /// /// culture to check /// true if supported, false if not internal bool IsCultureSupported(CultureInfo culture) { Debug.Assert(culture != null); foreach (CultureSpecificUpdatableHelp updatableHelpItem in UpdatableHelpItems) { if (String.Compare(updatableHelpItem.Culture.Name, culture.Name, StringComparison.OrdinalIgnoreCase) == 0) { return true; } } return false; } /// /// Gets a string representation of the supported cultures /// /// supported cultures in string internal string GetSupportedCultures() { if (UpdatableHelpItems.Length == 0) { return StringUtil.Format(HelpDisplayStrings.None); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < UpdatableHelpItems.Length; i++) { sb.Append(UpdatableHelpItems[i].Culture.Name); if (i != (UpdatableHelpItems.Length - 1)) { sb.Append(" | "); } } return sb.ToString(); } /// /// Gets the culture version /// /// culture info /// culture version internal Version GetCultureVersion(CultureInfo culture) { foreach (CultureSpecificUpdatableHelp updatableHelpItem in UpdatableHelpItems) { if (String.Compare(updatableHelpItem.Culture.Name, culture.Name, StringComparison.OrdinalIgnoreCase) == 0) { return updatableHelpItem.Version; } } return null; } } }