/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

'use strict';

/**
 * @summary A single file or multiple files to be downloaded to a compute node.
  *
 */
class ResourceFile {
  /**
   * Create a ResourceFile.
   * @property {string} [autoStorageContainerName] The storage container name
   * in the auto storage account. The autoStorageContainerName,
   * storageContainerUrl and httpUrl properties are mutually exclusive and one
   * of them must be specified.
   * @property {string} [storageContainerUrl] The URL of the blob container
   * within Azure Blob Storage. The autoStorageContainerName,
   * storageContainerUrl and httpUrl properties are mutually exclusive and one
   * of them must be specified. This URL must be readable and listable using
   * anonymous access; that is, the Batch service does not present any
   * credentials when downloading the blob. There are two ways to get such a
   * URL for a blob in Azure storage: include a Shared Access Signature (SAS)
   * granting read and list permissions on the blob, or set the ACL for the
   * blob or its container to allow public access.
   * @property {string} [httpUrl] The URL of the file to download. The
   * autoStorageContainerName, storageContainerUrl and httpUrl properties are
   * mutually exclusive and one of them must be specified. If the URL is Azure
   * Blob Storage, it must be readable using anonymous access; that is, the
   * Batch service does not present any credentials when downloading the blob.
   * There are two ways to get such a URL for a blob in Azure storage: include
   * a Shared Access Signature (SAS) granting read permissions on the blob, or
   * set the ACL for the blob or its container to allow public access.
   * @property {string} [blobPrefix] The blob prefix to use when downloading
   * blobs from an Azure Storage container. Only the blobs whose names begin
   * with the specified prefix will be downloaded. The property is valid only
   * when autoStorageContainerName or storageContainerUrl is used. This prefix
   * can be a partial filename or a subdirectory. If a prefix is not specified,
   * all the files in the container will be downloaded.
   * @property {string} [filePath] The location on the compute node to which to
   * download the file, relative to the task's working directory. If the
   * httpUrl property is specified, the filePath is required and describes the
   * path which the file will be downloaded to, including the filename.
   * Otherwise, if the autoStorageContainerName or storageContainerUrl property
   * is specified, filePath is optional and is the directory to download the
   * files to. In the case where filePath is used as a directory, any directory
   * structure already associated with the input data will be retained in full
   * and appended to the specified filePath directory. The specified relative
   * path cannot break out of the task's working directory (for example by
   * using '..').
   * @property {string} [fileMode] The file permission mode attribute in octal
   * format. This property applies only to files being downloaded to Linux
   * compute nodes. It will be ignored if it is specified for a resourceFile
   * which will be downloaded to a Windows node. If this property is not
   * specified for a Linux node, then a default value of 0770 is applied to the
   * file.
   */
  constructor() {
  }

  /**
   * Defines the metadata of ResourceFile
   *
   * @returns {object} metadata of ResourceFile
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'ResourceFile',
      type: {
        name: 'Composite',
        className: 'ResourceFile',
        modelProperties: {
          autoStorageContainerName: {
            required: false,
            serializedName: 'autoStorageContainerName',
            type: {
              name: 'String'
            }
          },
          storageContainerUrl: {
            required: false,
            serializedName: 'storageContainerUrl',
            type: {
              name: 'String'
            }
          },
          httpUrl: {
            required: false,
            serializedName: 'httpUrl',
            type: {
              name: 'String'
            }
          },
          blobPrefix: {
            required: false,
            serializedName: 'blobPrefix',
            type: {
              name: 'String'
            }
          },
          filePath: {
            required: false,
            serializedName: 'filePath',
            type: {
              name: 'String'
            }
          },
          fileMode: {
            required: false,
            serializedName: 'fileMode',
            type: {
              name: 'String'
            }
          }
        }
      }
    };
  }
}

module.exports = ResourceFile;
