/********************************************************************++
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;
}
}
}