CP-29230: Switch between new and legacy license names according to server version.

Signed-off-by: Michael Z <michael.zhao@citrix.com>
This commit is contained in:
Michael Z 2018-09-04 17:31:41 +08:00 committed by Mihaela Stoica
parent 31b38796db
commit 816bd0601a
10 changed files with 457 additions and 131 deletions

View File

@ -55,7 +55,7 @@ namespace XenAdmin.Dialogs
InitializeComponent();
licenseServerNameTextBox.TextChanged += licenseServerPortTextBox_TextChanged;
licenseServerPortTextBox.TextChanged += licenseServerNameTextBox_TextChanged;
SetOptionsForClearwaterAndNewer();
LoadLicenseOptions();
UpdateButtonEnablement();
// if all the hosts have the same license server details then populate the textboxes.
@ -99,25 +99,39 @@ namespace XenAdmin.Dialogs
return hosts;
}
/// <summary>
/// Not all license types apply for post-clearwater hosts. Hide them to declutter the UI
/// </summary>
private void SetOptionsForClearwaterAndNewer()
private void LoadLicenseOptions()
{
if (xos.TrueForAll(x => Helpers.CreedenceOrGreater(x.Connection)))
if (xos.TrueForAll(x => Helpers.NaplesOrGreater(x.Connection)))
{
perSocketRadioButton.Visible = false;
xenDesktopEnterpriseRadioButton.Visible = false;
enterprisePerSocketRadioButton.Checked = true;
enterprisePerSocketRadioButton.Text = String.Format(Messages.ENTERPRISE_PERSOCKET_LICENSES_X_REQUIRED,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
standardPerSocketRadioButton.Text = String.Format(Messages.STANDARD_PERSOCKET_LICENSES_X_REQUIRED,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
enterprisePerSocketRadioButton.Text = String.Format(Messages.LICENSE_EDITION_ENTERPRISE_PERSOCKET,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
enterprisePerUserRadioButton.Text = Messages.LICENSE_EDITION_ENTERPRISE_PERUSER;
desktopPlusRadioButton.Text = Messages.LICENSE_EDITION_DESKTOP_PLUS;
desktopRadioButton.Text = Messages.LICENSE_EDITION_DESKTOP;
desktopCloudRadioButton.Visible = true;
desktopCloudRadioButton.Text = Messages.LICENSE_EDITION_DESKTOP_CLOUD;
standardPerSocketRadioButton.Text = String.Format(Messages.LICENSE_EDITION_STANDARD_PERSOCKET,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
}
else if (xos.TrueForAll(x => Helpers.CreedenceOrGreater(x.Connection)))
{
perSocketRadioButton.Visible = false;
xenDesktopEnterpriseRadioButton.Visible = false;
enterprisePerSocketRadioButton.Checked = true;
enterprisePerSocketRadioButton.Text = String.Format(Messages.LICENSE_EDITION_ENTERPRISE_PERSOCKET_LEGACY,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
enterprisePerUserRadioButton.Text = Messages.LICENSE_EDITION_ENTERPRISE_PERUSER_LEGACY;
desktopPlusRadioButton.Text = Messages.LICENSE_EDITION_DESKTOP_PLUS_LEGACY;
desktopRadioButton.Text = Messages.LICENSE_EDITION_DESKTOP_LEGACY;
desktopCloudRadioButton.Visible = xos.TrueForAll(x => Helpers.JuraOrGreater(x.Connection));
}
else
desktopCloudRadioButton.Text = Messages.LICENSE_EDITION_DESKTOP_CLOUD_LEGACY;
standardPerSocketRadioButton.Text = String.Format(Messages.LICENSE_EDITION_STANDARD_PERSOCKET_LEGACY,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
}
else
{
enterprisePerSocketRadioButton.Visible = false;
enterprisePerUserRadioButton.Visible = false;
@ -126,8 +140,9 @@ namespace XenAdmin.Dialogs
desktopRadioButton.Visible = false;
desktopCloudRadioButton.Visible = false;
perSocketRadioButton.Checked = true;
perSocketRadioButton.Text = String.Format(Messages.PERSOCKET_LICENSES_X_REQUIRED,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h=>h.CpuSockets())));
perSocketRadioButton.Text = String.Format(Messages.LICENSE_EDITION_PERSOCKET_LEGACY,
xos.Sum(x => x.Connection.Cache.Hosts.Sum(h => h.CpuSockets())));
xenDesktopEnterpriseRadioButton.Text = Messages.LICENSE_EDITION_XENDESKTOP_LEGACY;
}
}

View File

@ -418,14 +418,11 @@
<value>7, 3</value>
</data>
<data name="perSocketRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 19</value>
<value>14, 13</value>
</data>
<data name="perSocketRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="perSocketRadioButton.Text" xml:space="preserve">
<value>[XenServer product] Per-&amp;Socket</value>
</data>
<data name="&gt;&gt;perSocketRadioButton.Name" xml:space="preserve">
<value>perSocketRadioButton</value>
</data>
@ -448,17 +445,14 @@
<value>NoControl</value>
</data>
<data name="xenDesktopEnterpriseRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 28</value>
<value>7, 22</value>
</data>
<data name="xenDesktopEnterpriseRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>274, 19</value>
<value>14, 13</value>
</data>
<data name="xenDesktopEnterpriseRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="xenDesktopEnterpriseRadioButton.Text" xml:space="preserve">
<value>[XenServer product] for [Citrix] Virtual &amp;Desktops</value>
</data>
<data name="&gt;&gt;xenDesktopEnterpriseRadioButton.Name" xml:space="preserve">
<value>xenDesktopEnterpriseRadioButton</value>
</data>
@ -481,17 +475,14 @@
<value>NoControl</value>
</data>
<data name="enterprisePerSocketRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 53</value>
<value>7, 41</value>
</data>
<data name="enterprisePerSocketRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>242, 19</value>
<value>14, 13</value>
</data>
<data name="enterprisePerSocketRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="enterprisePerSocketRadioButton.Text" xml:space="preserve">
<value>[XenServer product] P&amp;remium Per-Socket</value>
</data>
<data name="&gt;&gt;enterprisePerSocketRadioButton.Name" xml:space="preserve">
<value>enterprisePerSocketRadioButton</value>
</data>
@ -514,17 +505,14 @@
<value>NoControl</value>
</data>
<data name="enterprisePerUserRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 78</value>
<value>7, 60</value>
</data>
<data name="enterprisePerUserRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>230, 19</value>
<value>14, 13</value>
</data>
<data name="enterprisePerUserRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="enterprisePerUserRadioButton.Text" xml:space="preserve">
<value>[XenServer product] Pr&amp;emium Per-User</value>
</data>
<data name="enterprisePerUserRadioButton.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@ -550,17 +538,14 @@
<value>NoControl</value>
</data>
<data name="desktopPlusRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 103</value>
<value>7, 79</value>
</data>
<data name="desktopPlusRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>253, 19</value>
<value>14, 13</value>
</data>
<data name="desktopPlusRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="desktopPlusRadioButton.Text" xml:space="preserve">
<value>[Citrix] Virtual Apps and Desktops &amp;Premium</value>
</data>
<data name="&gt;&gt;desktopPlusRadioButton.Name" xml:space="preserve">
<value>desktopPlusRadioButton</value>
</data>
@ -583,17 +568,14 @@
<value>NoControl</value>
</data>
<data name="desktopRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 128</value>
<value>7, 98</value>
</data>
<data name="desktopRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>201, 19</value>
<value>14, 13</value>
</data>
<data name="desktopRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="desktopRadioButton.Text" xml:space="preserve">
<value>[Citrix] Virtual &amp;Apps and Desktops</value>
</data>
<data name="&gt;&gt;desktopRadioButton.Name" xml:space="preserve">
<value>desktopRadioButton</value>
</data>
@ -616,17 +598,14 @@
<value>NoControl</value>
</data>
<data name="desktopCloudRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 153</value>
<value>7, 117</value>
</data>
<data name="desktopCloudRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>274, 19</value>
<value>14, 13</value>
</data>
<data name="desktopCloudRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="desktopCloudRadioButton.Text" xml:space="preserve">
<value>[Citrix] Virtual Apps and Desktops [Citrix] &amp;Cloud</value>
</data>
<data name="desktopCloudRadioButton.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@ -652,17 +631,14 @@
<value>NoControl</value>
</data>
<data name="standardPerSocketRadioButton.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 178</value>
<value>7, 136</value>
</data>
<data name="standardPerSocketRadioButton.Size" type="System.Drawing.Size, System.Drawing">
<value>240, 19</value>
<value>14, 13</value>
</data>
<data name="standardPerSocketRadioButton.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="standardPerSocketRadioButton.Text" xml:space="preserve">
<value>[XenServer product] &amp;Standard Per-Socket</value>
</data>
<data name="&gt;&gt;standardPerSocketRadioButton.Name" xml:space="preserve">
<value>standardPerSocketRadioButton</value>
</data>
@ -691,7 +667,7 @@
<value>4, 0, 4, 4</value>
</data>
<data name="editionLayoutPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>519, 204</value>
<value>519, 156</value>
</data>
<data name="editionLayoutPanel.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -718,7 +694,7 @@
<value>11, 92</value>
</data>
<data name="editionsGroupBox.Size" type="System.Drawing.Size, System.Drawing">
<value>525, 226</value>
<value>525, 178</value>
</data>
<data name="editionsGroupBox.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -751,7 +727,7 @@
<value>Segoe UI, 9pt</value>
</data>
<data name="buttonsLayoutPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>350, 329</value>
<value>350, 281</value>
</data>
<data name="buttonsLayoutPanel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 8, 3, 3</value>

View File

@ -184,7 +184,7 @@ namespace XenAdmin.Actions
if(xo is Host && host != null)
{
Host.apply_edition(host.Connection.Session, host.opaque_ref, Host.GetEditionText(_edition), false);
Host.apply_edition(host.Connection.Session, host.opaque_ref, host.GetEditionText(_edition), false);
// PR-1102: populate the list of updated hosts
updatedHosts.Add(host, previousLicenseData);
@ -192,8 +192,7 @@ namespace XenAdmin.Actions
if (xo is Pool)
{
Pool.apply_edition(xo.Connection.Session, pool.opaque_ref, Host.GetEditionText(_edition));
Pool.apply_edition(xo.Connection.Session, pool.opaque_ref, xo.Connection.Cache.Hosts.First().GetEditionText(_edition));
xo.Connection.Cache.Hosts.ToList().ForEach(h => updatedHosts.Add(h, previousLicenseData));
}
@ -228,7 +227,7 @@ namespace XenAdmin.Actions
// PR-1102: Send licensing data to the activation server
if (updatedHosts.Count > 0)
{
LicensingHelper.SendLicenseEditionData(updatedHosts, Host.GetEditionText(_edition));
LicensingHelper.SendLicenseEditionData(updatedHosts, updatedHosts.Keys.First().GetEditionText(_edition));
}
if (LicenseFailures.Count > 0)

View File

@ -75,7 +75,7 @@ namespace XenAdmin.Actions.HostActions
public static void SendActivationData(Dictionary<XenAPI.Host, LicenseDataStruct> hosts)
{
// Supply the state information required by the task.
SendLicenseDataHelper sendLicenseDataHelper = new SendLicenseDataHelper(hosts, "activation", XenAPI.Host.GetEditionText(XenAPI.Host.Edition.Free), true);
SendLicenseDataHelper sendLicenseDataHelper = new SendLicenseDataHelper(hosts, "activation", hosts.Keys.First().GetEditionText(XenAPI.Host.Edition.Free), true);
// start a separate thread
Thread thread = new Thread(new ThreadStart(sendLicenseDataHelper.ThreadProc));

View File

@ -817,7 +817,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] Premium Per-Socket.
/// Looks up a localized string similar to [Legacy XenServer product] Premium Per-Socket.
/// </summary>
public static string Label_host_edition_enterprise_per_socket {
get {
@ -826,7 +826,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] Premium Per-User.
/// Looks up a localized string similar to [Legacy XenServer product] Premium Per-User.
/// </summary>
public static string Label_host_edition_enterprise_per_user {
get {
@ -835,11 +835,119 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to [XenServer product].
/// Looks up a localized string similar to [XenServer product] Express.
/// </summary>
public static string Label_host_edition_free {
public static string Label_host_edition_express {
get {
return ResourceManager.GetString("Label-host.edition-free", resourceCulture);
return ResourceManager.GetString("Label-host.edition-express", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy Citrix XenServer] Basic Edition.
/// </summary>
public static string Label_host_edition_legacy_basic {
get {
return ResourceManager.GetString("Label-host.edition-legacy-basic", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to XenApp/XenDesktop.
/// </summary>
public static string Label_host_edition_legacy_desktop {
get {
return ResourceManager.GetString("Label-host.edition-legacy-desktop", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to XenApp/XenDesktop [Citrix] Cloud.
/// </summary>
public static string Label_host_edition_legacy_desktop_cloud {
get {
return ResourceManager.GetString("Label-host.edition-legacy-desktop-cloud", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to XenApp/XenDesktop Platinum.
/// </summary>
public static string Label_host_edition_legacy_desktop_plus {
get {
return ResourceManager.GetString("Label-host.edition-legacy-desktop-plus", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] Enterprise Per-Socket.
/// </summary>
public static string Label_host_edition_legacy_enterprise_per_socket {
get {
return ResourceManager.GetString("Label-host.edition-legacy-enterprise-per-socket", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] Enterprise Per-User.
/// </summary>
public static string Label_host_edition_legacy_enterprise_per_user {
get {
return ResourceManager.GetString("Label-host.edition-legacy-enterprise-per-user", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product].
/// </summary>
public static string Label_host_edition_legacy_free {
get {
return ResourceManager.GetString("Label-host.edition-legacy-free", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] Per-Socket.
/// </summary>
public static string Label_host_edition_legacy_per_socket {
get {
return ResourceManager.GetString("Label-host.edition-legacy-per-socket", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy Citrix XenServer] Ultimate Edition.
/// </summary>
public static string Label_host_edition_legacy_premium {
get {
return ResourceManager.GetString("Label-host.edition-legacy-premium", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy Citrix XenServer] Standard Edition.
/// </summary>
public static string Label_host_edition_legacy_standard {
get {
return ResourceManager.GetString("Label-host.edition-legacy-standard", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] Standard Per-Socket.
/// </summary>
public static string Label_host_edition_legacy_standard_per_socket {
get {
return ResourceManager.GetString("Label-host.edition-legacy-standard-per-socket", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] for XenDesktop.
/// </summary>
public static string Label_host_edition_legacy_xendesktop {
get {
return ResourceManager.GetString("Label-host.edition-legacy-xendesktop", resourceCulture);
}
}
@ -861,6 +969,24 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] Premium Per-Socket.
/// </summary>
public static string Label_host_edition_premium_per_socket {
get {
return ResourceManager.GetString("Label-host.edition-premium-per-socket", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] Premium Per-User.
/// </summary>
public static string Label_host_edition_premium_per_user {
get {
return ResourceManager.GetString("Label-host.edition-premium-per-user", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Citrix XenServer] Standard Edition.
/// </summary>
@ -3672,7 +3798,7 @@ namespace XenAdmin {
}
/// <summary>
/// Looks up a localized string similar to The license on server &apos;{0}&apos; has expired or been changed, and no longer supports [XenServer product] Premium features..
/// Looks up a localized string similar to The license on server &apos;{0}&apos; has expired or been changed, pooling is no longer supported..
/// </summary>
public static string Message_body_license_does_not_support_pooling {
get {

View File

@ -543,8 +543,8 @@
<data name="Label-host.edition" xml:space="preserve">
<value>License</value>
</data>
<data name="Label-host.edition-free" xml:space="preserve">
<value>[XenServer product]</value>
<data name="Label-host.edition-express" xml:space="preserve">
<value>[XenServer product] Express</value>
</data>
<data name="Label-host.enabled" xml:space="preserve">
<value>Enabled</value>
@ -1029,7 +1029,7 @@
<value>There was a temporary failure synchronizing performance statistics across the pool, probably because one or more servers were offline. Another synchronization attempt will be made later.</value>
</data>
<data name="Message.body-license_does_not_support_pooling" xml:space="preserve">
<value>The license on server '{0}' has expired or been changed, and no longer supports [XenServer product] Premium features.</value>
<value>The license on server '{0}' has expired or been changed, pooling is no longer supported.</value>
</data>
<data name="Message.body-license_expired" xml:space="preserve">
<value>The license for {0} has expired.</value>
@ -1610,10 +1610,10 @@
<data name="Message.name-license_server_version_obsolete" xml:space="preserve">
<value>The license server is an out-of-date version.</value>
</data>
<data name="Label-host.edition-enterprise-per-socket" xml:space="preserve">
<data name="Label-host.edition-premium-per-socket" xml:space="preserve">
<value>[XenServer product] Premium Per-Socket</value>
</data>
<data name="Label-host.edition-enterprise-per-user" xml:space="preserve">
<data name="Label-host.edition-premium-per-user" xml:space="preserve">
<value>[XenServer product] Premium Per-User</value>
</data>
<data name="Label-host.edition-standard-per-socket" xml:space="preserve">
@ -1844,4 +1844,46 @@
<data name="Label-host.edition-desktop-cloud" xml:space="preserve">
<value>[Citrix] Virtual Apps and Desktops [Citrix] Cloud</value>
</data>
<data name="Label-host.edition-legacy-basic" xml:space="preserve">
<value>[Legacy Citrix XenServer] Basic Edition</value>
</data>
<data name="Label-host.edition-legacy-desktop" xml:space="preserve">
<value>XenApp/XenDesktop</value>
</data>
<data name="Label-host.edition-legacy-desktop-cloud" xml:space="preserve">
<value>XenApp/XenDesktop [Citrix] Cloud</value>
</data>
<data name="Label-host.edition-legacy-desktop-plus" xml:space="preserve">
<value>XenApp/XenDesktop Platinum</value>
</data>
<data name="Label-host.edition-legacy-enterprise-per-socket" xml:space="preserve">
<value>[Legacy XenServer product] Enterprise Per-Socket</value>
</data>
<data name="Label-host.edition-legacy-enterprise-per-user" xml:space="preserve">
<value>[Legacy XenServer product] Enterprise Per-User</value>
</data>
<data name="Label-host.edition-legacy-free" xml:space="preserve">
<value>[Legacy XenServer product]</value>
</data>
<data name="Label-host.edition-legacy-per-socket" xml:space="preserve">
<value>[Legacy XenServer product] Per-Socket</value>
</data>
<data name="Label-host.edition-legacy-premium" xml:space="preserve">
<value>[Legacy Citrix XenServer] Ultimate Edition</value>
</data>
<data name="Label-host.edition-legacy-standard" xml:space="preserve">
<value>[Legacy Citrix XenServer] Standard Edition</value>
</data>
<data name="Label-host.edition-legacy-standard-per-socket" xml:space="preserve">
<value>[Legacy XenServer product] Standard Per-Socket</value>
</data>
<data name="Label-host.edition-legacy-xendesktop" xml:space="preserve">
<value>[Legacy XenServer product] for XenDesktop</value>
</data>
<data name="Label-host.edition-enterprise-per-socket" xml:space="preserve">
<value>[Legacy XenServer product] Premium Per-Socket</value>
</data>
<data name="Label-host.edition-enterprise-per-user" xml:space="preserve">
<value>[Legacy XenServer product] Premium Per-User</value>
</data>
</root>

View File

@ -13901,15 +13901,6 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer] P&amp;remium Per-Socket ({0} required).
/// </summary>
public static string ENTERPRISE_PERSOCKET_LICENSES_X_REQUIRED {
get {
return ResourceManager.GetString("ENTERPRISE_PERSOCKET_LICENSES_X_REQUIRED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Members.
/// </summary>
@ -20074,6 +20065,150 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to [Citrix] Virtual &amp;Apps and Desktops.
/// </summary>
public static string LICENSE_EDITION_DESKTOP {
get {
return ResourceManager.GetString("LICENSE_EDITION_DESKTOP", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Citrix] Virtual Apps and Desktops [Citrix] &amp;Cloud.
/// </summary>
public static string LICENSE_EDITION_DESKTOP_CLOUD {
get {
return ResourceManager.GetString("LICENSE_EDITION_DESKTOP_CLOUD", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to XenApp/XenDesktop [Citrix] &amp;Cloud.
/// </summary>
public static string LICENSE_EDITION_DESKTOP_CLOUD_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_DESKTOP_CLOUD_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to XenApp/Xen&amp;Desktop.
/// </summary>
public static string LICENSE_EDITION_DESKTOP_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_DESKTOP_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Citrix] Virtual Apps and Desktops &amp;Premium.
/// </summary>
public static string LICENSE_EDITION_DESKTOP_PLUS {
get {
return ResourceManager.GetString("LICENSE_EDITION_DESKTOP_PLUS", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to XenApp/XenDesktop &amp;Platinum.
/// </summary>
public static string LICENSE_EDITION_DESKTOP_PLUS_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_DESKTOP_PLUS_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] P&amp;remium Per-Socket ({0} required).
/// </summary>
public static string LICENSE_EDITION_ENTERPRISE_PERSOCKET {
get {
return ResourceManager.GetString("LICENSE_EDITION_ENTERPRISE_PERSOCKET", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] E&amp;nterprise Per-Socket ({0} required).
/// </summary>
public static string LICENSE_EDITION_ENTERPRISE_PERSOCKET_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_ENTERPRISE_PERSOCKET_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] Pr&amp;emium Per-User.
/// </summary>
public static string LICENSE_EDITION_ENTERPRISE_PERUSER {
get {
return ResourceManager.GetString("LICENSE_EDITION_ENTERPRISE_PERUSER", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] &amp;Enterprise Per-User.
/// </summary>
public static string LICENSE_EDITION_ENTERPRISE_PERUSER_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_ENTERPRISE_PERUSER_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] Per-&amp;Socket ({0} required).
/// </summary>
public static string LICENSE_EDITION_PERSOCKET {
get {
return ResourceManager.GetString("LICENSE_EDITION_PERSOCKET", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] Per-&amp;Socket ({0} required).
/// </summary>
public static string LICENSE_EDITION_PERSOCKET_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_PERSOCKET_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] &amp;Standard Per-Socket ({0} required).
/// </summary>
public static string LICENSE_EDITION_STANDARD_PERSOCKET {
get {
return ResourceManager.GetString("LICENSE_EDITION_STANDARD_PERSOCKET", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] &amp;Standard Per-Socket ({0} required).
/// </summary>
public static string LICENSE_EDITION_STANDARD_PERSOCKET_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_STANDARD_PERSOCKET_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] for [Citrix] Virtual &amp;Desktops.
/// </summary>
public static string LICENSE_EDITION_XENDESKTOP {
get {
return ResourceManager.GetString("LICENSE_EDITION_XENDESKTOP", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to [Legacy XenServer product] for &amp;XenDesktop.
/// </summary>
public static string LICENSE_EDITION_XENDESKTOP_LEGACY {
get {
return ResourceManager.GetString("LICENSE_EDITION_XENDESKTOP_LEGACY", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The licensing action for {0} failed..
/// </summary>
@ -27893,15 +28028,6 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to [Citrix XenServer] Per-&amp;Socket ({0} required).
/// </summary>
public static string PERSOCKET_LICENSES_X_REQUIRED {
get {
return ResourceManager.GetString("PERSOCKET_LICENSES_X_REQUIRED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Physical device.
/// </summary>
@ -32430,15 +32556,6 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to [XenServer product] &amp;Standard Per-Socket ({0} required).
/// </summary>
public static string STANDARD_PERSOCKET_LICENSES_X_REQUIRED {
get {
return ResourceManager.GetString("STANDARD_PERSOCKET_LICENSES_X_REQUIRED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Start host.
/// </summary>

View File

@ -4894,9 +4894,6 @@ Would you like to eject these ISOs before continuing?</value>
<data name="ENDS_WITH" xml:space="preserve">
<value>ends with</value>
</data>
<data name="ENTERPRISE_PERSOCKET_LICENSES_X_REQUIRED" xml:space="preserve">
<value>[XenServer] P&amp;remium Per-Socket ({0} required)</value>
</data>
<data name="ENTER_MAINTENANCE_MODE" xml:space="preserve">
<value>Enter &amp;Maintenance Mode...</value>
</data>
@ -6994,6 +6991,54 @@ Size: {3}</value>
<data name="LICENSE_ACTIVATED" xml:space="preserve">
<value>Activated</value>
</data>
<data name="LICENSE_EDITION_DESKTOP" xml:space="preserve">
<value>[Citrix] Virtual &amp;Apps and Desktops</value>
</data>
<data name="LICENSE_EDITION_DESKTOP_CLOUD" xml:space="preserve">
<value>[Citrix] Virtual Apps and Desktops [Citrix] &amp;Cloud</value>
</data>
<data name="LICENSE_EDITION_DESKTOP_CLOUD_LEGACY" xml:space="preserve">
<value>XenApp/XenDesktop [Citrix] &amp;Cloud</value>
</data>
<data name="LICENSE_EDITION_DESKTOP_LEGACY" xml:space="preserve">
<value>XenApp/Xen&amp;Desktop</value>
</data>
<data name="LICENSE_EDITION_DESKTOP_PLUS" xml:space="preserve">
<value>[Citrix] Virtual Apps and Desktops &amp;Premium</value>
</data>
<data name="LICENSE_EDITION_DESKTOP_PLUS_LEGACY" xml:space="preserve">
<value>XenApp/XenDesktop &amp;Platinum</value>
</data>
<data name="LICENSE_EDITION_ENTERPRISE_PERSOCKET" xml:space="preserve">
<value>[XenServer product] P&amp;remium Per-Socket ({0} required)</value>
</data>
<data name="LICENSE_EDITION_ENTERPRISE_PERSOCKET_LEGACY" xml:space="preserve">
<value>[Legacy XenServer product] E&amp;nterprise Per-Socket ({0} required)</value>
</data>
<data name="LICENSE_EDITION_ENTERPRISE_PERUSER" xml:space="preserve">
<value>[XenServer product] Pr&amp;emium Per-User</value>
</data>
<data name="LICENSE_EDITION_ENTERPRISE_PERUSER_LEGACY" xml:space="preserve">
<value>[Legacy XenServer product] &amp;Enterprise Per-User</value>
</data>
<data name="LICENSE_EDITION_PERSOCKET" xml:space="preserve">
<value>[XenServer product] Per-&amp;Socket ({0} required)</value>
</data>
<data name="LICENSE_EDITION_PERSOCKET_LEGACY" xml:space="preserve">
<value>[Legacy XenServer product] Per-&amp;Socket ({0} required)</value>
</data>
<data name="LICENSE_EDITION_STANDARD_PERSOCKET" xml:space="preserve">
<value>[XenServer product] &amp;Standard Per-Socket ({0} required)</value>
</data>
<data name="LICENSE_EDITION_STANDARD_PERSOCKET_LEGACY" xml:space="preserve">
<value>[Legacy XenServer product] &amp;Standard Per-Socket ({0} required)</value>
</data>
<data name="LICENSE_EDITION_XENDESKTOP" xml:space="preserve">
<value>[XenServer product] for [Citrix] Virtual &amp;Desktops</value>
</data>
<data name="LICENSE_EDITION_XENDESKTOP_LEGACY" xml:space="preserve">
<value>[Legacy XenServer product] for &amp;XenDesktop</value>
</data>
<data name="LICENSE_ERROR_1" xml:space="preserve">
<value>The licensing action for {0} failed.</value>
</data>
@ -9701,9 +9746,6 @@ File not found</value>
<data name="PERMISSION_DENIED" xml:space="preserve">
<value>Permission Denied</value>
</data>
<data name="PERSOCKET_LICENSES_X_REQUIRED" xml:space="preserve">
<value>[Citrix XenServer] Per-&amp;Socket ({0} required)</value>
</data>
<data name="PHYSICAL_DEVICE" xml:space="preserve">
<value>Physical device</value>
</data>
@ -11247,9 +11289,6 @@ The upper limit: SR size / {2}</value>
<data name="SR_X_ON_Y" xml:space="preserve">
<value>SR {0} on {1}</value>
</data>
<data name="STANDARD_PERSOCKET_LICENSES_X_REQUIRED" xml:space="preserve">
<value>[XenServer product] &amp;Standard Per-Socket ({0} required)</value>
</data>
<data name="STARTED" xml:space="preserve">
<value>Started</value>
</data>

View File

@ -312,8 +312,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "1.8.90") >= 0;
return platform_version != null && productVersionCompare(platform_version, "1.8.90") >= 0;
}
/// <param name="conn">May be null, in which case true is returned.</param>
@ -330,8 +329,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "2.0.0") >= 0;
return platform_version != null && productVersionCompare(platform_version, "2.0.0") >= 0;
}
/// <param name="conn">May be null, in which case true is returned.</param>
@ -348,8 +346,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "2.1.1") >= 0;
return platform_version != null && productVersionCompare(platform_version, "2.1.1") >= 0;
}
/// <param name="conn">May be null, in which case true is returned.</param>
@ -366,8 +363,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "2.2.50") >= 0;
return platform_version != null && productVersionCompare(platform_version, "2.2.50") >= 0;
}
/// <param name="conn">May be null, in which case true is returned.</param>
@ -384,8 +380,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "2.3.50") >= 0;
return platform_version != null && productVersionCompare(platform_version, "2.3.50") >= 0;
}
/// <param name="conn">May be null, in which case true is returned.</param>
@ -402,8 +397,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "2.4.50") >= 0;
return platform_version != null && productVersionCompare(platform_version, "2.4.50") >= 0;
}
/// <param name="conn">May be null, in which case true is returned.</param>
@ -463,8 +457,7 @@ namespace XenAdmin.Core
return true;
string platform_version = HostPlatformVersion(host);
return
platform_version != null && productVersionCompare(platform_version, "1.6.900") >= 0;
return platform_version != null && productVersionCompare(platform_version, "1.6.900") >= 0;
}
/// <summary>
@ -477,6 +470,23 @@ namespace XenAdmin.Core
return conn == null || conn.Session == null || conn.Session.APIVersion >= API_Version.API_2_1;
}
/// <param name="conn">May be null, in which case true is returned.</param>
public static bool NaplesOrGreater(IXenConnection conn)
{
return conn == null || NaplesOrGreater(Helpers.GetMaster(conn));
}
/// Naples is ver. 3.0.0
/// <param name="host">May be null, in which case true is returned.</param>
public static bool NaplesOrGreater(Host host)
{
if (host == null)
return true;
string platform_version = HostPlatformVersion(host);
return platform_version != null && productVersionCompare(platform_version, "2.9.50") >= 0;
}
// CP-3435: Disable Check for Updates in Common Criteria Certification project
public static bool CommonCriteriaCertificationRelease
{
@ -879,7 +889,8 @@ namespace XenAdmin.Core
if (string.IsNullOrEmpty(host.edition))
return Messages.UNKNOWN;
string name = PropertyManager.GetFriendlyName("Label-host.edition-" + host.edition);
string legacy = NaplesOrGreater(host) ? "" : "legacy-";
string name = PropertyManager.GetFriendlyName("Label-host.edition-" + legacy + host.edition);
return name ?? Messages.UNKNOWN;
}

View File

@ -78,8 +78,10 @@ namespace XenAPI
case "per-socket":
return Edition.PerSocket;
case "enterprise-per-socket":
case "premium-per-socket":
return Edition.EnterprisePerSocket;
case "enterprise-per-user":
case "premium-per-user":
return Edition.EnterprisePerUser;
case "standard-per-socket":
return Edition.StandardPerSocket;
@ -118,19 +120,18 @@ namespace XenAPI
return false;
}
public static string GetEditionText(Edition edition)
public string GetEditionText(Edition edition)
{
switch (edition)
{
case Edition.XenDesktop:
return "xendesktop";
case Edition.PerSocket:
return "per-socket";
case Edition.EnterprisePerSocket:
return "enterprise-per-socket";
return Helpers.NaplesOrGreater(this) ? "premium-per-socket" : "enterprise-per-socket";
case Edition.EnterprisePerUser:
return "enterprise-per-user";
return Helpers.NaplesOrGreater(this) ? "premium-per-user" : "enterprise-per-user";
case Edition.StandardPerSocket:
return "standard-per-socket";
case Edition.Desktop:
@ -144,7 +145,7 @@ namespace XenAPI
case Edition.Standard:
return "standard";
default:
return "free";
return Helpers.NaplesOrGreater(this) ? "express" : "free";
}
}
@ -286,7 +287,7 @@ namespace XenAPI
public virtual bool IsFreeLicense()
{
return edition == "free";
return edition == "free" || edition == "express";
}
public virtual bool IsFreeLicenseOrExpired()