/// <summary>
        /// Gets the reference display field definition.
        /// </summary>
        /// <param name="displayField">The display field.</param>
        /// <param name="pathToField">The path to field.</param>
        /// <returns>System.String.</returns>
        private string GetReferenceDisplayFieldDefinition(ReferenceDisplayFieldDefinition displayField, string pathToField)
        {
            var sb = new StringBuilder();
            sb.AppendFormat(
                @"
            
            {0} = new Cebos.Veyron.SharedTypes.ReferenceDisplayFieldDefinition
                    {{
                        Name = {1},
                        SystemName = {2},
                        Order = {3},
                        ColumnType = Cebos.Veyron.SharedTypes.ColumnTypes.{4},
                        Alias = {5},
                        CanView = false,
                        ShowOnSearch = {6},
                        ShowOnDetails = {7},
                        ShowLatestVersion = {8},
                        AllowLocalizedData = Cebos.Veyron.SharedTypes.Localization.LocalizationUtils.IsLocalizable({9}, {2})
                    }};
",
                pathToField,
                displayField.Name.ToLiteral(),
                displayField.SystemName.ToLiteral(),
                displayField.Order,
                displayField.ColumnType,
                displayField.Alias.ToLiteral(),
                displayField.ShowOnSearch.ToLiteral(),
                displayField.ShowOnDetails.ToLiteral(),
                displayField.ShowLatestVersion.ToLiteral(),
                displayField.DefinedIn.SystemName.ToLiteral());

            if (displayField.NumericType.HasValue)
                sb.AppendFormat(
                    @"
            {0}.NumericType = Cebos.Veyron.SharedTypes.NumericTypes.{1};
            {0}.NumberOfDigits = {2};
",
                    pathToField,
                    displayField.NumericType.Value,
                    displayField.NumberOfDigits);

            var guid = string.Format("v_{0}", Guid.NewGuid().ToString().Replace("-", "_"));

            if (displayField.DateTimeFormat.HasValue)
            {
                var varFormatName = string.Format("{0}Format", guid);
                var varDateFormatName = string.Format("{0}DateTimeFormat", guid);


                sb.AppendFormat(@"
            //Get DateTime settings from source property.
            var {2} = new ReferenceFieldsHelper().GetDateTimeFormat({0}, {1});
            var {3} = (Cebos.Veyron.SharedTypes.DateTimeFormat) Enum.Parse(typeof (Cebos.Veyron.SharedTypes.DateTimeFormat), {2}, true);
            
            {4}.DateTimeFormat = {3};
",
                                   displayField.DefinedIn.SystemName.ToLiteral(), //0
                                   displayField.SystemName.ToLiteral(),           //1
                                   varFormatName,                                 //2
                                   varDateFormatName,                             //3
                                   pathToField);                                  //4
            }

            if (displayField.ColumnType == ColumnTypes.Boolean)
            {
                var varCheckboxName = string.Format("{0}Checkbox", guid);

                sb.AppendFormat(@"
            // Get checkbox settings from source property.
            var {2} = new ReferenceFieldsHelper().GetCheckboxSettings({0}, {1});

            {3}.UndefinedLabel = {2}.UndefinedLabel;
            {3}.TrueLabel = {2}.TrueLabel;
            {3}.FalseLabel = {2}.FalseLabel;
",
                                   displayField.DefinedIn.SystemName.ToLiteral(), //0
                                   displayField.SystemName.ToLiteral(),           //1
                                   varCheckboxName,                   //2
                                   pathToField);                      //3
            }

            sb.AppendFormat(@"
            {{
                var _rcrType = typeof(Dynamic{1}.{1}Info);
            
                    var prop = _rcrType.GetProperty({2});
                    if (prop != null)
                    {{
                        var richAttr = (from d in prop.GetCustomAttributes(typeof({3}), false) select d).FirstOrDefault();
                        if (richAttr != null)
                        {{
                            {0}.IsRichText = true;
                        }}
                    }}
            }}
",
                            pathToField,
                            displayField.DefinedIn.SystemName,
                            displayField.SystemName.ToLiteral(),
                            typeof(RichTextAttribute).Name);

            sb.Append(GetReferenceProcessDefinition(displayField.DefinedIn, pathToField + ".DefinedIn"));
            sb.Append(GetReferenceProcessDefinition(displayField.ReferencedProcess, pathToField + ".ReferencedProcess"));
            sb.Append(GetReferenceJoinFieldDefinition(displayField.ReferenceField, pathToField + ".ReferenceField"));

            if (displayField.JoinFields.Any())
            {
                var joinFieldName = string.Format(@"j_{0}", Guid.NewGuid().ToString().Replace('-', '_'));

                sb.AppendFormat(
                    @"
            Cebos.Veyron.SharedTypes.ReferenceJoinFieldDefinition {0} = null;
",
                    joinFieldName);

                foreach (var joinField in displayField.JoinFields)
                {
                    sb.Append(GetReferenceJoinFieldDefinition(joinField, joinFieldName));
                    sb.AppendFormat(@"
            {0}.JoinFields.Add({1});", pathToField, joinFieldName);
                }
            }

            if (displayField.Subfields.Any())
            {
                var subfieldName = string.Format(@"s_{0}", Guid.NewGuid().ToString().Replace('-', '_'));

                sb.AppendFormat(
                    @"
            Cebos.Veyron.SharedTypes.ReferenceDisplayFieldDefinition {0} = null;
",
                    subfieldName);

                foreach (var subfield in displayField.Subfields)
                {
                    sb.Append(GetReferenceDisplayFieldDefinition(subfield, subfieldName));
                    sb.AppendFormat(@"
            {0}.Subfields.Add({1});
", pathToField, subfieldName);
                }
            }

            return sb.ToString();
        }
        /// <summary>
        /// Gets the reference display field definition.
        /// </summary>
        /// <param name="displayField">The display field.</param>
        /// <param name="pathToField">The path to field.</param>
        /// <returns>System.String.</returns>
        private string GetReferenceDisplayFieldDefinition(ReferenceDisplayFieldDefinition displayField, string pathToField)
        {
            var sb = new StringBuilder();

            sb.AppendFormat(
                @"
            
            {0} = new ReferenceDisplayFieldDefinition
                    {{
                        Name = {1},
                        SystemName = {2},
                        Order = {3},
                        ColumnType = ColumnTypes.{4},
                        Alias = {5},
                        CanView = false,
                        ShowOnSearch = {6},
                        ShowOnDetails = {7}
                    }};
",
                pathToField,
                displayField.Name.ToLiteral(),
                displayField.SystemName.ToLiteral(),
                displayField.Order,
                displayField.ColumnType.ToString(),
                displayField.Alias.ToLiteral(),
                displayField.ShowOnSearch.ToLiteral(),
                displayField.ShowOnDetails.ToLiteral());

            if (displayField.NumericType.HasValue)
                sb.AppendFormat(
                    @"
            {0}.NumericType = NumericTypes.{1};
            {0}.NumberOfDigits = {2};
",
                    pathToField,
                    displayField.NumericType.Value,
                    displayField.NumberOfDigits);

            if (displayField.DateTimeFormat.HasValue)
                sb.AppendFormat(@"
            {0}.DateTimeFormat = DateTimeFormat.{1};
",
                                pathToField,
                                displayField.DateTimeFormat.Value);

            sb.Append(GetReferenceProcessDefinition(displayField.DefinedIn, pathToField + ".DefinedIn"));
            sb.Append(GetReferenceProcessDefinition(displayField.ReferencedProcess, pathToField + ".ReferencedProcess"));
            sb.Append(GetReferenceJoinFieldDefinition(displayField.ReferenceField, pathToField + ".ReferenceField"));

            if (displayField.JoinFields.Any())
            {
                var joinFieldName = string.Format(@"j_{0}", Guid.NewGuid().ToString().Replace('-', '_'));

                sb.AppendFormat(
                    @"
            ReferenceJoinFieldDefinition {0} = null;
",
                    joinFieldName);

                foreach (var joinField in displayField.JoinFields)
                {
                    sb.Append(GetReferenceJoinFieldDefinition(joinField, joinFieldName));
                    sb.AppendFormat(@"
            {0}.JoinFields.Add({1});", pathToField, joinFieldName);
                }
            }

            if (displayField.Subfields.Any())
            {
                var subfieldName = string.Format(@"s_{0}", Guid.NewGuid().ToString().Replace('-', '_'));

                sb.AppendFormat(
                    @"
            ReferenceDisplayFieldDefinition {0} = null;
",
                    subfieldName);

                foreach (var subfield in displayField.Subfields)
                {
                    sb.Append(GetReferenceDisplayFieldDefinition(subfield, subfieldName));
                    sb.AppendFormat(@"
            {0}.Subfields.Add({1});
", pathToField, subfieldName);
                }
            }

            return sb.ToString();
        }