Пример #1
0
 /// <summary>
 /// Instantiates an instance of <see cref="ProxiesBuilder"/>
 /// </summary>
 /// <param name="templateLoader"></param>
 /// <param name="artifacts">The discovered types of artifacts in the Bounded Context's assemblies</param>
 /// <param name="artifactTypes"></param>
 /// <param name="buildMessages"></param>
 public ProxiesBuilder(TemplateLoader templateLoader, Type[] artifacts, ArtifactTypes artifactTypes, IBuildMessages buildMessages)
 {
     _templateLoader = templateLoader;
     _artifacts      = artifacts;
     _artifactTypes  = artifactTypes;
     _buildMessages  = buildMessages;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="BuildTaskPerformers"/>
 /// </summary>
 /// <param name="performers"><see cref="IInstancesOf{ICanPerformPostBuildTasks}">Performers</see></param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages</param>
 public BuildTaskPerformers(
     IInstancesOf <ICanPerformBuildTask> performers,
     IBuildMessages buildMessages)
 {
     _buildMessages = buildMessages;
     _performers    = performers;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="PostBuildTaskPerformers"/> class.
 /// </summary>
 /// <param name="runners">Runners to run.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param>
 public PostBuildTaskPerformers(
     IInstancesOf <ICanPerformPostBuildTask> runners,
     IBuildMessages buildMessages)
 {
     _runners       = runners;
     _buildMessages = buildMessages;
 }
Пример #4
0
        static void ThrowIfDuplicateArtifacts(ArtifactsConfiguration artifacts, IBuildMessages buildMessages)
        {
            var  idMap          = new Dictionary <ArtifactId, ClrType>();
            bool foundDuplicate = false;

            foreach (var artifactDefinitionEntry in artifacts.GetAllArtifactDefinitions())
            {
                if (idMap.ContainsKey(artifactDefinitionEntry.Key))
                {
                    foundDuplicate = true;
                    var artifactId = artifactDefinitionEntry.Key;
                    var clrType    = idMap[artifactId];

                    buildMessages.Error($"The artifacts '{clrType.TypeString}' and '{artifactDefinitionEntry.Value.Type.TypeString}' has the same ArtifactId: '{artifactId}'");
                }
                else
                {
                    idMap.Add(artifactDefinitionEntry.Key, artifactDefinitionEntry.Value.Type);
                }
            }
            if (foundDuplicate)
            {
                throw new DuplicateArtifact();
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="TargetAssemblyModifiers"/> class.
 /// </summary>
 /// <param name="configuration"><see cref="BuildTarget"/> to use.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param>
 public TargetAssemblyModifiers(
     BuildTarget configuration,
     IBuildMessages buildMessages)
 {
     _configuration = configuration;
     _buildMessages = buildMessages;
 }
Пример #6
0
        /// <summary>
        /// Instantiates and instance of <see cref="ArtifactsDiscoverer"/>
        /// </summary>
        /// <param name="assemblyContext"></param>
        /// <param name="artifactTypes"></param>
        /// <param name="buildMessages"></param>
        public ArtifactsDiscoverer(IAssemblyContext assemblyContext, ArtifactTypes artifactTypes, IBuildMessages buildMessages)
        {
            _assemblyContext = assemblyContext;
            _artifactTypes   = artifactTypes.ToArray();
            _buildMessages   = buildMessages;

            Artifacts = DiscoverArtifacts();
        }
        /// <summary>
        /// Instantiates an instance of <see cref="ArtifactsConfigurationBuilder"/>
        /// </summary>
        /// <param name="artifacts">The discovered types of artifacts in the Bounded Context's assemblies</param>
        /// <param name="currentArtifactsConfiguration">The current <see cref="ArtifactsConfiguration"/> that will be used as a base for building a valid updated configuration that is returned from Build</param>
        /// <param name="artifactTypes">A list of <see cref="ArtifactType"/> which represents the different artifact types</param>
        /// <param name="buildMessages"></param>
        public ArtifactsConfigurationBuilder(Type[] artifacts, ArtifactsConfiguration currentArtifactsConfiguration, ArtifactTypes artifactTypes, IBuildMessages buildMessages)
        {
            _artifacts     = artifacts;
            _buildMessages = buildMessages;

            _artifactTypes = artifactTypes;
            _currentArtifactsConfiguration = currentArtifactsConfiguration;
        }
 /// <summary>
 /// Validates the <see cref="ArtifactsConfiguration"/> based on the bounded context's topology and the discoved artifact types in the assemblies of the bounded context.
 /// </summary>
 /// <param name="configuration">The <see cref="ArtifactsConfiguration"/> being extended.</param>
 /// <param name="boundedContextTopology"><see cref="BoundedContextTopology"/> to validate against.</param>
 /// <param name="types">All <see cref="Type">types</see> to validate.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages.</param>
 public static void ValidateArtifacts(
     this ArtifactsConfiguration configuration,
     BoundedContextTopology boundedContextTopology,
     IEnumerable <Type> types,
     IBuildMessages buildMessages)
 {
     ThrowIfDuplicateArtifacts(configuration, buildMessages);
     WarnIfFeatureMissingFromTopology(configuration, boundedContextTopology, buildMessages);
     WarnIfArtifactNoLongerInStructure(configuration, types, buildMessages);
 }
Пример #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CopyFiles"/> class.
 /// </summary>
 /// <param name="configuration"><see cref="Configuration"/> to use.</param>
 /// <param name="assemblyPaths"><see cref="AssemblyPaths"/> to use.</param>
 /// <param name="assemblies"><see cref="Assemblies"/> for handling what assemblies is part of the deployment.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param>
 /// <param name="buildTarget">Current <see cref="BuildTarget"/>.</param>
 public CopyFiles(
     Configuration configuration,
     AssemblyPaths assemblyPaths,
     Assemblies assemblies,
     IBuildMessages buildMessages,
     BuildTarget buildTarget)
 {
     _configuration = configuration;
     _assemblyPaths = assemblyPaths;
     _assemblies    = assemblies;
     _buildMessages = buildMessages;
     _buildTarget   = buildTarget;
 }
 /// <summary>
 /// Initializes a new instance of <see cref="ContractToImplementorMapEmbedder"/>
 /// </summary>
 /// <param name="buildTarget"><see cref="BuildTarget"/> to embed for</param>
 /// <param name="modifiers"><see cref="ITargetAssemblyModifiers"/> for working with modifiers</param>
 /// <param name="serializer"><see cref="IContractToImplementorsSerializer"/> for serializating maps</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages</param>
 /// <param name="logger"><see cref="ILogger"/> for logging</param>
 public ContractToImplementorMapEmbedder(
     BuildTarget buildTarget,
     ITargetAssemblyModifiers modifiers,
     IContractToImplementorsSerializer serializer,
     IBuildMessages buildMessages,
     ILogger logger)
 {
     _buildTarget   = buildTarget;
     _modifiers     = modifiers;
     _buildMessages = buildMessages;
     _logger        = logger;
     _serializer    = serializer;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ArtifactsEmbedder"/> class.
 /// </summary>
 /// <param name="configuration">Current <see cref="Configuration"/> used.</param>
 /// <param name="buildTarget">Current <see cref="BuildTarget"/> being built.</param>
 /// <param name="assemblies">All <see cref="Assemblies"/>.</param>
 /// <param name="modifiers"><see cref="ITargetAssemblyModifiers"/> for modifying the target.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> to use for outputting build messages.</param>
 public ArtifactsEmbedder(
     Configuration configuration,
     BuildTarget buildTarget,
     Assemblies assemblies,
     ITargetAssemblyModifiers modifiers,
     IBuildMessages buildMessages)
 {
     _configuration = configuration;
     _assemblies    = assemblies;
     _modifiers     = modifiers;
     _buildTarget   = buildTarget;
     _buildMessages = buildMessages;
 }
Пример #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BuildTask"/> class.
 /// </summary>
 /// <param name="buildTarget">Current <see cref="BuildTarget"/>.</param>
 /// <param name="configuration">Current <see cref="BuildTaskConfiguration"/>.</param>
 /// <param name="boundedContextLoader"><see cref="IBoundedContextLoader"/> for loading bounded-context.json.</param>
 /// <param name="artifactTypes">Known <see cref="ArtifactTypes"/>.</param>
 /// <param name="topologyConfigurationHandler"><see cref="TopologyConfigurationHandler"/> for handling topology configuration.</param>
 /// <param name="artifactsConfigurationHandler"><see cref="ArtifactsConfigurationHandler"/> for handling artifacts configuration.</param>
 /// <param name="proxiesHandler"><see cref="ProxiesHandler"/> for dealing with proxies.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param>
 public BuildTask(
     BuildTarget buildTarget,
     BuildTaskConfiguration configuration,
     IBoundedContextLoader boundedContextLoader,
     ArtifactTypes artifactTypes,
     TopologyConfigurationHandler topologyConfigurationHandler,
     ArtifactsConfigurationHandler artifactsConfigurationHandler,
     ProxiesHandler proxiesHandler,
     IBuildMessages buildMessages)
 {
     _configuration                 = configuration;
     _boundedContextLoader          = boundedContextLoader;
     _artifactTypes                 = artifactTypes;
     _buildMessages                 = buildMessages;
     _topologyConfigurationHandler  = topologyConfigurationHandler;
     _artifactsConfigurationHandler = artifactsConfigurationHandler;
     _proxiesHandler                = proxiesHandler;
     _buildTarget = buildTarget;
 }
Пример #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ArtifactsConfigurationHandler"/> class.
 /// </summary>
 /// <param name="configurationManager"><see cref="IArtifactsConfigurationManager"/> for working with the configuration.</param>
 /// <param name="artifactTypes">A list of <see cref="ArtifactType"/> which represents the different artifact types.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for build message output.</param>
 public ArtifactsConfigurationHandler(IArtifactsConfigurationManager configurationManager, ArtifactTypes artifactTypes, IBuildMessages buildMessages)
 {
     _configurationManager = configurationManager;
     _artifactTypes        = artifactTypes;
     _buildMessages        = buildMessages;
 }
 /// <summary>
 /// Instantiates an instance of <see cref="TopologyConfigurationHandler"/>
 /// </summary>
 /// <param name="configurationManager"></param>
 /// <param name="buildMessages"></param>
 public TopologyConfigurationHandler(ITopologyConfigurationManager configurationManager, IBuildMessages buildMessages)
 {
     _configurationManager = configurationManager;
     _buildMessages        = buildMessages;
 }
 public IdempotentUnitOfWork(IStoreMessages storage, IDispatchMessages dispatcher, IBuildMessages builder)
 {
     this.storage = storage;
     this.dispatcher = dispatcher;
     this.builder = builder;
 }
Пример #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FileCopier"/> class.
 /// </summary>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for build messages.</param>
 /// <param name="destinationPath">Destination path the copier is for.</param>
 public FileCopier(IBuildMessages buildMessages, string destinationPath)
 {
     _destinationPath = destinationPath;
     _buildMessages   = buildMessages;
 }
        static void ThrowIfDuplicateId(Applications.Configuration.Topology topology, bool useModules, IBuildMessages buildMessages)
        {
            var  idMap          = new Dictionary <Guid, string>();
            bool hasDuplicateId = false;

            if (useModules)
            {
                foreach (var module in topology.Modules)
                {
                    if (idMap.ContainsKey(module.Key))
                    {
                        hasDuplicateId = true;
                        var name = idMap[module.Key];

                        buildMessages.Error(
                            $"Duplicate id found in bounded-context topology.\n" +
                            $"The id: '{module.Key.Value}' is already occupied by the Module/Feature: '{name}' ");
                    }
                    else
                    {
                        idMap.Add(module.Key, module.Value.Name);
                    }

                    ThrowIfDuplicateId(module.Value.Features, ref idMap, ref hasDuplicateId, buildMessages);
                }
            }
            else
            {
                ThrowIfDuplicateId(topology.Features, ref idMap, ref hasDuplicateId, buildMessages);
            }

            if (hasDuplicateId)
            {
                throw new InvalidTopology("Bounded context topology has one or more Features/Modules with the same Id");
            }
        }
Пример #18
0
 public IdempotentUnitOfWork(IStoreMessages storage, IDispatchMessages dispatcher, IBuildMessages builder)
 {
     this.storage    = storage;
     this.dispatcher = dispatcher;
     this.builder    = builder;
 }
Пример #19
0
        static void WarnIfArtifactNoLongerInStructure(ArtifactsConfiguration artifacts, IEnumerable <Type> types, IBuildMessages messages)
        {
            var artifactDefinitions = new Dictionary <ArtifactId, ArtifactDefinition>();

            foreach (var artifactDefinitionEntry in artifacts.GetAllArtifactDefinitions())
            {
                if (!types.Contains(artifactDefinitionEntry.Value.Type.GetActualType()))
                {
                    artifactDefinitions.Add(artifactDefinitionEntry.Key, artifactDefinitionEntry.Value);
                }
            }
            if (artifactDefinitions.Any())
            {
                messages.Warning("There are artifacts that are not found in the Bounded Context's artifacts file:");
                messages.Warning("Artifacts:");
                foreach (var artifactDefinitionEntry in artifactDefinitions)
                {
                    messages.Warning($"\tArtifact: '{artifactDefinitionEntry.Key.Value}' - '{artifactDefinitionEntry.Value.Type.TypeString} @{artifactDefinitionEntry.Value.Generation.Value}'");
                }
                throw new ArtifactNoLongerInStructure();
            }
        }
Пример #20
0
        static void WarnIfFeatureMissingFromTopology(ArtifactsConfiguration artifacts, BoundedContextTopology boundedContextTopology, IBuildMessages buildMessages)
        {
            Dictionary <Feature, FeatureName> featureMap = boundedContextTopology.RetrieveAllFeatureIds();

            foreach (var artifact in artifacts)
            {
                if (!featureMap.ContainsKey(artifact.Key))
                {
                    buildMessages.Warning($"Found artifacts under a Feature that does not exist in the topology. Feature: '{artifact.Key}':");
                    buildMessages.Warning("Artifacts:");

                    var artifactDefinitions = artifacts.GetAllArtifactDefinitions(artifact.Key);
                    foreach (var definitionEntry in artifactDefinitions)
                    {
                        buildMessages.Warning($"\tArtifact: '{definitionEntry.Key.Value}' - '{definitionEntry.Value.Type.TypeString} @{definitionEntry.Value.Generation.Value}'");
                    }
                }
            }
        }
Пример #21
0
 /// <summary>
 /// Instantiates an instance of <see cref="TopologyBuilder"/>
 /// </summary>
 /// <param name="artifacts">The discovered types of artifacts in the Bounded Context's assemblies</param>
 /// <param name="boundedContextTopology">The <see cref="BoundedContextConfiguration"/> that will be modified, validated and returned from Build</param>
 /// <param name="buildMessages"></param>
 public TopologyBuilder(Type[] artifacts, BoundedContextTopology boundedContextTopology, IBuildMessages buildMessages)
 {
     _artifactTypes = artifacts;
     _buildMessages = buildMessages;
     _configuration = boundedContextTopology;
 }
Пример #22
0
 /// <summary>
 /// Validates the <see cref="ArtifactsConfiguration"/> based on the bounded context's topology and the discoved artifact types in the assemblies of the bounded context
 /// </summary>
 public static void ValidateArtifacts(this ArtifactsConfiguration artifacts, BoundedContextTopology boundedContextTopology, Type[] types, IBuildMessages buildMessages)
 {
     ThrowIfDuplicateArtifacts(artifacts, buildMessages);
     WarnIfFeatureMissingFromTopology(artifacts, boundedContextTopology, buildMessages);
     WarnIfArtifactNoLongerInStructure(artifacts, types, buildMessages);
 }
 /// <summary>
 /// Initializes a new instance of <see cref="PerformerConfigurationManager"/>
 /// </summary>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting messages</param>
 /// <param name="fileSystem"><see cref="IFileSystem"/> to use</param>
 /// <param name="serializer">JSON <see cref="ISerializer"/></param>
 public PerformerConfigurationManager(IBuildMessages buildMessages, IFileSystem fileSystem, ISerializer serializer)
 {
     _fileSystem    = fileSystem;
     _serializer    = serializer;
     _buildMessages = buildMessages;
 }
        static void ThrowIfDuplicateId(IDictionary <Feature, FeatureDefinition> features, ref Dictionary <Guid, string> idMap, ref bool hasDuplicateId, IBuildMessages buildMessages)
        {
            foreach (var feature in features)
            {
                if (idMap.ContainsKey(feature.Key))
                {
                    hasDuplicateId = true;
                    var name = idMap[feature.Key];

                    buildMessages.Error($"The id: '{feature.Key.Value}' is already occupied by the Module/Feature: '{name}' ");
                }
                else
                {
                    idMap.Add(feature.Key, feature.Value.Name);
                }

                ThrowIfDuplicateId(feature.Value.SubFeatures, ref idMap, ref hasDuplicateId, buildMessages);
            }
        }
Пример #25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProxiesHandler"/> class.
 /// </summary>
 /// <param name="templateLoader"><see cref="TemplateLoader"/> for loading templates.</param>
 /// <param name="artifactTypes">All <see cref="ArtifactTypes"/>.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages.</param>
 public ProxiesHandler(TemplateLoader templateLoader, ArtifactTypes artifactTypes, IBuildMessages buildMessages)
 {
     _templateLoader = templateLoader;
     _artifactTypes  = artifactTypes;
     _buildMessages  = buildMessages;
 }
 /// <summary>
 /// Validates the <see cref="Applications.Configuration.Topology"/>.
 /// </summary>
 /// <param name="topology"><see cref="Applications.Configuration.Topology"/> to validate.</param>
 /// <param name="useModules">true if we're using modules, false if not.</param>
 /// <param name="buildMessages"><see cref="IBuildMessages"/> for outputting build messages.</param>
 public static void ValidateTopology(this Applications.Configuration.Topology topology, bool useModules, IBuildMessages buildMessages)
 {
     ThrowIfDuplicateId(topology, useModules, buildMessages);
 }
Пример #27
0
 /// <summary>
 /// Instantiates and instance of <see cref="EventProcessorDiscoverer"/>
 /// </summary>
 /// <param name="assemblyContext"></param>
 /// <param name="buildMessages"></param>
 public EventProcessorDiscoverer(IAssemblyContext assemblyContext, IBuildMessages buildMessages)
 {
     _assemblyContext = assemblyContext;
     _buildMessages   = buildMessages;
 }