/// <summary> /// /// </summary> /// <param name="targetElementId"></param> /// <param name="targetType"></param> /// <param name="sourceRootId"></param> /// <param name="metadata"></param> /// <returns></returns> public static List <string> GetValuesFromMetadata(long targetElementId, LinkElementType targetType, long sourceRootId, XDocument metadata) { //grab values from metadata where targetelementid and targetType is mapped // e.g. get title from metadata MappingManager mappingManager = new MappingManager(); try { List <string> tmp = new List <string>(); var mappings = mappingManager.GetMappings().Where(m => m.Target.ElementId.Equals(targetElementId) && m.Target.Type.Equals(targetType) && getRootMapping(m) != null && getRootMapping(m).Source.ElementId.Equals(sourceRootId) && getRootMapping(m).Source.Type == LinkElementType.MetadataStructure && m.Level.Equals(2)); foreach (var m in mappings) { Dictionary <string, string> AttrDic = new Dictionary <string, string>(); if (m.Source.Type.Equals(LinkElementType.MetadataAttributeUsage) || m.Source.Type.Equals(LinkElementType.MetadataNestedAttributeUsage)) { AttrDic.Add("id", m.Source.ElementId.ToString()); AttrDic.Add("name", m.Source.Name); AttrDic.Add("type", "MetadataAttributeUsage"); //find sourceelement in xmldocument IEnumerable <XElement> elements = XmlUtility.GetXElementsByAttribute(AttrDic, metadata); foreach (var element in elements) { tmp.Add(element.Value); } } } return(tmp); } finally { mappingManager.Dispose(); } }
public static bool DeleteMapping(long id, MappingManager mappingManager, bool recursive = true) { Mapping mapping = mappingManager.GetMappings(id); if (recursive) { IEnumerable <Mapping> childMappings = mappingManager.GetChildMapping(id); foreach (var cm in childMappings) { mappingManager.DeleteMapping(cm.Id); } } mappingManager.DeleteMapping(mapping.Id); return(true); }
/// <summary> /// /// </summary> /// <param name="targetElementId"></param> /// <param name="targetType"></param> /// <param name="sourceRootId"></param> /// <param name="metadata"></param> /// <returns></returns> public static List <string> GetValuesFromMetadata(long targetElementId, LinkElementType targetType, long sourceRootId, XDocument metadata) { //grab values from metadata where targetelementid and targetType is mapped // e.g. get title from metadata MappingManager mappingManager = new MappingManager(); try { List <string> tmp = new List <string>(); var mappings = mappingManager.GetMappings().Where(m => m.Target.ElementId.Equals(targetElementId) && m.Target.Type.Equals(targetType) && getRootMapping(m) != null && getRootMapping(m).Source.ElementId.Equals(sourceRootId) && getRootMapping(m).Source.Type == LinkElementType.MetadataStructure && m.Level.Equals(2)); // possinle cases mapping count // 1 - 1 1 // x,y to z (combination merge) 2 // x -> z1,z2,z3 (split) 1 // x1,x2,x3 -> z (merge) 1 if (mappings.Count() == 1) { //possible cases = // 1 - 1 // x -> z1,z2,z3 (split) // x1,x2,x3 -> z (join) Entities.Mapping.Mapping m = mappings.FirstOrDefault(); if (m != null && (m.Source.Type.Equals(LinkElementType.MetadataAttributeUsage) || m.Source.Type.Equals(LinkElementType.MetadataNestedAttributeUsage))) { IEnumerable <XElement> elements = getXElementsFromAMapping(m, metadata); if (elements.Count() == 1) { var element = elements.First(); string mask = m.TransformationRule.Mask; // 1 - 1 // x -> z1,z2,z3 (split) List <string> result = transform(element.Value, m.TransformationRule); if (result.Count == 1) // 1 - 1 { mask = setOrReplace(mask, result, m.Source.Name); tmp.Add(mask); } else // x -> z1,z2,z3 (split) { if (string.IsNullOrEmpty(mask)) { tmp.AddRange(result); } else { //ToDo Add mask foreach (string r in result) { mask = setOrReplace(mask, new List <string>() { r }, m.Source.Name); tmp.Add(mask); } } } } else { // x1,x2,x3 -> z (join) foreach (var element in elements) { tmp.AddRange(transform(element.Value, m.TransformationRule)); } } } } // x,y to z (combination merge) // if multiply mappings to the same source, it is a merge else { // all mappings that have the same parent mapping should be handelt together IEnumerable <long> parentIds = mappings.Select(m => m.Parent.Id).Distinct(); foreach (int parentId in parentIds) { string mask = ""; //load all maaping that belongs to the parent mapping with id -> parentId IEnumerable <Entities.Mapping.Mapping> tmpMappings = mappings.Where(m => m.Parent.Id.Equals(parentId)); foreach (var m in tmpMappings) { if (string.IsNullOrEmpty(mask)) { mask = mappings.FirstOrDefault().TransformationRule.Mask; } if (m.Source.Type.Equals(LinkElementType.MetadataAttributeUsage) || m.Source.Type.Equals(LinkElementType.MetadataNestedAttributeUsage)) { IEnumerable <XElement> elements = getXElementsFromAMapping(m, metadata); //the elements are the result of one mapping foreach (var element in elements) { List <string> regExResultList = transform(element.Value, m.TransformationRule); string placeHolderName = m.Source.Name; mask = setOrReplace(mask, regExResultList, placeHolderName); } } } tmp.Add(mask); } } return(tmp); } finally { mappingManager.Dispose(); } }