public static IEnumerable <MemberDeclarationSyntax> Generate(IReadOnlyList <HassState> entities) { var entitySets = entities.GroupBy(e => (EntityIdHelper.GetDomain(e.EntityId), IsNumeric(e))) .Select(g => new EntitySet(g.Key.Item1, g.Key.Item2, g)) .OrderBy(s => s.Domain) .ToList(); var entityIds = entities.Select(x => x.EntityId).ToList(); var entityDomains = GetDomainsFromEntities(entityIds).OrderBy(s => s).ToList(); yield return(GenerateRootEntitiesInterface(entityDomains)); yield return(GenerateRootEntitiesClass(entitySets)); foreach (var entityClass in entitySets.GroupBy(s => s.EntitiesForDomainClassName).Select(g => GenerateEntiesForDomainClass(g.Key, g))) { yield return(entityClass); } foreach (var entitytype in entitySets.Select(GenerateEntityType)) { yield return(entitytype); } foreach (var attributeRecord in entitySets.Select(GenerateAttributeRecord)) { yield return(attributeRecord); } }
public static IEnumerable <MemberDeclarationSyntax> Generate(IEnumerable <HassServiceDomain> serviceDomains, IReadOnlyCollection <HassState> entities) { var entityDomains = entities.GroupBy(e => EntityIdHelper.GetDomain(e.EntityId)).Select(x => x.Key); return(serviceDomains .Where(sd => sd.Services?.Any() == true && sd.Services.Any(s => entityDomains.Contains(s.Target?.Entity?.Domain))) .GroupBy(x => x.Domain, x => x.Services) .Select(GenerateClass)); }
private static IEnumerable <ClassDeclarationSyntax> GenerateExtensionMethodClasses(IEnumerable <HassServiceDomain> serviceDomains, IReadOnlyCollection <HassState> entities) { var entityDomains = entities.GroupBy(e => EntityIdHelper.GetDomain(e.EntityId)).Select(x => x.Key); foreach (var domainServicesGroup in serviceDomains .Where(sd => sd.Services?.Any() == true && sd.Services.Any(s => entityDomains.Contains(s.Target?.Entity?.Domain))) .GroupBy(x => x.Domain, x => x.Services)) { var domain = domainServicesGroup.Key !; var domainServices = domainServicesGroup .SelectMany(services => services !) .Where(s => s.Target?.Entity?.Domain != null) .Select(group => group) .OrderBy(x => x.Service) .ToList(); yield return(GenerateDomainExtensionClass(domain, domainServices)); } }