/// <summary>
        /// Verifies if there is a shape for the given element type.
        /// </summary>
        /// <param name="modelElementTypeId">Model element type.</param>
        /// <returns>True if there is a shape for the specified element type. False otherwise.</returns>
        public virtual bool HasShapeForElement(Guid modelElementTypeId)
        {
            if (ClassShapesMapping.ContainsKey(modelElementTypeId))
            {
                if (ClassShapesMapping[modelElementTypeId].Count > 0)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <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);
            }
        }