예제 #1
0
        /// <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();
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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();
            }
        }