/// <summary>
        /// Creates the XML payload for the CopyCourseContent Course API Request
        /// </summary>
        /// <param name="request"><see cref="CopyCourseContentRequest">object</see></param>
        /// <returns><see cref="API.ContentCopyRequestEx"/>object</returns>
        private API.ContentCopyRequestEx SetCopyCourseContentRequest(CopyCourseContentRequest request)
        {
            // Initialize and Set the CopyCourseContentRequest
            API.ContentCopyRequestEx copyCourseContent = new API.ContentCopyRequestEx();
            copyCourseContent.ClientString = request.ClientString;
            copyCourseContent.CopyContentOptions = CONTENT_COPY_OPTIONS;
            copyCourseContent.DestinationCourseIdentifiers = new API.CourseIdentifier[1];
            copyCourseContent.DestinationCourseIdentifiers[0] = new API.CourseIdentifier();
            copyCourseContent.DestinationCourseIdentifiers[0].ID = request.DestinationCourseCallNumber;
            copyCourseContent.DestinationCourseIdentifiers[0].MappingType = API.MappedIDType.CallNumber;
            copyCourseContent.SourceClientSortString = request.SourceClientSortString;
            copyCourseContent.SourceCourseIdentifier = new API.CourseIdentifier();

            // Set the Source Coruse Identifier accordingly
            if (request.SourceCourseId != null)
            {
                copyCourseContent.SourceCourseIdentifier.ID = request.SourceCourseId;
                copyCourseContent.SourceCourseIdentifier.MappingType = API.MappedIDType.CourseID;
            }
            else
            {
                copyCourseContent.SourceCourseIdentifier.ID = request.SourceCourseCallNumber;
                copyCourseContent.SourceCourseIdentifier.MappingType = API.MappedIDType.CallNumber;
            }

            return copyCourseContent;
        }
        /// <summary>
        /// Generates a CopyCourseContent Course API Request
        /// </summary>
        /// <param name="request"><see cref="CopyCourseContentRequest">object</see></param>
        /// <returns><see cref="Response"/>object</returns>
        public Response CopyCourseContent(CopyCourseContentRequest request)
        {
            API.ContentCopyRequestEx copyContent = null;
            Response response = null;

            try
            {
                // Validate the Request Object
                ValidateCopyCourseContentRequest(request);

                // Intialize and Set the CopyCourseContentRequest
                copyContent = SetCopyCourseContentRequest(request);

                // Build the Response object from the SOAP response
                response = ReadCopyCourseContentResponse(copyContent);
            }
            catch (Exception ex)
            {
                Logger.Error("Exception from CopyCourseContent: ", ex);
                throw;
            }
            finally
            {
                if (this.courseAPI != null)
                    this.courseAPI.Close();
            }

            return response;
        }
 /// <summary>
 /// Performs validation and business logic checks on the CopyCourseContentRequest values
 /// </summary>
 /// <param name="request"><see cref="CopyCourseContentRequest">object</see></param>
 /// <exception cref="ArgumentNullException">Thrown when a required value is not set in the <see cref="CopyCourseContentRequest">object</see></exception>
 /// <exception cref="ArgumentException">Thrown when there is a conflict between the values in the <see cref="CopyCourseContentRequest">object</see></exception>
 private static void ValidateCopyCourseContentRequest(CopyCourseContentRequest request)
 {
     // Perform a Parameter Validation and Business Logice Check on the Request
     if (request.ClientString == null)
         throw new ArgumentNullException("The ClientString value is required.  Please correct and try the reqeust again.");
     else if (request.DestinationCourseCallNumber == null)
         throw new ArgumentNullException("The DestinationCourseCallNumber value is required.  Please correct and try the request again.");
     else if (request.SourceClientSortString == null)
         throw new ArgumentNullException("The SourceClientSortString value is required.  Please correct and try the request again.");
     else if (request.SourceCourseCallNumber == null && request.SourceCourseId == null)
         throw new ArgumentNullException("Either a SourceCourseCallNumber or SourceCourseId value is required.  Please correct and try the request again.");
     else if (request.SourceCourseCallNumber != null && request.SourceCourseId != null)
         throw new ArgumentException("The SourceCourseCallNumber and SourceCourseId values are mutually exclusive.  Only set one of the values for a given Source Coruse.  Please correct and try the request again.");
 }