/// <summary>
 /// Configures the specified property info.
 /// </summary>
 /// <param name="propertyInfo">The property info.</param>
 /// <param name="fieldConfiguration">The field configuration.</param>
 /// <returns>SitecoreFieldFieldValueConfiguration.</returns>
 public SitecoreFieldFieldValueConfiguration Configure(PropertyInfo propertyInfo,
                                                       SitecoreFieldConfiguration fieldConfiguration)
 {
     var config = new SitecoreFieldFieldValueConfiguration();
     
     config.FieldId =  new ID(this.FieldId);
     config.FieldValue = this.FieldValue;
     
     return config;
 }
Example #2
0
        public void GetField_FieldContainsInvalidValidEnum_ThrowsException()
        {
            //Assign
            string fieldValue = "hello world";
            var    fieldId    = Guid.NewGuid();

            var item  = Helpers.CreateFakeItem(fieldId, fieldValue);
            var field = item.Fields[new ID(fieldId)];

            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new SitecoreFieldEnumMapper();

            //Act
            var result = (StubEnum)mapper.GetField(field, config, null);

            //Assert
        }
        public void Setup_SubMapperIsAssigned()
        {
            //Assign
            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(StubClass).GetProperty("IList");

            var mapper    = new SitecoreFieldIEnumerableMapper();
            var subMapper = new SitecoreFieldDoubleMapper();

            var args = new DataMapperResolverArgs(null, config);

            args.DataMappers = new[] { subMapper };

            //Act
            mapper.Setup(args);

            //Assert
            Assert.AreEqual(subMapper, mapper.Mapper);
        }
        public void CanHandle_IncorrectConfigMappedClass_ReturnsFalse()
        {
            //Assign
            var mapper = new SitecoreQueryMapper(null);
            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(StubClass).GetProperty("StubMapped");

            var context = Context.Create(Utilities.CreateStandardResolver());

            context.Load(new OnDemandLoader <SitecoreTypeConfiguration>(typeof(StubClass)));



            //Act
            var result = mapper.CanHandle(config, context);

            //Assert
            Assert.IsFalse(result);
        }
        public void SetField_FielNonRichText_ValueWrittenToField()
        {
            //Assign
            var expected = "<p>Test with <a href=\"~/link.aspx?_id=BFD7975DF42F41E19DDA9A38E971555F&amp;_z=z\">link</a></p>";

            using (Db database = new Db
            {
                new Sitecore.FakeDb.DbItem("TestItem")
                {
                    new DbField(FieldName)
                    {
                    }
                }
            })
            {
                var item  = database.GetItem("/sitecore/content/TestItem");
                var field = item.Fields[FieldName];

                var mapper = new SitecoreFieldStringMapper();
                var config = new SitecoreFieldConfiguration();
                config.Setting = SitecoreFieldSettings.RichTextRaw;

                Sitecore.Context.Site = Sitecore.Configuration.Factory.GetSite("website");

                using (new ItemEditing(item, true))
                {
                    field.Value = string.Empty;
                }

                //Act
                using (new ItemEditing(item, true))
                {
                    mapper.SetField(field, expected, config, null);
                }

                Sitecore.Context.Site = null;

                //Assert
                Assert.AreEqual(expected, field.Value);
            }
        }
        public void GetField_RichTextSettingsIsRaw_StringIsReturnedWithoutEscaping()
        {
            //Assign
            var fieldValue = "<p>Test with <a href=\"~/link.aspx?_id=BFD7975DF42F41E19DDA9A38E971555F&amp;_z=z\">link</a></p>";

            using (Db database = new Db
            {
                new Sitecore.FakeDb.DbItem("TestItem")
                {
                    new DbField(FieldName)
                    {
                        Value = fieldValue
                    }
                }
            })
            {
                var item  = database.GetItem("/sitecore/content/TestItem");
                var field = item.Fields[FieldName];

                var mapper = new SitecoreFieldStringMapper();
                var config = new SitecoreFieldConfiguration();
                config.Setting = SitecoreFieldSettings.RichTextRaw;

                Sitecore.Context.Site = Sitecore.Configuration.Factory.GetSite("website");

                using (new ItemEditing(item, true))
                {
                    field.Value = fieldValue;
                }



                //Act
                var result = mapper.GetField(field, config, null) as string;

                Sitecore.Context.Site = null;

                //Assert
                Assert.AreEqual(fieldValue, result);
            }
        }
        /// <summary>
        /// Configures the specified property info.
        /// </summary>
        /// <param name="propertyInfo">The property info.</param>
        /// <param name="config">The config.</param>
        public void Configure(PropertyInfo propertyInfo, SitecoreFieldConfiguration config)
        {
            config.FieldName = this.FieldName;

            if (config.FieldName.IsNullOrEmpty())
            {
                config.FieldName = propertyInfo.Name;
            }

            config.Setting   = this.Setting;
            config.CodeFirst = this.CodeFirst;

            if (FieldId.IsNotNullOrEmpty())
            {
                config.FieldId = new ID(this.FieldId);
            }

            config.FieldSource                 = this.FieldSource;
            config.FieldTitle                  = this.FieldTitle;
            config.FieldType                   = this.FieldType;
            config.CustomFieldType             = this.CustomFieldType;
            config.IsShared                    = this.IsShared;
            config.IsUnversioned               = this.IsUnversioned;
            config.SectionName                 = this.SectionName;
            config.Setting                     = this.Setting;
            config.FieldSortOrder              = this.FieldSortOrder;
            config.SectionSortOrder            = this.SectionSortOrder;
            config.ValidationErrorText         = this.ValidationErrorText;
            config.ValidationRegularExpression = this.ValidationRegularExpression;
            config.IsRequired                  = this.IsRequired;
            config.UrlOptions                  = this.UrlOptions;


            //code first configuration
            var fieldFieldValues = propertyInfo.GetCustomAttributes(typeof(SitecoreFieldFieldValueAttribute), true).Cast <SitecoreFieldFieldValueAttribute>();
            var ffvConfigs       = fieldFieldValues.Select(x => x.Configure(propertyInfo, config));

            config.FieldValueConfigs = ffvConfigs.ToList();

            base.Configure(propertyInfo, config);
        }
Example #8
0
        public void GetField_FieldIsEmpty_RulesListContains0Rules()
        {
            //Assign
            var templateId = ID.NewID;
            var targetId   = ID.NewID;
            var fieldName  = "Field";

            using (Db database = new Db
            {
                new DbTemplate(templateId)
                {
                    { fieldName, "" }
                },
                new Sitecore.FakeDb.DbItem("Target", targetId, templateId),
            })
            {
                var fieldValue = "";

                var item  = database.GetItem("/sitecore/content/Target");
                var field = item.Fields[fieldName];

                var mapper  = new SitecoreFieldRulesMapper();
                var config  = new SitecoreFieldConfiguration();
                var context = (Context)null;

                config.PropertyInfo = typeof(StubClass).GetProperty("Property");

                mapper.Setup(new DataMapperResolverArgs(context, config));

                using (new ItemEditing(item, true))
                {
                    field.Value = fieldValue;
                }

                //Act
                var result = mapper.GetField(field, null, null) as RuleList <StubRuleContext>;

                //Assert
                Assert.AreEqual(0, result.Count);
            }
        }
        public void GetField_FieldContainsEmptyString_ReturnsNull()
        {
            //Assign
            string fieldValue = string.Empty;
            var    fieldId    = Guid.NewGuid();

            var item  = Helpers.CreateFakeItem(fieldId, fieldValue);
            var field = item.Fields[new ID(fieldId)];

            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new SitecoreFieldNullableEnumMapper();

            //Act
            var result = (StubEnum?)mapper.GetField(field, config, null);

            //Assert
            Assert.IsNull(result);
        }
        public void GetField_FieldContainsEmptyString_ThowsMapperException()
        {
            //Assign
            string fieldValue = string.Empty;
            var    item       = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldEnumMapper/GetField");
            var    field      = item.Fields[FieldName];
            var    config     = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new SitecoreFieldEnumMapper();

            using (new ItemEditing(item, true))
            {
                field.Value = fieldValue;
            }

            //Act
            var result = (StubEnum)mapper.GetField(field, config, null);

            //Assert
        }
Example #11
0
        public void Setup_SubMapperMissing_ExceptionThrown()
        {
            //Assign
            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(StubClass).GetProperty("IEnumerable");

            var mapper    = new SitecoreFieldIEnumerableMapper();
            var subMapper = new SitecoreFieldDoubleMapper();

            var args = new DataMapperResolverArgs(null, config);

            args.DataMappers = new[] { subMapper };

            //Act
            Assert.Throws <MapperException>(() =>
            {
                mapper.Setup(args);
            });

            //Assert
        }
        public void GetField_FieldContainsData_StringIsReturned()
        {
            //Assign
            var fieldValue = "hello world";

            var item  = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldStringMapper/GetField");
            var field = item.Fields[FieldName];

            var mapper = new SitecoreFieldStringMapper();
            var config = new SitecoreFieldConfiguration();

            using (new ItemEditing(item, true))
            {
                field.Value = fieldValue;
            }

            //Act
            var result = mapper.GetField(field, config, null) as string;

            //Assert
            Assert.AreEqual(fieldValue, result);
        }
        /// <summary>
        /// Gets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.Object.</returns>
        public override object GetField(Sitecore.Data.Fields.Field field, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            if (field == null)
            {
                return(string.Empty);
            }

            if (config.Setting == SitecoreFieldSettings.RichTextRaw)
            {
                return(field.Value);
            }

            if (_notRichTextSet.Contains(field.ID.Guid))
            {
                return(field.Value);
            }

            if (field.TypeKey == _richTextKey)
            {
                RenderFieldArgs renderFieldArgs = new RenderFieldArgs();
                renderFieldArgs.Item           = field.Item;
                renderFieldArgs.FieldName      = field.Name;
                renderFieldArgs.DisableWebEdit = true;
                CorePipeline.Run("renderField", renderFieldArgs);

                return(renderFieldArgs.Result.FirstPart + renderFieldArgs.Result.LastPart);

                //FieldRenderer renderer = new FieldRenderer();
                //renderer.Item = field.Item;
                //renderer.FieldName = field.Name;
                //renderer.Parameters = string.Empty;
                //renderer.DisableWebEditing = true;
                //return renderer.Render();
            }

            _notRichTextSet.Add(field.ID.Guid);

            return(field.Value);
        }
Example #14
0
        public void GetField_FieldContainsValidEnumInteger_ReturnsEnum()
        {
            //Assign
            string   fieldValue = "2";
            StubEnum expected   = StubEnum.Value2;
            var      fieldId    = Guid.NewGuid();

            var item  = Helpers.CreateFakeItem(fieldId, fieldValue);
            var field = item.Fields[new ID(fieldId)];

            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new SitecoreFieldEnumMapper();

            //Act
            var result = (StubEnum)mapper.GetField(field, config, null);

            //Assert
            Assert.AreEqual(expected, result);
        }
        public void SetFieldValue_NullPassed_ReturnsNull()
        {
            //Assign
            using (Db database = new Db
            {
                new DbItem("Target")
            })
            {
                var item      = database.GetItem("/sitecore/content/Target");
                var mapper    = new SitecoreFieldItemMapper();
                var config    = new SitecoreFieldConfiguration();
                var context   = Context.Create(Utilities.CreateStandardResolver());
                var service   = new SitecoreService(database.Database, context);
                var scContext = new SitecoreDataMappingContext(null, item, service);

                //Act
                var result = mapper.SetFieldValue(null, config, scContext);

                //Assert
                Assert.Null(result);
            }
        }
Example #16
0
        public void MapToCms_SetsValueByFieldName_FieldValueUpdated()
        {
            //Assign
            var fieldValue = "test value set";
            var fieldName  = "Field";
            var database   = Sitecore.Configuration.Factory.GetDatabase("master");
            var item       = database.GetItem("/sitecore/content/Tests/DataMappers/AbstractSitecoreFieldMapper/MapToCms");

            var config = new SitecoreFieldConfiguration();

            config.FieldName    = fieldName;
            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new StubMapper(null);

            mapper.Setup(new DataMapperResolverArgs(null, config));
            mapper.Value = fieldValue;

            var context = new SitecoreDataMappingContext(new Stub(), item, null);

            using (new SecurityDisabler())
            {
                item.Editing.BeginEdit();
                item[fieldName] = string.Empty;
                item.Editing.EndEdit();
            }

            //Act
            using (new SecurityDisabler())
            {
                item.Editing.BeginEdit();
                mapper.MapToCms(context);
                item.Editing.EndEdit();
            }
            //Assert
            var itemAfter = database.GetItem("/sitecore/content/Tests/DataMappers/AbstractSitecoreFieldMapper/MapToCms");

            Assert.AreEqual(mapper.Value, itemAfter[fieldName]);
        }
Example #17
0
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="Glass.Mapper.MapperException">No item with ID {0}. Can not update File Item field.Formatted(newId)</exception>
        public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            File file = value as File;

            var item = field.Item;

            FileField fileField = new FileField(field);

            if (file == null)
            {
                fileField.Clear();
                return;
            }

            if (fileField.MediaID.Guid != file.Id)
            {
                if (file.Id == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, fileField.InnerField.ID, fileField.MediaItem.Database.Name, fileField.MediaID, fileField.MediaItem.Paths.FullPath);
                    fileField.RemoveLink(link);
                }
                else
                {
                    ID   newId  = new ID(file.Id);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        fileField.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, fileField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        fileField.UpdateLink(link);
                    }
                    else
                    {
                        throw new MapperException("No item with ID {0}. Can not update File Item field".Formatted(newId));
                    }
                }
            }
        }
        public void SetField_ForceRenderFieldPipeline_ThrowsException()
        {
            //Assign

            var fieldValue = "<p>hello world</p>";
            var expected   = "&lt;p&gt;hello world&lt;/p&gt;";

            using (Db database = new Db
            {
                new Sitecore.FakeDb.DbItem("TestItem")
                {
                    new DbField(FieldName)
                    {
                        Value = fieldValue
                    }
                }
            })
            {
                var item  = database.GetItem("/sitecore/content/TestItem");
                var field = item.Fields[FieldName];

                var mapper = new SitecoreFieldStringMapper();
                var config = new SitecoreFieldConfiguration();
                config.Setting      = SitecoreFieldSettings.ForceRenderField;
                config.PropertyInfo = new FakePropertyInfo(typeof(string), "String", typeof(StubClass));
                using (new ItemEditing(item, true))
                {
                    field.Value = fieldValue;
                }



                //Act
                Assert.Throws <NotSupportedException>(() => mapper.SetField(field, fieldValue, config, null));

                //Assert
            }
        }
        public override object GetField(Field field, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            ImageField        scImg = new ImageField(field);
            AdvanceImageField img   = new AdvanceImageField();

            var xml = new XmlDocument();

            xml.LoadXml(scImg.Value);
            var id     = xml.DocumentElement.GetAttribute("mediaid");
            var cropx  = xml.DocumentElement.HasAttribute("cropx") ? xml.DocumentElement.GetAttribute("cropx") : string.Empty;
            var cropy  = xml.DocumentElement.HasAttribute("cropy") ? xml.DocumentElement.GetAttribute("cropy") : string.Empty;
            var focusx = xml.DocumentElement.HasAttribute("focusx") ? xml.DocumentElement.GetAttribute("focusx") : string.Empty;
            var focusy = xml.DocumentElement.HasAttribute("focusy") ? xml.DocumentElement.GetAttribute("focusy") : string.Empty;

            float cx, cy, fx, fy;

            float.TryParse(cropx, out cx);
            float.TryParse(cropy, out cy);
            float.TryParse(focusx, out fx);
            float.TryParse(focusy, out fy);

            img.CropX    = cx;
            img.CropY    = cy;
            img.FocusX   = fx;
            img.FocusY   = fy;
            img.Alt      = scImg.Alt;
            img.Border   = scImg.Border;
            img.Class    = scImg.Class;
            img.Width    = Convert.ToInt32(string.IsNullOrEmpty(scImg.Width) ? "0" : scImg.Width);
            img.Height   = Convert.ToInt32(string.IsNullOrEmpty(scImg.Height) ? "0" : scImg.Height);
            img.HSpace   = Convert.ToInt32(string.IsNullOrEmpty(scImg.HSpace) ? "0" : scImg.HSpace);
            img.Language = scImg.MediaLanguage;
            img.MediaId  = scImg.MediaID.ToGuid();
            img.Src      = MediaManager.GetMediaUrl(scImg.MediaItem);
            img.VSpace   = Convert.ToInt32(string.IsNullOrEmpty(scImg.VSpace) ? "0" : scImg.VSpace);

            return(img);
        }
        public void SetField_ObjectIsInt_ThrowsException()
        {
            //Assign
            string objectValue = "hello world";
            var    fieldId     = Guid.NewGuid();

            var item  = Helpers.CreateFakeItem(fieldId, string.Empty);
            var field = item.Fields[new ID(fieldId)];

            var config = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new SitecoreFieldNullableEnumMapper();

            //Act

            mapper.SetField(field, objectValue, config, null);



            //Assert
        }
        /// <summary>
        /// Gets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.Object.</returns>
        public virtual object GetField(Field field, SitecoreFieldConfiguration config,
                                       SitecoreDataMappingContext context)
        {
            var fieldValue = field.Value;

            try
            {
                return(GetFieldValue(fieldValue, config, context));
            }
            catch (Exception ex)
            {
                try
                {
                    throw new MapperException(
                              "Failed to map field {0} with value {1}".Formatted(field.Name, fieldValue), ex);
                }
                catch (Exception ex1)
                {
                    //This is done to support NCRUNCH
                    throw new MapperException("Failed to map field {0} with value {1}".Formatted(field.ID, fieldValue), ex);
                }
            }
        }
        public override object GetField(Field field, SitecoreFieldConfiguration config,
                                        SitecoreDataMappingContext context)
        {
            var value = (string)base.GetField(field, config, context);

            var guid = field.ID.Guid;

            if (IsMultiLineDictionary.ContainsKey(guid) && IsMultiLineDictionary[guid])
            {
                return(FixMultiLineFieldLineBreaks(value));
            }

            var isMultiLine = field.TypeKey == "multi-line text";

            IsMultiLineDictionary.TryAdd(guid, isMultiLine);

            if (!isMultiLine)
            {
                return(value);
            }

            return(FixMultiLineFieldLineBreaks(value));
        }
Example #23
0
        public void SetFieldValue_ItemPassed_ReturnsId()
        {
            //Assign
            using (Db database = new Db
            {
                new DbItem("Target")
            })
            {
                var item      = database.GetItem("/sitecore/content/Target");
                var mapper    = new SitecoreFieldItemMapper();
                var config    = new SitecoreFieldConfiguration();
                var context   = Context.Create(Utilities.CreateStandardResolver());
                var service   = new SitecoreService(database.Database, context);
                var options   = new GetItemOptionsParams();
                var scContext = new SitecoreDataMappingContext(null, item, service, options);

                //Act
                var result = mapper.SetFieldValue(item, config, scContext);

                //Assert
                Assert.NotNull(result);
                Assert.AreEqual(item.ID.ToString(), result);
            }
        }
        public void GetField_FieldContainsData_StringIsReturned()
        {
            //Assign
            var fieldValue = "<p>hello world</p>";


            using (Db database = new Db
            {
                new Sitecore.FakeDb.DbItem("TestItem")
                {
                    new DbField(FieldName)
                    {
                        Value = fieldValue
                    }
                }
            })
            {
                var item  = database.GetItem("/sitecore/content/TestItem");
                var field = item.Fields[FieldName];

                var mapper = new SitecoreFieldStringMapper();
                var config = new SitecoreFieldConfiguration();

                using (new ItemEditing(item, true))
                {
                    field.Value = fieldValue;
                }
                var context = new SitecoreDataMappingContext(null, item, null, new GetItemByPathOptions());

                //Act
                var result = mapper.GetField(field, config, context) as string;

                //Assert
                Assert.AreEqual(fieldValue, result);
            }
        }
        public void GetField_FieldContainsValidEnumInteger_ReturnsEnum()
        {
            //Assign
            string   fieldValue = "2";
            StubEnum expected   = StubEnum.Value2;
            var      item       = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreFieldEnumMapper/GetField");
            var      field      = item.Fields[FieldName];
            var      config     = new SitecoreFieldConfiguration();

            config.PropertyInfo = typeof(Stub).GetProperty("Property");

            var mapper = new SitecoreFieldEnumMapper();

            using (new ItemEditing(item, true))
            {
                field.Value = fieldValue;
            }

            //Act
            var result = (StubEnum)mapper.GetField(field, config, null);

            //Assert
            Assert.AreEqual(expected, result);
        }
 /// <summary>
 /// Sets the field.
 /// </summary>
 /// <param name="field">The field.</param>
 /// <param name="value">The value.</param>
 /// <param name="config">The config.</param>
 /// <param name="context">The context.</param>
 public virtual void SetField(Field field, object value, SitecoreFieldConfiguration config,
                              SitecoreDataMappingContext context)
 {
     field.Value = SetFieldValue(value, config, context);
 }
 /// <summary>
 /// Gets the field value.
 /// </summary>
 /// <param name="fieldValue">The field value.</param>
 /// <param name="config">The config.</param>
 /// <param name="context">The context.</param>
 /// <returns>
 /// System.Object.
 /// </returns>
 /// <exception cref="System.NotImplementedException"></exception>
 public override object GetFieldValue(string fieldValue, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
 {
     //this will only be used by the SitecoreFieldIEnumerableMapper
     return(fieldValue);
 }
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="System.NotSupportedException">It is not possible to save data from a rich text field when the data isn't raw.
        ///                     + Set the SitecoreFieldAttribute setting property to SitecoreFieldSettings.RichTextRaw for property {0} on type {1}.Formatted(config.PropertyInfo.Name, config.PropertyInfo.ReflectedType.FullName)</exception>
        public override void SetField(Sitecore.Data.Fields.Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            if (field == null)
            {
                return;
            }

            if (config.Setting == SitecoreFieldSettings.ForceRenderField)
            {
                throw new NotSupportedException("It is not possible to save data from a field when the data isn't raw."
                                                + "In the SitecoreFieldAttribute remove the SitecoreFieldSettings.ForceRenderField valuea for property {0} on type {1}".Formatted(config.PropertyInfo.Name, config.PropertyInfo.ReflectedType.FullName));
            }

            if (field.Type.StartsWith("Rich Text") && config.Setting != SitecoreFieldSettings.RichTextRaw)
            {
                throw new NotSupportedException("It is not possible to save data from a rich text field when the data isn't raw."
                                                + "Set the SitecoreFieldAttribute setting property to SitecoreFieldSettings.RichTextRaw for property {0} on type {1}".Formatted(config.PropertyInfo.Name, config.PropertyInfo.ReflectedType.FullName));
            }

            field.Value = value != null?value.ToString() : null;
        }
        /// <summary>
        /// Gets the field value.
        /// </summary>
        /// <param name="fieldValue">The field value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.Object.</returns>
        public override object GetFieldValue(string fieldValue, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            Guid guid;

            return(Guid.TryParse(fieldValue, out guid) ? context.Service.Database.GetItem(new ID(guid)) : null);
        }
        /// <summary>
        /// Configures the specified property info.
        /// </summary>
        /// <param name="propertyInfo">The property info.</param>
        /// <param name="config">The config.</param>
        public void Configure(PropertyInfo propertyInfo, SitecoreFieldConfiguration config)
        {
            config.FieldName = this.FieldName;

            if (config.FieldName.IsNullOrEmpty())
                config.FieldName = propertyInfo.Name;

            config.Setting = this.Setting;
            config.CodeFirst = this.CodeFirst;
            
            if(FieldId.IsNotNullOrEmpty())
                config.FieldId = new ID(this.FieldId);
            
            config.FieldSource = this.FieldSource;
            config.FieldTitle = this.FieldTitle;
            config.FieldType = this.FieldType;
            config.CustomFieldType = this.CustomFieldType;
            config.IsShared = this.IsShared;
            config.IsUnversioned = this.IsUnversioned;
            config.SectionName = this.SectionName;
            config.Setting = this.Setting;
            config.FieldSortOrder = this.FieldSortOrder;
            config.SectionSortOrder = this.SectionSortOrder;
            config.ValidationErrorText = this.ValidationErrorText;
            config.ValidationRegularExpression = this.ValidationRegularExpression;
            config.IsRequired = this.IsRequired;
            config.UrlOptions = this.UrlOptions;


            //code first configuration
            var fieldFieldValues = propertyInfo.GetCustomAttributes(typeof(SitecoreFieldFieldValueAttribute), true).Cast<SitecoreFieldFieldValueAttribute>();
            var ffvConfigs = fieldFieldValues.Select(x => x.Configure(propertyInfo, config));
            config.FieldValueConfigs = ffvConfigs.ToList();
            
            base.Configure(propertyInfo, config);
        }
 /// <summary>
 /// Configures the specified property info.
 /// </summary>
 /// <param name="propertyInfo">The property info.</param>
 /// <returns>AbstractPropertyConfiguration.</returns>
 public override AbstractPropertyConfiguration Configure(PropertyInfo propertyInfo)
 {
     var config = new SitecoreFieldConfiguration();
     Configure(propertyInfo, config);
     return config;
 }
 /// <summary>
 /// Sets the field value.
 /// </summary>
 /// <param name="value">The value.</param>
 /// <param name="config">The config.</param>
 /// <param name="context">The context.</param>
 /// <returns>System.String.</returns>
 public abstract string SetFieldValue(object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context);
 /// <summary>
 /// Gets the field value.
 /// </summary>
 /// <param name="fieldValue">The field value.</param>
 /// <param name="config">The config.</param>
 /// <param name="context">The context.</param>
 /// <returns>System.Object.</returns>
 public abstract object GetFieldValue(string fieldValue, SitecoreFieldConfiguration config, SitecoreDataMappingContext context);
        /// <summary>
        /// Configures the specified property info.
        /// </summary>
        /// <param name="propertyInfo">The property info.</param>
        /// <param name="config">The config.</param>
        public void Configure(PropertyInfo propertyInfo, SitecoreFieldConfiguration config)
        {
            config.FieldName = this.FieldName;

            if (config.FieldName.IsNullOrEmpty())
                config.FieldName = propertyInfo.Name;

            config.Setting = this.Setting;
            config.CodeFirst = this.CodeFirst;
            
            if(FieldId.IsNotNullOrEmpty())
                config.FieldId = new ID(this.FieldId);
            
            config.FieldSource = this.FieldSource;
            config.FieldTitle = this.FieldTitle;
            config.FieldType = this.FieldType;
            config.CustomFieldType = this.CustomFieldType;
            config.IsShared = this.IsShared;
            config.IsUnversioned = this.IsUnversioned;
            config.SectionName = this.SectionName;
            config.Setting = this.Setting;
            config.FieldSortOrder = this.FieldSortOrder;
            config.SectionSortOrder = this.SectionSortOrder;
            config.ValidationErrorText = this.ValidationErrorText;
            config.ValidationRegularExpression = this.ValidationRegularExpression;
            config.IsRequired = this.IsRequired;
            config.UrlOptions = this.UrlOptions;


            //code first configuration
            var fieldFieldValues = propertyInfo.GetCustomAttributes(typeof(SitecoreFieldFieldValueAttribute), true).Cast<SitecoreFieldFieldValueAttribute>();
 
            ////fix: fieldfieldvalues are not passed
            var interfaceFromProperty = propertyInfo.DeclaringType.GetInterfaces().FirstOrDefault(inter => inter.GetProperty(propertyInfo.Name) != null);
            if (interfaceFromProperty != null)
            {
                fieldFieldValues = interfaceFromProperty.GetProperty(propertyInfo.Name).GetCustomAttributes(typeof(SitecoreFieldFieldValueAttribute), true).Cast<SitecoreFieldFieldValueAttribute>(); ;
            }
                 
            var ffvConfigs = fieldFieldValues.Select(x => x.Configure(propertyInfo, config));
            config.FieldValueConfigs = ffvConfigs.ToList();
            base.Configure(propertyInfo, config);
        }