public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
{
Link link = value as Link;
if (field == null) return;
var item = field.Item;
LinkField linkField = new LinkField(field);
if (link == null || link.Type == LinkType.NotSet)
{
linkField.Clear();
return;
}
switch (link.Type)
{
case LinkType.Internal:
linkField.LinkType = "internal";
if (linkField.TargetID.Guid != link.TargetId)
{
if (link.TargetId == Guid.Empty)
{
ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
linkField.RemoveLink(iLink);
}
else
{
ID newId = new ID(link.TargetId);
Item target = item.Database.GetItem(newId);
if (target != null)
{
linkField.TargetID = newId;
ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
linkField.UpdateLink(nLink);
linkField.Url = LinkManager.GetItemUrl(target);
}
else throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
}
}
break;
case LinkType.Media:
linkField.LinkType = "media";
if (linkField.TargetID.Guid != link.TargetId)
{
if (link.TargetId == Guid.Empty)
{
ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
linkField.RemoveLink(iLink);
}
else
{
ID newId = new ID(link.TargetId);
Item target = item.Database.GetItem(newId);
if (target != null)
{
global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);
linkField.TargetID = newId;
ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
linkField.UpdateLink(nLink);
var mediaUrl = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
linkField.Url = mediaUrl;
}
else throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
}
}
break;
case LinkType.External:
linkField.LinkType = "external";
linkField.Url = link.Url;
break;
case LinkType.Anchor:
linkField.LinkType = "anchor";
linkField.Url = link.Anchor;
break;
case LinkType.MailTo:
linkField.LinkType = "mailto";
linkField.Url = link.Url;
break;
case LinkType.JavaScript:
linkField.LinkType = "javascript";
linkField.Url = link.Url;
break;
}
if (!link.Anchor.IsNullOrEmpty())
linkField.Anchor = link.Anchor;
if (!link.Class.IsNullOrEmpty())
linkField.Class = link.Class;
if (!link.Text.IsNullOrEmpty())
linkField.Text = link.Text;
if (!link.Title.IsNullOrEmpty())
linkField.Title = link.Title;
if (!link.Query.IsNullOrEmpty())
linkField.QueryString = HttpUtility.UrlEncode(link.Query);
if (!link.Target.IsNullOrEmpty())
linkField.Target = link.Target;
}
}