Exemplo n.º 1
0
        private DataItem MergeNodes(DataItem prim, DataItem sec)
        {
            if (prim == null)
            {
                return(sec);
            }
            if (sec == null)
            {
                return(prim);
            }
            if (prim.GetType() != sec.GetType())
            {
                return(prim);
            }
            //if (prim.EqualsContent(sec))
            //    return prim;

            Type dataType = prim.GetType();

            if (dataType == typeof(Mapping))
            {
                MappingWrapper mPri = new MappingWrapper(prim as Mapping, this);
                MappingWrapper mSec = new MappingWrapper(sec as Mapping, this);

                foreach (MappingEntry eSec in mSec.Mapping.Enties)
                {
                    MappingEntry ePri = mPri.GetMappingNodeByKey(eSec.Key);
                    if (ePri == null)
                    {
                        mPri.Add(eSec);
                    }
                    else
                    {
                        ePri.Value = this.MergeNodes(ePri.Value, eSec.Value);
                    }
                }
            }
            else if (dataType == typeof(Sequence))
            {
                Sequence sPri = prim as Sequence;
                Sequence sSec = sec as Sequence;

                foreach (DataItem item in sSec.Enties)
                {
                    if (!sPri.Enties.ContainsItem(item))
                    {
                        sPri.Enties.Add(item);
                    }
                }
            }

            return(prim);
        }