public override object MapToProperty(AbstractDataMappingContext mappingContext)
{
var scConfig = Configuration as SitecoreLinkedConfiguration;
var scContext = mappingContext as SitecoreDataMappingContext;
Type genericType = Mapper.Utilities.GetGenericArgument(scConfig.PropertyInfo.PropertyType);
var item = scContext.Item;
var linkDb = global::Sitecore.Globals.LinkDatabase;
//ME - i am not sure this is correct but there is an odd behaviour of references
// languges come back as invariant, going with default language in this scenario
var references = new Func<IEnumerable<Item>>(() =>{
var itemLinks = linkDb.GetReferences(item);
var items = itemLinks.Select(x => x.GetTargetItem());
return Utilities.GetLanguageItems(items, LanguageManager.DefaultLanguage, scContext.Service.ItemVersionHandler);
});
var getItems = new Func<IEnumerable<Item>>(() =>
{
switch (scConfig.Option)
{
case SitecoreLinkedOptions.All:
var itemLinks1 = references();
var itemLinks2 = linkDb.GetReferrers(item);
return itemLinks1.Union(itemLinks2.Select(x => x.GetSourceItem()));
case SitecoreLinkedOptions.References:
return references();
case SitecoreLinkedOptions.Referrers:
var itemLinks4 = linkDb.GetReferrers(item);
return itemLinks4.Select(x => x.GetSourceItem());
default:
return new List<Item>();
}
});
return scContext.Service.CreateTypes(genericType, getItems, scConfig.IsLazy, scConfig.InferType);
}