private static SourceField CreateFileSourceField(IProcessField field, ExpressionObjectBase owner)
        {
            var result = new SourceField(owner)
                             {
                                 DataType = NodeDataType.File,
                                 Name = field.Name,
                                 ConnectorOut = { DataType = NodeDataType.File, Name = field.Name },
                                 SetName = SourceFieldSetNames.Item,
                                 InnerName = field.SystemName,
                                 SystemName = field.SystemName,
                                 SubfieldsRetriever = new FileSubfieldsRetriever(SourceFieldSetNames.Item)
                             };

            return result;
        }
        private static SourceField CreateSampleSourceField(IProcessField field, ExpressionObjectBase owner)
        {
            var result = new SourceField(owner)
                             {
                                 DataType = NodeDataType.List,
                                 Name = field.Name,
                                 ConnectorOut = { DataType = NodeDataType.List, Name = field.Name },
                                 SetName = SourceFieldSetNames.Item,
                                 InnerName = string.Format("{0}List", field.SystemName),
                                 SystemName = string.Format("{0}List", field.SystemName),
                                 SubfieldsRetriever = new SampleSubfieldsRetriever(SourceFieldSetNames.Item)
                             };

            return result;
        }
        /// <summary>
        /// Creates the reverse cross reference source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        /// <exception cref="System.InvalidOperationException">Invalid field type.</exception>
        private static SourceField CreateReverseCrossReferenceSourceField(IProcessField field, ExpressionObjectBase owner)
        {
            if (field.ColumnType == ColumnTypes.ReverseReference)
            {
                return new SourceField(owner)
                {
                    DataType = NodeDataType.ReverseCrossReference,
                    Name = field.Name,
                    ConnectorOut = { DataType = NodeDataType.ReverseCrossReference, Name = field.Name },
                    SetName = SourceFieldSetNames.Item,
                    InnerName = field.SystemName,
                    SystemName = string.Format("{0}Member", field.SystemName),
                    SubfieldsRetriever = new ReverseCrossReferenceSubfieldsRetriever(field.Id)
                };
            }

            if (field.ColumnType == ColumnTypes.ReverseMultiReference)
            {
                var result = new SourceField(owner)
                    {
                        DataType = NodeDataType.List,
                        Name = field.Name,
                        ConnectorOut = { DataType = NodeDataType.List, Name = field.Name },
                        SetName = SourceFieldSetNames.Item,
                        InnerName = string.Format("{0}List", field.SystemName),
                        SystemName = string.Format("{0}List", field.SystemName),
                        SubfieldsRetriever = new ReverseCrossReferenceSubfieldsRetriever(field.Id)
                    };

                return result;
            }

            throw new InvalidOperationException("Invalid field type.");
        }
        /// <summary>
        /// Creates the result source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateResultSourceField(IProcessField field, ExpressionObjectBase owner)
        {
            var result = new SourceField(owner)
            {
                DataType = NodeDataType.Result,
                Name = field.Name,
                ConnectorOut = { DataType = NodeDataType.Result, Name = field.Name },
                SetName = SourceFieldSetNames.Item,
                InnerName = field.SystemName,
                SystemName = field.SystemName
            };

            return result;
        }
        /// <summary>
        /// Creates the generic source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateGenericSourceField(IProcessField field, ExpressionObjectBase owner)
        {
            var dataType = SourceNodeFactory.GetDataType(GetType(field.ColumnType));
            var result = new SourceField(owner)
                {
                    DataType = dataType,
                    Name = field.Name,
                    ConnectorOut = { DataType = dataType, Name = field.Name },
                    SetName = SourceFieldSetNames.Item,
                    InnerName = field.SystemName,
                    SystemName = field.SystemName
                };

            return result;
        }
        /// <summary>
        /// Creates the source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateSourceField(IProcessField field, ExpressionObjectBase owner)
        {
            switch (field.ColumnType)
            {
                case ColumnTypes.Reference:
                case ColumnTypes.MultiReference:
                    return CreateCrossReferenceSourceField(field, owner);

                case ColumnTypes.ReverseReference:
                case ColumnTypes.ReverseMultiReference:
                    return CreateReverseCrossReferenceSourceField(field, owner);

                case ColumnTypes.Checklist:
                    return CreateChecklistSourceField(field, owner);

                case ColumnTypes.DisplayList:
                    return CreateDisplayListSourceField(field, owner);

                case ColumnTypes.Sample:
                    return CreateSampleSourceField(field, owner);

                case ColumnTypes.File:
                    return CreateFileSourceField(field, owner);

                case ColumnTypes.Result:
                    return CreateResultSourceField(field, owner);

                default:
                    return CreateGenericSourceField(field, owner);
            }
        }