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); }