public static IEnumerable <DocumentTypeDiffgram> OrderByDependencies(IEnumerable <DocumentTypeDiffgram> documentTypesValues)
        {
            var comparer = new DependencyComparer();
            var list     = documentTypesValues.ToList();

            list.Sort(comparer);
            return(list);
        }
        public void Ensure(Diffgram diffgram)
        {
            // Sort here to detect circular dependencies. Move to Safe check?
            var orderedDocTypes = DependencyComparer.OrderByDependencies(diffgram.DocumentTypes.Values);

            foreach (var datatypeDiff in diffgram.DataTypes.Values)
            {
                datatypeDiff.Ensure();
            }

            foreach (var templateDiff in diffgram.Templates.Values)
            {
                templateDiff.Ensure();
            }

            foreach (var doctypeDiff in orderedDocTypes)
            {
                doctypeDiff.Ensure();
            }
        }