public static DatabaseResourceLibrary Create(IQuiltContextFactory quiltContextFactory, JToken json)
        {
            if (json == null)
            {
                throw new ArgumentNullException(nameof(json));
            }

            var libraryName = json.Value <string>(Json_Name);

            using (var ctx = quiltContextFactory.Create())
            {
                var dbResourceLibrary = ctx.ResourceLibraries.Where(r => r.Name == libraryName).SingleOrDefault();
                if (dbResourceLibrary == null)
                {
                    dbResourceLibrary = new ResourceLibrary()
                    {
                        Name = libraryName
                    };
                    _ = ctx.ResourceLibraries.Add(dbResourceLibrary);
                }

                foreach (var jsonEntry in json[Json_Entries])
                {
                    var entry = new ResourceLibraryEntry(jsonEntry);

                    var dbResourceType = ctx.ResourceTypes.Where(r => r.Name == entry.Type).SingleOrDefault();
                    if (dbResourceType == null)
                    {
                        // Look for resource types created below.  These entries aren't normally found until
                        // ctx.SaveChanges is called.
                        //
                        dbResourceType = ctx.ResourceTypes.Local.Where(r => r.Name == entry.Type).SingleOrDefault();
                    }
                    if (dbResourceType == null)
                    {
                        dbResourceType = new ResourceType()
                        {
                            Name = entry.Type
                        };
                        _ = ctx.ResourceTypes.Add(dbResourceType);
                    }

                    var dbResource = dbResourceLibrary.Resources.Where(r => r.Name == entry.Name).SingleOrDefault();
                    if (dbResource == null)
                    {
                        dbResource = new Resource()
                        {
                            Name = entry.Name
                        };
                        _ = ctx.Resources.Add(dbResource);
                    }
                    dbResource.ResourceType = dbResourceType;
                    dbResource.ResourceData = entry.Data;
                }

                _ = ctx.SaveChanges();
            }

            return(Load(quiltContextFactory, libraryName));
        }
        public static Node Create(ResourceLibraryEntry entry)
        {
            Node node;

            if (entry.Data.StartsWith("{"))
            {
                node = NodeFactory.Singleton.Create(JToken.Parse(entry.Data));
            }
            else
            {
                var lines = entry.Data.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

                node = TextPatternParser.Parse(lines);
            }

            node.ComponentType = BlockComponent.TypeName;
            node.ComponentName = entry.Name;

            return(node);
        }