/// <summary>
 /// Initializes a new instance of the <see cref="ImageManagementAssetUpdateSpec" /> class.
 /// </summary>
 /// <param name="additionalDetails">Additional details about image management asset..</param>
 /// <param name="cloneType">Image management asset clone type. * FULL_CLONE: Image management asset to be used in full clone automated desktop pool. * INSTANT_CLONE: Image management asset to be used in instant clone desktop pool/farm. (required).</param>
 /// <param name="imageType">Image management asset image type. * RDSH_APPS: Image management asset to be used for farm creation which is be used in application. * RDSH_DESKTOP: Image management asset is for farm creation to be created. * VDI_DESKTOP: Image management asset is available for desktops/farms to be created. (required).</param>
 /// <param name="status">Image management asset status. * AVAILABLE: Image management asset is available for desktop pools/farms to be created. * DEPLOYING_VM: Image management asset is deploying VM on the virtual center. * DEPLOYMENT_DONE: Image management asset VM deployed on the virtual center. * DELETED: Image management asset has been deleted. * DISABLED: Image management asset has been disabled and no further pool/farm operation can be done using the same. * FAILED: Image management asset creation has failed. * REPLICATING: Copying the specialized images across all virtual centers. * RETRY_PENDING: When image management asset creation has failed, retry action is pending for asset to be created. * SPECIALIZING_VM: Image management asset is being published and specialized internally like installing agents etc. (required).</param>
 public ImageManagementAssetUpdateSpec(Dictionary <string, string> additionalDetails = default(Dictionary <string, string>), CloneTypeEnum cloneType = default(CloneTypeEnum), ImageTypeEnum imageType = default(ImageTypeEnum), StatusEnum status = default(StatusEnum))
 {
     // to ensure "cloneType" is required (not null)
     if (cloneType == null)
     {
         throw new InvalidDataException("cloneType is a required property for ImageManagementAssetUpdateSpec and cannot be null");
     }
     else
     {
         this.CloneType = cloneType;
     }
     // to ensure "imageType" is required (not null)
     if (imageType == null)
     {
         throw new InvalidDataException("imageType is a required property for ImageManagementAssetUpdateSpec and cannot be null");
     }
     else
     {
         this.ImageType = imageType;
     }
     // to ensure "status" is required (not null)
     if (status == null)
     {
         throw new InvalidDataException("status is a required property for ImageManagementAssetUpdateSpec and cannot be null");
     }
     else
     {
         this.Status = status;
     }
     this.AdditionalDetails = additionalDetails;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ImageManagementAssetCreateSpec" /> class.
 /// </summary>
 /// <param name="additionalDetails">Additional details about image management asset..</param>
 /// <param name="baseSnapshotId">Virtual machine snapshot. Must be set if vm_template_id is unset..</param>
 /// <param name="baseVmId">Virtual machine ID. Must be set if vm_template_id is unset..</param>
 /// <param name="cloneType">Image management asset clone type. * FULL_CLONE: Image management asset to be used in full clone automated desktop pool. * INSTANT_CLONE: Image management asset to be used in instant clone desktop pool/farm. (required).</param>
 /// <param name="imStreamId">Image management stream to which this asset belongs to. (required).</param>
 /// <param name="imVersionId">Image management version to which this asset belongs to. (required).</param>
 /// <param name="imageType">Image management asset image type. * RDSH_APPS: Image management asset to be used for farm creation which is be used in application. * RDSH_DESKTOP: Image management asset is for farm creation to be created. * VDI_DESKTOP: Image management asset is available for desktops/farms to be created. (required).</param>
 /// <param name="status">Image management asset status. * AVAILABLE: Image management asset is available for desktop pools/farms to be created. * DEPLOYING_VM: Image management asset is deploying VM on the virtual center. * DEPLOYMENT_DONE: Image management asset VM deployed on the virtual center. * DELETED: Image management asset has been deleted. * DISABLED: Image management asset has been disabled and no further pool/farm operation can be done using the same. * FAILED: Image management asset creation has failed. * REPLICATING: Copying the specialized images across all virtual centers. * RETRY_PENDING: When image management asset creation has failed, retry action is pending for asset to be created. * SPECIALIZING_VM: Image management asset is being published and specialized internally like installing agents etc. (required).</param>
 /// <param name="vcenterId">Virtual Center where this asset is created. (required).</param>
 /// <param name="vmTemplateId">Virtual machine template ID..</param>
 public ImageManagementAssetCreateSpec(Dictionary <string, string> additionalDetails = default(Dictionary <string, string>), string baseSnapshotId = default(string), string baseVmId = default(string), CloneTypeEnum cloneType = default(CloneTypeEnum), string imStreamId = default(string), string imVersionId = default(string), ImageTypeEnum imageType = default(ImageTypeEnum), StatusEnum status = default(StatusEnum), string vcenterId = default(string), string vmTemplateId = default(string))
 {
     // to ensure "cloneType" is required (not null)
     if (cloneType == null)
     {
         throw new InvalidDataException("cloneType is a required property for ImageManagementAssetCreateSpec and cannot be null");
     }
     else
     {
         this.CloneType = cloneType;
     }
     // to ensure "imStreamId" is required (not null)
     if (imStreamId == null)
     {
         throw new InvalidDataException("imStreamId is a required property for ImageManagementAssetCreateSpec and cannot be null");
     }
     else
     {
         this.ImStreamId = imStreamId;
     }
     // to ensure "imVersionId" is required (not null)
     if (imVersionId == null)
     {
         throw new InvalidDataException("imVersionId is a required property for ImageManagementAssetCreateSpec and cannot be null");
     }
     else
     {
         this.ImVersionId = imVersionId;
     }
     // to ensure "imageType" is required (not null)
     if (imageType == null)
     {
         throw new InvalidDataException("imageType is a required property for ImageManagementAssetCreateSpec and cannot be null");
     }
     else
     {
         this.ImageType = imageType;
     }
     // to ensure "status" is required (not null)
     if (status == null)
     {
         throw new InvalidDataException("status is a required property for ImageManagementAssetCreateSpec and cannot be null");
     }
     else
     {
         this.Status = status;
     }
     // to ensure "vcenterId" is required (not null)
     if (vcenterId == null)
     {
         throw new InvalidDataException("vcenterId is a required property for ImageManagementAssetCreateSpec and cannot be null");
     }
     else
     {
         this.VcenterId = vcenterId;
     }
     this.AdditionalDetails = additionalDetails;
     this.BaseSnapshotId    = baseSnapshotId;
     this.BaseVmId          = baseVmId;
     this.VmTemplateId      = vmTemplateId;
 }