public override ITrackDownloadRequest Build()
        {
            this.CheckWholeObjectForCorrectnessOrThrow();

            Dictionary <string, string> customParameters = null;

            if (this.FieldsRawValuesByName != null)
            {
                customParameters = new Dictionary <string, string>(this.FieldsRawValuesByName);
            }

            this.EventParametersAccumulator = new UTEvent(
                this.EventParametersAccumulator.Timestamp,
                customParameters,
                this.EventParametersAccumulator.DefinitionId,
                this.EventParametersAccumulator.ItemId,
                this.EventParametersAccumulator.EngagementValue,
                this.EventParametersAccumulator.ParentEventId,
                this.EventParametersAccumulator.Text,
                this.EventParametersAccumulator.Duration,
                this.EventParametersAccumulator.TrackingInteractionId
                );

            UTDownload utDownload = new UTDownload(this.EventParametersAccumulator);

            TrackDownloadParameters result = new TrackDownloadParameters(null, utDownload);

            return(result);
        }
        public ITrackDownloadRequest FillTrackDownloadGaps(ITrackDownloadRequest userRequest)
        {
            var utDownload = userRequest.Download.DeepCopyUTDownload();

            //order matters!
            IUTSessionConfig mergedSessionConfig = this.SessionConfigMerger.FillSessionConfigGaps(userRequest.SessionConfig);

            var utEvent = this.ApplyActiveInteraction(utDownload, mergedSessionConfig);

            utEvent = this.ApplyDeviceIdentifier(utEvent);

            utDownload = new UTDownload(utEvent);

            return(new TrackDownloadParameters(mergedSessionConfig, utDownload));
        }