/// <summary>
        /// Merges the current directory with an additional directory.
        /// </summary>
        /// <param name="data">Directory</param>
        public void Merge(IDomainDataExtensionDirectory data)
        {
            if (!(data is DiagramDomainDataDirectory))
            {
                throw new InvalidOperationException("Can not merge with " + data.ToString());
            }

            DiagramDomainDataDirectory domainData = data as DiagramDomainDataDirectory;

            foreach (KeyValuePair <Guid, Guid> pair in domainData.ClassShapesDependenciesMapping)
            {
                ClassShapesDependenciesMapping.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, List <Guid> > pair in domainData.ParentChildrenShapesMapping)
            {
                ParentChildrenShapesMapping.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, List <Guid> > pair in domainData.DiagramChildrenShapesMapping)
            {
                DiagramChildrenShapesMapping.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, List <Guid> > pair in domainData.DiagramRootChildrenShapesMapping)
            {
                DiagramRootChildrenShapesMapping.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, List <Guid> > pair in domainData.DiagramRSChildren)
            {
                DiagramRSChildren.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, List <Guid> > pair in domainData.DiagramMappingRSChildren)
            {
                DiagramMappingRSChildren.Add(pair.Key, pair.Value);
            }

            // class shape mappings
            foreach (KeyValuePair <Guid, List <Guid> > pair in domainData.ClassShapesMapping)
            {
                if (ClassShapesMapping.ContainsKey(pair.Key))
                {
                    ClassShapesMapping[pair.Key].AddRange(pair.Value);
                }
                else
                {
                    ClassShapesMapping.Add(pair.Key, pair.Value);
                }
            }


            foreach (KeyValuePair <Guid, DiagramClassInfo> pair in domainData.DiagramClassInfos)
            {
                DiagramClassInfos.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, ShapeClassInfo> pair in domainData.ShapeClassInfos)
            {
                ShapeClassInfos.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, RelationshipShapeInfo> pair in domainData.RelationshipShapeInfos)
            {
                RelationshipShapeInfos.Add(pair.Key, pair.Value);
            }

            foreach (KeyValuePair <Guid, MappingRelationshipShapeInfo> pair in domainData.MappingRelationshipShapeInfos)
            {
                MappingRelationshipShapeInfos.Add(pair.Key, pair.Value);
            }
        }
        /// <summary>
        /// Merges the current directory with an additional directory.
        /// </summary>
        /// <param name="data">Directory</param>
        public void Merge(IDomainDataExtensionDirectory data)
        {
            if( !(data is DiagramDomainDataDirectory) )
                throw new InvalidOperationException("Can not merge with " + data.ToString());

            DiagramDomainDataDirectory domainData = data as DiagramDomainDataDirectory;

            foreach (KeyValuePair<Guid,Guid> pair in domainData.ClassShapesDependenciesMapping)
                ClassShapesDependenciesMapping.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid,List<Guid>> pair in domainData.ParentChildrenShapesMapping)
                ParentChildrenShapesMapping.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid,List<Guid>> pair in domainData.DiagramChildrenShapesMapping)
                DiagramChildrenShapesMapping.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid,List<Guid>> pair in domainData.DiagramRootChildrenShapesMapping)
                DiagramRootChildrenShapesMapping.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid, List<Guid>> pair in domainData.DiagramRSChildren)
                DiagramRSChildren.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid, List<Guid>> pair in domainData.DiagramMappingRSChildren)
                DiagramMappingRSChildren.Add(pair.Key, pair.Value);

            // class shape mappings
            foreach (KeyValuePair<Guid, List<Guid>> pair in domainData.ClassShapesMapping)
                if (ClassShapesMapping.ContainsKey(pair.Key))
                    ClassShapesMapping[pair.Key].AddRange(pair.Value);
                else
                    ClassShapesMapping.Add(pair.Key, pair.Value);


            foreach (KeyValuePair<Guid, DiagramClassInfo> pair in domainData.DiagramClassInfos)
                DiagramClassInfos.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid, ShapeClassInfo> pair in domainData.ShapeClassInfos)
                ShapeClassInfos.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid, RelationshipShapeInfo> pair in domainData.RelationshipShapeInfos)
                RelationshipShapeInfos.Add(pair.Key, pair.Value);

            foreach (KeyValuePair<Guid, MappingRelationshipShapeInfo> pair in domainData.MappingRelationshipShapeInfos)
                MappingRelationshipShapeInfos.Add(pair.Key, pair.Value);

        }