package com.bocloud.cmp.model.horizon;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * VMware.Hv.DesktopSettings
 * 
 * @author HP
 *
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class VmwareHorizonDesktopSettings {

	/**
	 * True if the desktop is enabled. This property has a default value of true.
	 */
	private Boolean enabled;
	/**
	 * True if the desktop is in the process of being deleted. This cannot be set or
	 * updated. This property has a default value of false. This property cannot be
	 * updated.
	 */
	private Boolean deleting;
	/**
	 * Connection server restrictions. This is a list of tags that access to the
	 * desktop is restricted to. No list means that the desktop can be accessed from
	 * any connection server. This property need not be set.
	 */
	private List<String> connectionServerRestrictions;
	/**
	 * Remote machine settings applicable when a user logs off or when a desktop is
	 * no longer keeping a machine as a spare. For RDS Desktops, this will be unset
	 * when retrieved, must be unset when created, and cannot be updated. The RDS
	 * Desktop's Farm's FarmSessionSettings will be used instead. Otherwise, this
	 * must be set. This property need not be set.
	 */
	private VmwareHorizonDesktopLogoffSettings logoffSettings;
	/**
	 * Remote display protocol settings. These relate to RDP/PCoIP/BLAST. For RDS
	 * Desktops, this will be unset when retrieved, must be unset when created, and
	 * cannot be updated. The RDS Desktop's Farm's FarmDisplayProtocolSettings will
	 * be used instead. Otherwise, this must be set. This property need not be set.
	 */
	private VmwareHorizonDesktopDisplayProtocolSettings displayProtocolSettings;
	/**
	 * Adobe flash settings for remote sessions.
	 * 
	 */
	private VmwareHorizonDesktopAdobeFlashSettings flashSettings;
	/**
	 * Override of the mirage configuration for this Desktop. For RDS Desktops, this
	 * will be unset when retrieved, must be unset when created, and cannot be
	 * updated. The RDS Desktop's Farm's FarmMirageConfigurationOverrides will be
	 * used instead. Otherwise, this must be set. This property need not be set.
	 */
	private VmwareHorizonDesktopMirageConfigurationOverrides mirageConfigurationOverrides;
	/**
	 * Name of the category folder in the user's OS containing a shortcut to the
	 * desktop. Unset if the desktop does not belong to a category. Since Horizon
	 * 7.3 This property need not be set. This property defines valid folder names
	 * with a max length of 64 characters and up to 4 subdirectory levels. The
	 * subdirectories can be specified using a backslash, e.g.
	 * (dir1\dir2\dir3\dir4). Folder names can't start or end with a backslash nor
	 * can there be 2 or more backslashes together. Combinations such as (\dir1,
	 * dir1\dir2\, dir1\\dir2, dir1\\\dir2) are invalid. The windows reserved
	 * keywords (CON, PRN, NUL, AUX, COM1 - COM9, LPT1 - LPT9 etc.) are not allowed
	 * in subdirectory names.
	 */
	private String categoryFolderName;
	/**
	 * Client restrictions to be applied to Desktop. Currently it is valid for RDSH
	 * desktops. Since Horizon 7.3 This property has a default value of false. This
	 * property need not be set.
	 */
	private Boolean clientRestrictions;
	/**
	 * Locations of the category folder in the user's OS containing a shortcut to
	 * the desktop. The value must be set if categoryFolderName is provided. Since
	 * Horizon 7.5 This property need not be set.
	 */
	private List<String> shortcutLocations;
	/**
	 * Whether multiple sessions are allowed per user for this pool. This is valid
	 * for RDS Desktops. For other Desktops use allowMultipleSessionsPerUser Since
	 * Horizon 7.7 This property has a default value of false. This property need
	 * not be set.
	 */
	private Boolean allowMultipleSessionsPerUser;
	/**
	 * Supported session types for this desktop. If application sessions are
	 * selected to be supported then this desktop can be used for application pool
	 * creation. This will be useful when the machines in the pool support
	 * application remoting. Since Horizon 7.9 This property has a default value of
	 * "DESKTOP". This property need not be set. This property will be one of:
	 * "DESKTOP" Only desktop sessions are supported for this desktop. "APPLICATION"
	 * Only application sessions are supported for this desktop.
	 * "DESKTOP_AND_APPLICATION" Both desktop and application sessions are supported
	 * for this desktop.
	 */
	private String supportedSessionType;
	/**
	 * Indicates whether this desktop is managed by Horizon Cloud Services. This can
	 * be set to false only when cloudAssigned is false. This cannot be set to true,
	 * if any of the conditions are satisfied: user is provided. enabled is false.
	 * supportedSessionType is not "DESKTOP". globalEntitlement is set.
	 * userAssignment is "DEDICATED" and automaticAssignment is false. Local
	 * entitlements are configured Any of the machines in the pool have users
	 * assigned connectionServerRestrictions is not set Since Horizon 7.11 This
	 * property has a default value of false. This property need not be set.
	 */
	private Boolean cloudManaged;
	/**
	 * Indicates whether this desktop is assigned to a workspace in Horizon Cloud
	 * Services. This can be set to true from cloud session only and only when
	 * cloudManaged is true. This can be changed to false only if there are no
	 * entitlements. Since Horizon 7.11 This property has a default value of false.
	 * This property need not be set.
	 */
	private Boolean cloudAssigned;
	/**
	 * Indicates whether users should see the hostname of the machine assigned to
	 * them instead of displayName when they connect using View Client. This is
	 * applicable for dedicated pools only. If no machine is assigned to the user
	 * then "displayName (No machine assigned)" will be displayed in the client.
	 * Since Horizon 7.12 This property has a default value of false. This property
	 * need not be set.
	 */
	private Boolean displayAssignedMachineName;
}
