/// <summary>
        /// Create event from line.
        /// </summary>
        /// <param name="line">string in the required format for this adapter.</param>
        /// <returns>Newly created interval event.</returns>
        private IntervalEvent CreateEventFromLine(string line)
        {
            string[] split = line.Split(new char[] { this.delimiter }, StringSplitOptions.None);
            if (this.bindtimeEventType.Fields.Count != (split.Length - NumNonPayloadFields))
            {
                throw new InvalidOperationException("Number of payload columns in input file: " + (split.Length - NumNonPayloadFields) +
                                                    " does not match number of fields in EventType: " + this.bindtimeEventType.Fields.Count);
            }

            // Request event memory allocation from engine.
            IntervalEvent intervalEvent = CreateInsertEvent();

            // In case we just went into the stopping state.
            if (intervalEvent == null)
            {
                return(null);
            }

            // Set start and end times.
            intervalEvent.StartTime = DateTime.Parse(split[0], this.cultureInfo, DateTimeStyles.AssumeUniversal).ToUniversalTime();
            intervalEvent.EndTime   = DateTime.Parse(split[1], this.cultureInfo, DateTimeStyles.AssumeUniversal).ToUniversalTime();

            // Populate the payload fields.
            for (int ordinal = 0; ordinal < this.bindtimeEventType.FieldsByOrdinal.Count; ordinal++)
            {
                try
                {
                    int cepOrdinal             = this.inputOrdinalToCepOrdinal[ordinal];
                    CepEventTypeField evtField = this.bindtimeEventType.FieldsByOrdinal[cepOrdinal];

                    object value;

                    if (evtField.Type.ClrType.FullName == "System.Byte[]")
                    {
                        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                        value = encoding.GetBytes(split[ordinal + NumNonPayloadFields]);
                    }
                    else
                    {
                        Type t = Nullable.GetUnderlyingType(evtField.Type.ClrType) ?? evtField.Type.ClrType;
                        value = Convert.ChangeType(split[ordinal + NumNonPayloadFields], t, this.cultureInfo);
                    }

                    intervalEvent.SetField(cepOrdinal, value);
                }
                catch (AdapterException e)
                {
                    this.consoleTracer.WriteLine(e.Message + e.StackTrace);
                }
            }

            return(intervalEvent);
        }