/// <summary>
 /// Initializes a new instance of the <see cref="ApplicationPoolInfo" /> class.
 /// </summary>
 /// <param name="accessGroupId">Access groups can organize the entities (like application pools, desktop pools) in the organization. They can also be used for delegated administration. For application pool, this is the same as that of the farm or desktop pool that the application pool belongs to.&lt;br&gt;Supported Filters: &#39;Equals&#39;. (required).</param>
 /// <param name="antiAffinityData">Anti-affinity data. When an anti-affinity rule is configured for an application pool, Horizon Connection Server attempts to launch the application only on RDS servers that have sufficient resources to run the application. This feature can be useful for controlling applications that consume large amounts of CPU or memory resources.&lt;br&gt;An anti-affinity rule consists of an application matching pattern and a maximum count. For example, the application matching pattern might be autocad.exe and the maximum count might be 2..</param>
 /// <param name="categoryFolderName">Name of the category folder in the user&#39;s OS containing a shortcut to the application. Unset if the application does not belong to a category..</param>
 /// <param name="csRestrictionTags">Connection server restrictions. Application pool can be accessed from only those connection server instances that have a matching tag in this list. Null or empty list means that the application pool can be accessed from any connection server..</param>
 /// <param name="customizedIconIds">List of customized icon IDs associated with the application which the user has configured..</param>
 /// <param name="description">Notes about the application pool.&lt;br&gt;Supported Filters: &#39;Equals&#39;, &#39;StartsWith&#39; and &#39;Contains&#39;..</param>
 /// <param name="desktopPoolId">ID of the desktop pool from which this application pool is created. Either this or farm id will be set.&lt;br&gt;Supported Filters: &#39;Equals&#39;..</param>
 /// <param name="displayName">The display name is the name that users will see when they connect to view client. If the display name is left blank, it defaults to name.&lt;br&gt;Supported Filters: &#39;Equals&#39;, &#39;StartsWith&#39; and &#39;Contains&#39;..</param>
 /// <param name="enableClientRestrictions">Indicates whether client restrictions are to be applied to application pool. Currently it is valid for application pool created from farm.&lt;br&gt;Supported Filters: &#39;Equals&#39;..</param>
 /// <param name="enablePreLaunch">Whether to pre-launch the application.&lt;br&gt;Supported Filters: &#39;Equals&#39;..</param>
 /// <param name="enabled">Indicates whether the application pool is enabled.&lt;br&gt;Supported Filters: &#39;Equals&#39;. (required).</param>
 /// <param name="executablePath">Path to application executable.&lt;br&gt;Supported Filters: &#39;Equals&#39;, &#39;StartsWith&#39;, &#39;EndsWith&#39; and &#39;Contains&#39;. (required).</param>
 /// <param name="farmId">ID of the farm from which this application pool is created. Either this or desktop pool id will be set.&lt;br&gt;Supported Filters: &#39;Equals&#39;..</param>
 /// <param name="iconIds">List of icon IDs associated with the application which are fetched from the agent..</param>
 /// <param name="id">Unique ID representing application pool. (required).</param>
 /// <param name="maxMultiSessions">Maximum number of multi-sessions a user can have in this application pool. This property is required if multi-session mode is set to \&quot;ENABLED_DEFAULT_OFF\&quot;, \&quot;ENABLED_DEFAULT_ON\&quot;, or \&quot;ENABLED_ENFORCED\&quot;.</param>
 /// <param name="multiSessionMode">Multi-session mode for the application pool. An application launched in multi-session mode does not support reconnect behavior when user logs in from a different client instance. Multi-session mode should be disabled when pre-launch is enabled.&lt;br&gt;Supported Filters: &#39;Equals&#39;. * DISABLED: Multi-session is not supported for this application. * ENABLED_DEFAULT_OFF: Multi-session is supported for this application but is disabled by default. The client would need to explicitly request multi-session launch, if wanted. If a legacy client is used, this will always result in a single-session application launch. * ENABLED_DEFAULT_ON: Multi-session mode is supported for this application and is enabled by default. The client can request explicitly for single-session launch, if wanted. If a legacy client is used, this will always result in a multi-session application launch. * ENABLED_ENFORCED: Multi-session is supported for this application and it is enforced. The client can not select to launch this application as a single-session application..</param>
 /// <param name="name">The application name is the unique identifier used to identify this application pool. This property must contain only alphanumerics, underscores, and dashes. The maximum length is 64 characters.&lt;br&gt;Supported Filters: &#39;Equals&#39;, &#39;StartsWith&#39; and &#39;Contains&#39;. (required).</param>
 /// <param name="parameters">Parameters to pass to application when launching..</param>
 /// <param name="publisher">Application publisher.&lt;br&gt;Supported Filters: &#39;Equals&#39;, &#39;StartsWith&#39; and &#39;Contains&#39;..</param>
 /// <param name="shortcutLocations">Locations of the category folder in the user&#39;s OS containing a shortcut to the application. The value must be set if category folder name is provided..</param>
 /// <param name="startFolder">Starting folder for application..</param>
 /// <param name="supportedFileTypesData">Supported file types details..</param>
 /// <param name="version">Application version.&lt;br&gt;Supported Filters: &#39;Equals&#39;, &#39;StartsWith&#39; and &#39;Contains&#39;..</param>
 public ApplicationPoolInfo(string accessGroupId = default(string), ApplicationAntiAffinityData antiAffinityData = default(ApplicationAntiAffinityData), string categoryFolderName = default(string), List <string> csRestrictionTags = default(List <string>), List <string> customizedIconIds = default(List <string>), string description = default(string), string desktopPoolId = default(string), string displayName = default(string), bool?enableClientRestrictions = default(bool?), bool?enablePreLaunch = default(bool?), bool?enabled = default(bool?), string executablePath = default(string), string farmId = default(string), List <string> iconIds = default(List <string>), string id = default(string), int?maxMultiSessions = default(int?), MultiSessionModeEnum?multiSessionMode = default(MultiSessionModeEnum?), string name = default(string), string parameters = default(string), string publisher = default(string), List <ShortcutLocationsEnum> shortcutLocations = default(List <ShortcutLocationsEnum>), string startFolder = default(string), ApplicationSupportedFileTypesData supportedFileTypesData = default(ApplicationSupportedFileTypesData), string version = default(string))
 {
     // to ensure "accessGroupId" is required (not null)
     if (accessGroupId == null)
     {
         throw new InvalidDataException("accessGroupId is a required property for ApplicationPoolInfo and cannot be null");
     }
     else
     {
         this.AccessGroupId = accessGroupId;
     }
     // to ensure "enabled" is required (not null)
     if (enabled == null)
     {
         throw new InvalidDataException("enabled is a required property for ApplicationPoolInfo and cannot be null");
     }
     else
     {
         this.Enabled = enabled;
     }
     // to ensure "executablePath" is required (not null)
     if (executablePath == null)
     {
         throw new InvalidDataException("executablePath is a required property for ApplicationPoolInfo and cannot be null");
     }
     else
     {
         this.ExecutablePath = executablePath;
     }
     // to ensure "id" is required (not null)
     if (id == null)
     {
         throw new InvalidDataException("id is a required property for ApplicationPoolInfo and cannot be null");
     }
     else
     {
         this.Id = id;
     }
     // to ensure "name" is required (not null)
     if (name == null)
     {
         throw new InvalidDataException("name is a required property for ApplicationPoolInfo and cannot be null");
     }
     else
     {
         this.Name = name;
     }
     this.AntiAffinityData         = antiAffinityData;
     this.CategoryFolderName       = categoryFolderName;
     this.CsRestrictionTags        = csRestrictionTags;
     this.CustomizedIconIds        = customizedIconIds;
     this.Description              = description;
     this.DesktopPoolId            = desktopPoolId;
     this.DisplayName              = displayName;
     this.EnableClientRestrictions = enableClientRestrictions;
     this.EnablePreLaunch          = enablePreLaunch;
     this.FarmId                 = farmId;
     this.IconIds                = iconIds;
     this.MaxMultiSessions       = maxMultiSessions;
     this.MultiSessionMode       = multiSessionMode;
     this.Parameters             = parameters;
     this.Publisher              = publisher;
     this.ShortcutLocations      = shortcutLocations;
     this.StartFolder            = startFolder;
     this.SupportedFileTypesData = supportedFileTypesData;
     this.Version                = version;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ApplicationPoolUpdateSpec" /> class.
 /// </summary>
 /// <param name="antiAffinityData">Configure to enable anti-affinity rules. When an anti-affinity rule is configured for an application pool, Horizon Connection Server attempts to launch the application only on RDS servers that have sufficient resources to run the application. This feature can be useful for controlling applications that consume large amounts of CPU or memory resources.&lt;br&gt;An anti-affinity rule consists of an application matching pattern and a maximum count. For example, the application matching pattern might be autocad.exe and the maximum count might be 2..</param>
 /// <param name="categoryFolderName">Name of the category folder in the user&#39;s OS containing a shortcut to the application. Unset if the application does not belong to a category..</param>
 /// <param name="csRestrictionTags">Connection server restrictions. Application pool can be accessed from only those connection server instances that have a matching tag in this list. Null or empty list means that the application pool can be accessed from any connection server..</param>
 /// <param name="description">Notes about the application pool..</param>
 /// <param name="displayName">The display name is the name that users will see in Horizon client. If the display name is left blank, it defaults to name..</param>
 /// <param name="enableClientRestrictions">Indicates whether client restrictions are to be applied to application pool. Currently it is valid for application pool created from farm. Default value is false..</param>
 /// <param name="enablePreLaunch">Whether to pre-launch the application. Default value is false..</param>
 /// <param name="enabled">Indicates whether the application pool is enabled. Default value is true (required).</param>
 /// <param name="executablePath">Path to application executable. (required).</param>
 /// <param name="maxMultiSessions">Maximum number of multi-sessions a user can have in this application pool. This property is required if multi-session mode is set to \&quot;ENABLED_DEFAULT_OFF\&quot;, \&quot;ENABLED_DEFAULT_ON\&quot;, or \&quot;ENABLED_ENFORCED\&quot;Default value is 1..</param>
 /// <param name="multiSessionMode">Multi-session mode for the application pool. An application launched in multi-session mode does not support reconnect behavior when user logs in from a different client instance. Multi-session mode should be disabled when pre-launch is enabled.Default value is \&quot;DISABLED\&quot; * DISABLED: Multi-session is not supported for this application. * ENABLED_DEFAULT_OFF: Multi-session is supported for this application but is disabled by default. The client would need to explicitly request multi-session launch, if wanted. If a legacy client is used, this will always result in a single-session application launch. * ENABLED_DEFAULT_ON: Multi-session mode is supported for this application and is enabled by default. The client can request explicitly for single-session launch, if wanted. If a legacy client is used, this will always result in a multi-session application launch. * ENABLED_ENFORCED: Multi-session is supported for this application and it is enforced. The client can not select to launch this application as a single-session application..</param>
 /// <param name="parameters">Parameters to pass to application when launching..</param>
 /// <param name="publisher">Application publisher.</param>
 /// <param name="shortcutLocations">Locations of the category folder in the user&#39;s OS containing a shortcut to the application. The value must be set if category folder name is provided..</param>
 /// <param name="startFolder">Starting folder for application.</param>
 /// <param name="supportedFileTypesData">Supported file types details..</param>
 /// <param name="version">Application version..</param>
 public ApplicationPoolUpdateSpec(ApplicationAntiAffinityData antiAffinityData = default(ApplicationAntiAffinityData), string categoryFolderName = default(string), List <string> csRestrictionTags = default(List <string>), string description = default(string), string displayName = default(string), bool?enableClientRestrictions = default(bool?), bool?enablePreLaunch = default(bool?), bool?enabled = default(bool?), string executablePath = default(string), int?maxMultiSessions = default(int?), MultiSessionModeEnum?multiSessionMode = default(MultiSessionModeEnum?), string parameters = default(string), string publisher = default(string), List <ShortcutLocationsEnum> shortcutLocations = default(List <ShortcutLocationsEnum>), string startFolder = default(string), ApplicationSupportedFileTypesData supportedFileTypesData = default(ApplicationSupportedFileTypesData), string version = default(string))
 {
     // to ensure "enabled" is required (not null)
     if (enabled == null)
     {
         throw new InvalidDataException("enabled is a required property for ApplicationPoolUpdateSpec and cannot be null");
     }
     else
     {
         this.Enabled = enabled;
     }
     // to ensure "executablePath" is required (not null)
     if (executablePath == null)
     {
         throw new InvalidDataException("executablePath is a required property for ApplicationPoolUpdateSpec and cannot be null");
     }
     else
     {
         this.ExecutablePath = executablePath;
     }
     this.AntiAffinityData         = antiAffinityData;
     this.CategoryFolderName       = categoryFolderName;
     this.CsRestrictionTags        = csRestrictionTags;
     this.Description              = description;
     this.DisplayName              = displayName;
     this.EnableClientRestrictions = enableClientRestrictions;
     this.EnablePreLaunch          = enablePreLaunch;
     this.MaxMultiSessions         = maxMultiSessions;
     this.MultiSessionMode         = multiSessionMode;
     this.Parameters             = parameters;
     this.Publisher              = publisher;
     this.ShortcutLocations      = shortcutLocations;
     this.StartFolder            = startFolder;
     this.SupportedFileTypesData = supportedFileTypesData;
     this.Version = version;
 }