Example #1
0
 /// <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");
 }
Example #2
0
 /// <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());
        }
Example #4
0
        Proxy CreateProxy(Type artifact, string fileContent, BuildTaskConfiguration configuration)
        {
            var filePath = GenerateFilePath(artifact, configuration, artifact.Name);

            return(new Proxy()
            {
                Content = fileContent, FullFilePath = filePath
            });
        }
Example #5
0
        /// <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());
        }
Example #6
0
        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);
            }
        }
Example #7
0
        /// <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);
        }
Example #9
0
        string GenerateFilePath(Type artifact, BuildTaskConfiguration configuration, string artifactName)
        {
            var @namespace = artifact.StripExcludedNamespaceSegments(configuration);

            return(Path.Combine(configuration.ProxiesBasePath, @namespace.Replace('.', '/'), $"{artifactName}.js"));
        }
Example #10
0
        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));
        }
Example #11
0
        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));
        }
Example #12
0
        /// <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);
        }
Example #14
0
        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);
        }
Example #16
0
        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);
        }