internal string ProcessEclXlink(XmlElement xlinkElement) { string eclStubComponentId = xlinkElement.GetAttribute("href", "http://www.w3.org/1999/xlink"); IContentLibraryContext eclContext; IContentLibraryMultimediaItem eclItem = GetEclItem(eclStubComponentId, out eclContext); // This may look a bit unusual, but we have to ensure that ECL Item members are accessed *before* the ECL Context is disposed. using (eclContext) { // Set additional ECL Item properties as data attributes on the XLink element xlinkElement.SetAttribute("data-eclId", eclItem.Id.ToString()); xlinkElement.SetAttribute("data-eclDisplayTypeId", eclItem.DisplayTypeId); if (!string.IsNullOrEmpty(eclItem.MimeType)) { xlinkElement.SetAttribute("data-eclMimeType", eclItem.MimeType); } if (!string.IsNullOrEmpty(eclItem.Filename)) { xlinkElement.SetAttribute("data-eclFileName", eclItem.Filename); } string eclTemplateFragment = eclItem.GetTemplateFragment(null); if (!string.IsNullOrEmpty(eclTemplateFragment)) { // Note that the entire Template Fragment gets stuffed in an XHTML attribute. // This may seem scary, but there is no limitation to the size of an XML attribute and the XLink element typically already has content. xlinkElement.SetAttribute("data-eclTemplateFragment", eclTemplateFragment); } // TODO: ECL external metadata (?) string directLinkToPublished = eclItem.GetDirectLinkToPublished(null); return(string.IsNullOrEmpty(directLinkToPublished) ? PublishBinaryContent(eclItem, eclStubComponentId) : directLinkToPublished); } }
internal XmlElement BuildEntityModel(EntityModelData entityModelData, Component eclStubComponent) { IContentLibraryContext eclContext; IContentLibraryMultimediaItem eclItem = GetEclItem(eclStubComponent.Id, out eclContext); // This may look a bit unusual, but we have to ensure that ECL Item members are accessed *before* the ECL Context is disposed. using (eclContext) { BinaryContent eclStubBinaryContent = eclStubComponent.BinaryContent; string directLinkToPublished = eclItem.GetDirectLinkToPublished(_emptyAttributes); entityModelData.BinaryContent = new BinaryContentData { Url = string.IsNullOrEmpty(directLinkToPublished) ? PublishBinaryContent(eclItem, eclStubComponent) : directLinkToPublished, MimeType = eclItem.MimeType ?? eclStubBinaryContent.MultimediaType.MimeType, FileName = eclItem.Filename ?? eclStubBinaryContent.Filename, FileSize = eclStubComponent.BinaryContent.Size }; XmlElement externalMetadata = null; if (!string.IsNullOrEmpty(eclItem.MetadataXml)) { XmlDocument externalMetadataDoc = new XmlDocument(); externalMetadataDoc.LoadXml(eclItem.MetadataXml); externalMetadata = externalMetadataDoc.DocumentElement; } entityModelData.ExternalContent = new ExternalContentData { Id = eclItem.Id.ToString(), DisplayTypeId = eclItem.DisplayTypeId, TemplateFragment = eclItem.GetTemplateFragment(_emptyAttributes) // Note: not setting Metadata here, but returning the external metadata as raw XML. }; return(externalMetadata); } }
internal void ProcessEclStubComponent(Component eclStubComponent) { IContentLibraryContext eclContext; IContentLibraryMultimediaItem eclItem = GetEclItem(eclStubComponent.Id, out eclContext); // This may look a bit unusual, but we have to ensure that ECL Item members are accessed *before* the ECL Context is disposed. using (eclContext) { eclStubComponent.EclId = eclItem.Id.ToString(); string directLinkToPublished = eclItem.GetDirectLinkToPublished(null); eclStubComponent.Multimedia.Url = string.IsNullOrEmpty(directLinkToPublished) ? PublishBinaryContent(eclItem, eclStubComponent.Id) : directLinkToPublished; // Set additional ECL Item properties as ExtensionData on the ECL Stub Component. const string eclSectionName = "ECL"; eclStubComponent.AddExtensionProperty(eclSectionName, "DisplayTypeId", eclItem.DisplayTypeId); eclStubComponent.AddExtensionProperty(eclSectionName, "MimeType", eclItem.MimeType); eclStubComponent.AddExtensionProperty(eclSectionName, "FileName", eclItem.Filename); eclStubComponent.AddExtensionProperty(eclSectionName, "TemplateFragment", eclItem.GetTemplateFragment(null)); IFieldSet eclExternalMetadataFieldSet = BuildExternalMetadataFieldSet(eclItem); if (eclExternalMetadataFieldSet != null) { eclStubComponent.ExtensionData["ECL-ExternalMetadata"] = eclExternalMetadataFieldSet; } } }