/*
 * 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';

/**
 * The Edifact one way agreement.
 *
 */
class EdifactOneWayAgreement {
  /**
   * Create a EdifactOneWayAgreement.
   * @property {object} senderBusinessIdentity The sender business identity
   * @property {string} [senderBusinessIdentity.qualifier] The business
   * identity qualifier e.g. as2identity, ZZ, ZZZ, 31, 32
   * @property {string} [senderBusinessIdentity.value] The user defined
   * business identity value.
   * @property {object} receiverBusinessIdentity The receiver business identity
   * @property {string} [receiverBusinessIdentity.qualifier] The business
   * identity qualifier e.g. as2identity, ZZ, ZZZ, 31, 32
   * @property {string} [receiverBusinessIdentity.value] The user defined
   * business identity value.
   * @property {object} protocolSettings The EDIFACT protocol settings.
   * @property {object} [protocolSettings.validationSettings] The EDIFACT
   * validation settings.
   * @property {boolean}
   * [protocolSettings.validationSettings.validateCharacterSet] The value
   * indicating whether to validate character set in the message.
   * @property {boolean}
   * [protocolSettings.validationSettings.checkDuplicateInterchangeControlNumber]
   * The value indicating whether to check for duplicate interchange control
   * number.
   * @property {number}
   * [protocolSettings.validationSettings.interchangeControlNumberValidityDays]
   * The validity period of interchange control number.
   * @property {boolean}
   * [protocolSettings.validationSettings.checkDuplicateGroupControlNumber] The
   * value indicating whether to check for duplicate group control number.
   * @property {boolean}
   * [protocolSettings.validationSettings.checkDuplicateTransactionSetControlNumber]
   * The value indicating whether to check for duplicate transaction set
   * control number.
   * @property {boolean} [protocolSettings.validationSettings.validateEDITypes]
   * The value indicating whether to Whether to validate EDI types.
   * @property {boolean} [protocolSettings.validationSettings.validateXSDTypes]
   * The value indicating whether to Whether to validate XSD types.
   * @property {boolean}
   * [protocolSettings.validationSettings.allowLeadingAndTrailingSpacesAndZeroes]
   * The value indicating whether to allow leading and trailing spaces and
   * zeroes.
   * @property {boolean}
   * [protocolSettings.validationSettings.trimLeadingAndTrailingSpacesAndZeroes]
   * The value indicating whether to trim leading and trailing spaces and
   * zeroes.
   * @property {string}
   * [protocolSettings.validationSettings.trailingSeparatorPolicy] The trailing
   * separator policy. Possible values include: 'NotSpecified', 'NotAllowed',
   * 'Optional', 'Mandatory'
   * @property {object} [protocolSettings.framingSettings] The EDIFACT framing
   * settings.
   * @property {string}
   * [protocolSettings.framingSettings.serviceCodeListDirectoryVersion] The
   * service code list directory version.
   * @property {string} [protocolSettings.framingSettings.characterEncoding]
   * The character encoding.
   * @property {number} [protocolSettings.framingSettings.protocolVersion] The
   * protocol version.
   * @property {number} [protocolSettings.framingSettings.dataElementSeparator]
   * The data element separator.
   * @property {number} [protocolSettings.framingSettings.componentSeparator]
   * The component separator.
   * @property {number} [protocolSettings.framingSettings.segmentTerminator]
   * The segment terminator.
   * @property {number} [protocolSettings.framingSettings.releaseIndicator] The
   * release indicator.
   * @property {number} [protocolSettings.framingSettings.repetitionSeparator]
   * The repetition separator.
   * @property {string} [protocolSettings.framingSettings.characterSet] The
   * EDIFACT frame setting characterSet. Possible values include:
   * 'NotSpecified', 'UNOB', 'UNOA', 'UNOC', 'UNOD', 'UNOE', 'UNOF', 'UNOG',
   * 'UNOH', 'UNOI', 'UNOJ', 'UNOK', 'UNOX', 'UNOY', 'KECA'
   * @property {string}
   * [protocolSettings.framingSettings.decimalPointIndicator] The EDIFACT frame
   * setting decimal indicator. Possible values include: 'NotSpecified',
   * 'Comma', 'Decimal'
   * @property {string}
   * [protocolSettings.framingSettings.segmentTerminatorSuffix] The EDIFACT
   * frame setting segment terminator suffix. Possible values include:
   * 'NotSpecified', 'None', 'CR', 'LF', 'CRLF'
   * @property {object} [protocolSettings.envelopeSettings] The EDIFACT
   * envelope settings.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupAssociationAssignedCode] The group
   * association assigned code.
   * @property {string}
   * [protocolSettings.envelopeSettings.communicationAgreementId] The
   * communication agreement id.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.applyDelimiterStringAdvice] The value
   * indicating whether to apply delimiter string advice.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.createGroupingSegments] The value
   * indicating whether to create grouping segments.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.enableDefaultGroupHeaders] The value
   * indicating whether to enable default group headers.
   * @property {string}
   * [protocolSettings.envelopeSettings.recipientReferencePasswordValue] The
   * recipient reference password value.
   * @property {string}
   * [protocolSettings.envelopeSettings.recipientReferencePasswordQualifier]
   * The recipient reference password qualifier.
   * @property {string}
   * [protocolSettings.envelopeSettings.applicationReferenceId] The application
   * reference id.
   * @property {string}
   * [protocolSettings.envelopeSettings.processingPriorityCode] The processing
   * priority code.
   * @property {number}
   * [protocolSettings.envelopeSettings.interchangeControlNumberLowerBound] The
   * interchange control number lower bound.
   * @property {number}
   * [protocolSettings.envelopeSettings.interchangeControlNumberUpperBound] The
   * interchange control number upper bound.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.rolloverInterchangeControlNumber] The
   * value indicating whether to rollover interchange control number.
   * @property {string}
   * [protocolSettings.envelopeSettings.interchangeControlNumberPrefix] The
   * interchange control number prefix.
   * @property {string}
   * [protocolSettings.envelopeSettings.interchangeControlNumberSuffix] The
   * interchange control number suffix.
   * @property {string}
   * [protocolSettings.envelopeSettings.senderReverseRoutingAddress] The sender
   * reverse routing address.
   * @property {string}
   * [protocolSettings.envelopeSettings.receiverReverseRoutingAddress] The
   * receiver reverse routing address.
   * @property {string} [protocolSettings.envelopeSettings.functionalGroupId]
   * The functional group id.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupControllingAgencyCode] The group
   * controlling agency code.
   * @property {string} [protocolSettings.envelopeSettings.groupMessageVersion]
   * The group message version.
   * @property {string} [protocolSettings.envelopeSettings.groupMessageRelease]
   * The group message release.
   * @property {number}
   * [protocolSettings.envelopeSettings.groupControlNumberLowerBound] The group
   * control number lower bound.
   * @property {number}
   * [protocolSettings.envelopeSettings.groupControlNumberUpperBound] The group
   * control number upper bound.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.rolloverGroupControlNumber] The value
   * indicating whether to rollover group control number.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupControlNumberPrefix] The group
   * control number prefix.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupControlNumberSuffix] The group
   * control number suffix.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupApplicationReceiverQualifier] The
   * group application receiver qualifier.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupApplicationReceiverId] The group
   * application receiver id.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupApplicationSenderQualifier] The
   * group application sender qualifier.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupApplicationSenderId] The group
   * application sender id.
   * @property {string}
   * [protocolSettings.envelopeSettings.groupApplicationPassword] The group
   * application password.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.overwriteExistingTransactionSetControlNumber]
   * The value indicating whether to overwrite existing transaction set control
   * number.
   * @property {string}
   * [protocolSettings.envelopeSettings.transactionSetControlNumberPrefix] The
   * transaction set control number prefix.
   * @property {string}
   * [protocolSettings.envelopeSettings.transactionSetControlNumberSuffix] The
   * transaction set control number suffix.
   * @property {number}
   * [protocolSettings.envelopeSettings.transactionSetControlNumberLowerBound]
   * The transaction set control number lower bound.
   * @property {number}
   * [protocolSettings.envelopeSettings.transactionSetControlNumberUpperBound]
   * The transaction set control number upper bound.
   * @property {boolean}
   * [protocolSettings.envelopeSettings.rolloverTransactionSetControlNumber]
   * The value indicating whether to rollover transaction set control number.
   * @property {boolean} [protocolSettings.envelopeSettings.isTestInterchange]
   * The value indicating whether the message is a test interchange.
   * @property {string}
   * [protocolSettings.envelopeSettings.senderInternalIdentification] The
   * sender internal identification.
   * @property {string}
   * [protocolSettings.envelopeSettings.senderInternalSubIdentification] The
   * sender internal sub identification.
   * @property {string}
   * [protocolSettings.envelopeSettings.receiverInternalIdentification] The
   * receiver internal identification.
   * @property {string}
   * [protocolSettings.envelopeSettings.receiverInternalSubIdentification] The
   * receiver internal sub identification.
   * @property {object} [protocolSettings.acknowledgementSettings] The EDIFACT
   * acknowledgement settings.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.needTechnicalAcknowledgement]
   * The value indicating whether technical acknowledgement is needed.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.batchTechnicalAcknowledgements]
   * The value indicating whether to batch the technical acknowledgements.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.needFunctionalAcknowledgement]
   * The value indicating whether functional acknowledgement is needed.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.batchFunctionalAcknowledgements]
   * The value indicating whether to batch functional acknowledgements.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.needLoopForValidMessages] The
   * value indicating whether a loop is needed for valid messages.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.sendSynchronousAcknowledgement]
   * The value indicating whether to send synchronous acknowledgement.
   * @property {string}
   * [protocolSettings.acknowledgementSettings.acknowledgementControlNumberPrefix]
   * The acknowledgement control number prefix.
   * @property {string}
   * [protocolSettings.acknowledgementSettings.acknowledgementControlNumberSuffix]
   * The acknowledgement control number suffix.
   * @property {number}
   * [protocolSettings.acknowledgementSettings.acknowledgementControlNumberLowerBound]
   * The acknowledgement control number lower bound.
   * @property {number}
   * [protocolSettings.acknowledgementSettings.acknowledgementControlNumberUpperBound]
   * The acknowledgement control number upper bound.
   * @property {boolean}
   * [protocolSettings.acknowledgementSettings.rolloverAcknowledgementControlNumber]
   * The value indicating whether to rollover acknowledgement control number.
   * @property {object} [protocolSettings.messageFilter] The EDIFACT message
   * filter.
   * @property {string} [protocolSettings.messageFilter.messageFilterType] The
   * message filter type. Possible values include: 'NotSpecified', 'Include',
   * 'Exclude'
   * @property {object} [protocolSettings.processingSettings] The EDIFACT
   * processing Settings.
   * @property {boolean} [protocolSettings.processingSettings.maskSecurityInfo]
   * The value indicating whether to mask security information.
   * @property {boolean}
   * [protocolSettings.processingSettings.preserveInterchange] The value
   * indicating whether to preserve interchange.
   * @property {boolean}
   * [protocolSettings.processingSettings.suspendInterchangeOnError] The value
   * indicating whether to suspend interchange on error.
   * @property {boolean}
   * [protocolSettings.processingSettings.createEmptyXmlTagsForTrailingSeparators]
   * The value indicating whether to create empty xml tags for trailing
   * separators.
   * @property {boolean}
   * [protocolSettings.processingSettings.useDotAsDecimalSeparator] The value
   * indicating whether to use dot as decimal separator.
   * @property {array} [protocolSettings.envelopeOverrides] The EDIFACT
   * envelope override settings.
   * @property {array} [protocolSettings.messageFilterList] The EDIFACT message
   * filter list.
   * @property {array} [protocolSettings.schemaReferences] The EDIFACT schema
   * references.
   * @property {array} [protocolSettings.validationOverrides] The EDIFACT
   * validation override settings.
   * @property {array} [protocolSettings.edifactDelimiterOverrides] The EDIFACT
   * delimiter override settings.
   */
  constructor() {
  }

  /**
   * Defines the metadata of EdifactOneWayAgreement
   *
   * @returns {object} metadata of EdifactOneWayAgreement
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'EdifactOneWayAgreement',
      type: {
        name: 'Composite',
        className: 'EdifactOneWayAgreement',
        modelProperties: {
          senderBusinessIdentity: {
            required: true,
            serializedName: 'senderBusinessIdentity',
            type: {
              name: 'Composite',
              className: 'BusinessIdentity'
            }
          },
          receiverBusinessIdentity: {
            required: true,
            serializedName: 'receiverBusinessIdentity',
            type: {
              name: 'Composite',
              className: 'BusinessIdentity'
            }
          },
          protocolSettings: {
            required: true,
            serializedName: 'protocolSettings',
            type: {
              name: 'Composite',
              className: 'EdifactProtocolSettings'
            }
          }
        }
      }
    };
  }
}

module.exports = EdifactOneWayAgreement;
