/// <summary> /// Initializes a new instance of <see cref="ArtifactsConfigurationManager"/> /// </summary> /// <param name="serializer"><see cref="ISerializer"/> to use</param> /// <param name="buildTaskConfiguration">Current <see cref="BuildTaskConfiguration"/></param> public ArtifactsConfigurationManager( ISerializer serializer, BuildTaskConfiguration buildTaskConfiguration) { _serializer = serializer; _path = Path.Combine(buildTaskConfiguration.DolittleFolder, "artifacts.json"); }
/// <summary> /// Initializes a new instance of the <see cref="TopologyConfigurationManager"/> class. /// </summary> /// <param name="serializer"><see cref="ISerializer"/> to use for working with configuration as JSON.</param> /// <param name="buildTaskConfiguration">Current <see cref="BuildTaskConfiguration"/>.</param> public TopologyConfigurationManager( ISerializer serializer, BuildTaskConfiguration buildTaskConfiguration) { _serializer = serializer; _path = Path.Combine(buildTaskConfiguration.DolittleFolder, "topology.json"); }
/// <summary> /// Loads the <see cref="BoundedContextConfiguration"/> from file and uses it to build the <see cref="BoundedContextConfiguration"/> using the <see cref="TopologyBuilder"/> /// </summary> /// <param name="types">The discovered artifact types from the bounded context's assemblies</param> /// <param name="configuration"></param> public Applications.Configuration.Topology Build(Type[] types, BuildTaskConfiguration configuration) { var topology = _configurationManager.Load(); var boundedContextTopology = new BoundedContextTopology(topology, configuration.UseModules, configuration.NamespaceSegmentsToStrip); return(new TopologyBuilder(types, boundedContextTopology, _buildMessages).Build()); }
Proxy CreateProxy(Type artifact, string fileContent, BuildTaskConfiguration configuration) { var filePath = GenerateFilePath(artifact, configuration, artifact.Name); return(new Proxy() { Content = fileContent, FullFilePath = filePath }); }
/// <summary> /// Generates all proxies for all relevant artifacts and writes them as files in their corresponding feature structure /// </summary> public void GenerateProxies(ArtifactsConfiguration artifactsConfiguration, BuildTaskConfiguration configuration) { var proxies = new List <Proxy>(); GenerateProxies(artifactsConfiguration, configuration, _templateLoader.CommandProxyTemplate, "command", GenerateCommandProxy, ref proxies); GenerateProxies(artifactsConfiguration, configuration, _templateLoader.QueryProxyTemplate, "query", GenereateQueryProxy, ref proxies); GenerateProxies(artifactsConfiguration, configuration, _templateLoader.ReadModelProxyTemplate, "read model", GenerateReadModelProxy, ref proxies); WriteProxiesToFile(proxies.ToArray()); }
void GenerateProxies( ArtifactsConfiguration artifactsConfiguration, BuildTaskConfiguration configuration, Func <object, string> template, string artifactTypeName, Func <Type, ArtifactsConfiguration, BuildTaskConfiguration, Func <object, string>, IEnumerable <Proxy> > ProxyGeneratorFunction, ref List <Proxy> proxies) { var artifactType = _artifactTypes.Single(_ => _.TypeName.Equals(artifactTypeName)).Type; var artifacts = _artifacts.Where(_ => artifactType.IsAssignableFrom(_)); foreach (var artifact in artifacts) { var newProxies = ProxyGeneratorFunction(artifact, artifactsConfiguration, configuration, template); proxies.AddRange(newProxies); } }
/// <summary> /// Returns a string that represents the namespace of the given <see cref="Type"/> where the NamespaceToStrip-segments are removed from the namespace /// </summary> /// <param name="type"></param> /// <param name="configuration"></param> /// <returns></returns> public static string StripExcludedNamespaceSegments(this Type type, BuildTaskConfiguration configuration) { var area = new Area() { Value = type.Namespace.Split('.').First() }; var segmentList = type.Namespace.Split('.').Skip(1).ToList(); if (configuration.NamespaceSegmentsToStrip.ContainsKey(area)) { foreach (var segment in configuration.NamespaceSegmentsToStrip[area]) { segmentList.Remove(segment); } } return(string.Join(".", segmentList)); }
IEnumerable <Proxy> GenerateProxies( ArtifactsConfiguration artifactsConfiguration, BuildTaskConfiguration configuration, Func <object, string> template, string artifactTypeName, Func <Type, ArtifactsConfiguration, BuildTaskConfiguration, Func <object, string>, IEnumerable <Proxy> > proxyGeneratorFunction) { List <Proxy> proxies = new List <Proxy>(); var artifactType = _artifactTypes.Single(_ => _.TypeName.Equals(artifactTypeName, StringComparison.InvariantCulture)).Type; foreach (var artifact in _artifacts.Where(_ => artifactType.IsAssignableFrom(_))) { var newProxies = proxyGeneratorFunction(artifact, artifactsConfiguration, configuration, template); proxies.AddRange(newProxies); } return(proxies); }
string GenerateFilePath(Type artifact, BuildTaskConfiguration configuration, string artifactName) { var @namespace = artifact.StripExcludedNamespaceSegments(configuration); return(Path.Combine(configuration.ProxiesBasePath, @namespace.Replace('.', '/'), $"{artifactName}.js")); }
Proxy GenerateReadModelProxy(Type artifact, ArtifactsConfiguration artifactsConfig, BuildTaskConfiguration configuration, Func <object, string> template) { _buildMessages.Trace($"Creating read model proxy for {ClrType.FromType(artifact).TypeString}"); var artifactId = GetArtifactId(artifact, artifactsConfig); var artifactDefinition = GetArtifactDefinition(artifact, artifactsConfig); var handlebarsReadmodel = new HandlebarsReadmodel() { ReadModelName = artifact.Name, ReadModelArtifactId = artifactId.Value.ToString(), ReadModelGeneration = artifactDefinition.Generation.Value.ToString() }; var setableProperties = artifact.GetSettableProperties(); if (setableProperties.Any()) { handlebarsReadmodel.Properties = CreateProxyProperties(setableProperties); } return(CreateProxy(artifact, template(handlebarsReadmodel), configuration)); }
Proxy GenereateQueryProxy(Type artifact, ArtifactsConfiguration artifactsConfig, BuildTaskConfiguration configuration, Func <object, string> template) { _buildMessages.Trace($"Creating query proxy for {ClrType.FromType(artifact).TypeString}"); var handlebarsQuery = new HandlebarsQuery() { ClrType = artifact.FullName, QueryName = artifact.Name }; var setableProperties = artifact.GetSettableProperties(); if (setableProperties.Any()) { handlebarsQuery.Properties = CreateProxyProperties(setableProperties); } return(CreateProxy(artifact, template(handlebarsQuery), configuration)); }
/// <summary> /// Loads the current <see cref="ArtifactsConfiguration"/> from file and uses it to build the updated <see cref="ArtifactsConfiguration"/> using the <see cref="ArtifactsConfigurationBuilder"/>. /// </summary> /// <param name="types">The discovered artifact types from the bounded context's assemblies.</param> /// <param name="topology">The <see cref="Applications.Configuration.Topology"/> that's used for building the <see cref="ArtifactsConfiguration"/>.</param> /// <param name="configuration">Current <see cref="BuildTaskConfiguration"/>.</param> /// <returns>The built <see cref="ArtifactsConfiguration"/>.</returns> public ArtifactsConfiguration Build(IEnumerable <Type> types, Applications.Configuration.Topology topology, BuildTaskConfiguration configuration) { var artifactsConfiguration = _configurationManager.Load(); var boundedContextTopology = new BoundedContextTopology(topology, configuration.UseModules, configuration.NamespaceSegmentsToStrip); return(new ArtifactsConfigurationBuilder(types, artifactsConfiguration, _artifactTypes, _buildMessages).Build(boundedContextTopology)); }
/// <summary> /// Creates the proxies given a list of artifacts and configurations. /// </summary> /// <param name="artifacts">All artifacts as types.</param> /// <param name="configuration">Current <see cref="BuildTaskConfiguration"/>.</param> /// <param name="artifactsConfiguration">Current <see cref="ArtifactsConfiguration"/>.</param> public void CreateProxies(IEnumerable <Type> artifacts, BuildTaskConfiguration configuration, ArtifactsConfiguration artifactsConfiguration) { var builder = new ProxiesBuilder(_templateLoader, artifacts, _artifactTypes, _buildMessages); builder.GenerateProxies(artifactsConfiguration, configuration); }
IEnumerable <Proxy> GenereateQueryProxy(Type artifact, ArtifactsConfiguration artifactsConfig, BuildTaskConfiguration configuration, Func <object, string> template) { _buildMessages.Trace($"Creating query proxy for {ClrType.FromType(artifact).TypeString}"); var handlebarsQuery = new HandlebarsQuery() { ClrType = artifact.FullName, QueryName = artifact.Name }; var setableProperties = artifact.GetSettableProperties(); if (setableProperties.Any()) { handlebarsQuery.Properties = CreateProxyProperties(setableProperties); } var proxies = new List <Proxy>(); foreach (var path in configuration.ProxiesBasePath) { proxies.Add(CreateProxy(artifact, template(handlebarsQuery), configuration, path)); } return(proxies); }
IEnumerable <Proxy> GenerateCommandProxy(Type artifact, ArtifactsConfiguration artifactsConfig, BuildTaskConfiguration configuration, Func <object, string> template) { _buildMessages.Trace($"Creating command proxy for {ClrType.FromType(artifact).TypeString}"); var artifactId = GetArtifactId(artifact, artifactsConfig); var handlebarsCommand = new HandlebarsCommand() { CommandName = artifact.Name, ArtifactId = artifactId.Value.ToString() }; var setableProperties = artifact.GetSettableProperties(); if (setableProperties.Length > 0) { handlebarsCommand.Properties = CreateProxyProperties(setableProperties); } var proxies = new List <Proxy>(); foreach (var path in configuration.ProxiesBasePath) { proxies.Add(CreateProxy(artifact, template(handlebarsCommand), configuration, path)); } return(proxies); }
Proxy GenerateCommandProxy(Type artifact, ArtifactsConfiguration artifactsConfig, BuildTaskConfiguration configuration, Func <object, string> template) { _buildMessages.Trace($"Creating command proxy for {ClrType.FromType(artifact).TypeString}"); var artifactId = GetArtifactId(artifact, artifactsConfig); var handlebarsCommand = new HandlebarsCommand() { CommandName = artifact.Name, ArtifactId = artifactId.Value.ToString() }; var setableProperties = artifact.GetSettableProperties(); if (setableProperties.Any()) { handlebarsCommand.Properties = CreateProxyProperties(setableProperties); } return(CreateProxy(artifact, template(handlebarsCommand), configuration)); }
IEnumerable <Proxy> GenerateReadModelProxy(Type artifact, ArtifactsConfiguration artifactsConfig, BuildTaskConfiguration configuration, Func <object, string> template) { _buildMessages.Trace($"Creating read model proxy for {ClrType.FromType(artifact).TypeString}"); var artifactId = GetArtifactId(artifact, artifactsConfig); var artifactDefinition = GetArtifactDefinition(artifact, artifactsConfig); var handlebarsReadmodel = new HandlebarsReadmodel() { ReadModelName = artifact.Name, ReadModelArtifactId = artifactId.Value.ToString(), ReadModelGeneration = artifactDefinition.Generation.Value.ToString(CultureInfo.InvariantCulture) }; var settableProperties = artifact.GetSettableProperties(); if (settableProperties.Length > 0) { handlebarsReadmodel.Properties = CreateProxyProperties(settableProperties); } var proxies = new List <Proxy>(); foreach (var path in configuration.ProxiesBasePath) { proxies.Add(CreateProxy(artifact, template(handlebarsReadmodel), configuration, path)); } return(proxies); }