/// <summary>
        /// Adds a vm.
        /// </summary>
        /// <param name="vm"></param>
        /// <param name="parentId"></param>
        public void AddVM(BaseSpecificModelElementViewModel vm, Guid parentId)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            if (vm.Element == null)
            {
                return;
            }

            string key = GetKey(vm);

            if (!mapping.ContainsKey(key))
            {
                mapping.Add(key, vm);
            }

            if (!mappingElements.ContainsKey(key))
            {
                mappingElements.Add(key, new List <Guid>());
            }

            //if( !mappingElements[key].Contains(parentId) )
            mappingElements[key].Add(parentId);
        }
        /// <summary>
        /// Adds a vm.
        /// </summary>
        /// <param name="vm"></param>
        /// <param name="parentId"></param>
        public void AddVM(BaseSpecificModelElementViewModel vm, Guid parentId)
        {
            if (vm == null)
                throw new ArgumentNullException("vm");

            if (vm.Element == null)
                return;

            string key = GetKey(vm);

            if( !mapping.ContainsKey(key) )
                mapping.Add(key, vm);

            if (!mappingElements.ContainsKey(key))
                mappingElements.Add(key, new List<Guid>());

            //if( !mappingElements[key].Contains(parentId) )
            mappingElements[key].Add(parentId);
        }
        /// <summary>
        /// Verifies if a vm is still in use.
        /// </summary>
        /// <param name="vm"></param>
        /// <returns></returns>
        public bool IsVMInUse(BaseSpecificModelElementViewModel vm)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            if (vm.Element == null)
            {
                return(false);
            }

            string key = GetKey(vm);

            if (mappingElements.ContainsKey(key))
            {
                if (mappingElements[key].Count > 0)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Removes a vm.
        /// </summary>
        /// <param name="vm"></param>
        /// <param name="parentId"></param>
        public void RemoveVM(BaseSpecificModelElementViewModel vm, Guid parentId)
        {
            if (vm == null)
            {
                throw new ArgumentNullException("vm");
            }

            if (vm.Element == null)
            {
                return;
            }

            string key = GetKey(vm);

            if (mappingElements.ContainsKey(key))
            {
                mappingElements[key].Remove(parentId);
                if (mappingElements[key].Count == 0)
                {
                    mapping.Remove(key);
                    mappingElements.Remove(key);
                }
            }
        }
        /// <summary>
        /// Removes a vm.
        /// </summary>
        /// <param name="vm"></param>
        /// <param name="parentId"></param>
        public void RemoveVM(BaseSpecificModelElementViewModel vm, Guid parentId)
        {
            if (vm == null)
                throw new ArgumentNullException("vm");

            if (vm.Element == null)
                return;

            string key = GetKey(vm);

            if (mappingElements.ContainsKey(key))
            {
                mappingElements[key].Remove(parentId);
                if (mappingElements[key].Count == 0)
                {
                    mapping.Remove(key);
                    mappingElements.Remove(key);
                }
            }
        }
 /// <summary>
 /// Creates and returns a key for given vm.
 /// </summary>
 /// <param name="vm"></param>
 /// <returns></returns>
 private string GetKey(BaseSpecificModelElementViewModel vm)
 {
     return vm.GetType().FullName + "_" + vm.Element.Id;
 }
        /// <summary>
        /// Verifies if a vm is still in use.
        /// </summary>
        /// <param name="vm"></param>
        /// <returns></returns>
        public bool IsVMInUse(BaseSpecificModelElementViewModel vm)
        {
            if (vm == null)
                throw new ArgumentNullException("vm");

            if (vm.Element == null)
                return false;

            string key = GetKey(vm);

            if (mappingElements.ContainsKey(key))
                if (mappingElements[key].Count > 0)
                    return true;

            return false;
        }
 /// <summary>
 /// Creates and returns a key for given vm.
 /// </summary>
 /// <param name="vm"></param>
 /// <returns></returns>
 private string GetKey(BaseSpecificModelElementViewModel vm)
 {
     return(vm.GetType().FullName + "_" + vm.Element.Id);
 }