protected override void Context()
        {
            base.Context();
            _simulation    = A.Fake <IMoBiSimulation>();
            _simulation.Id = "toto";
            _simulationStatusChangedEvent = new SimulationStatusChangedEvent(_simulation);
            _simulationNode = new Nodes.TextNode("Simulation");

            var buildConfiguration = A.Fake <IMoBiBuildConfiguration>();

            var spatialStructure = A.Fake <IMoBiSpatialStructure>().WithId("SpatialStructure");

            spatialStructure.Version = 5;
            var templateSpatialStructure = A.Fake <IMoBiSpatialStructure>().WithId("TemplateSpatialStructure");
            var spatialStructureInfo     = new SpatialStructureInfo();

            spatialStructureInfo.TemplateBuildingBlock = templateSpatialStructure;
            spatialStructureInfo.BuildingBlock         = spatialStructure;
            buildConfiguration.SpatialStructureInfo    = spatialStructureInfo;
            A.CallTo(() => buildConfiguration.BuildingInfoForTemplateById(spatialStructureInfo.TemplateBuildingBlockId)).Returns(spatialStructureInfo);

            var moleculesInfo         = new MoleculesInfo();
            var templateBuildingBlock = A.Fake <IMoleculeBuildingBlock>().WithId("TemplateMolecules");
            var moleculeBuildingBlock = A.Fake <IMoleculeBuildingBlock>().WithId("Molecules");

            moleculesInfo.TemplateBuildingBlock = templateBuildingBlock;
            moleculesInfo.BuildingBlock         = moleculeBuildingBlock;
            A.CallTo(() => buildConfiguration.BuildingInfoForTemplateById(moleculesInfo.TemplateBuildingBlockId)).Returns(moleculesInfo);

            buildConfiguration.MoleculesInfo = moleculesInfo;
            A.CallTo(() => buildConfiguration.AllBuildingBlockInfos()).Returns(new IBuildingBlockInfo[] { spatialStructureInfo, moleculesInfo });
            A.CallTo(() => buildConfiguration.HasChangedBuildingBlocks()).Returns(true);

            _buildingBlockInfoDTOChanged   = spatialStructureInfo;
            _buildingBlockInfoDTOUnchanged = moleculesInfo;

            _treeView = A.Fake <IUxTreeView>();
            var configNode = new BuildConfigurationNode(buildConfiguration).Under(_simulationNode);

            _nodeToChange = new BuildingBlockInfoNode(_buildingBlockInfoDTOChanged)
                            .WithIcon(ApplicationIcons.SpatialStructureGreen)
                            .Under(configNode);

            _nodeNotToChange = new BuildingBlockInfoNode(_buildingBlockInfoDTOUnchanged)
                               .WithIcon(ApplicationIcons.MoleculeGreen)
                               .Under(configNode);

            A.CallTo(() => _view.TreeView).Returns(_treeView);
            A.CallTo(() => _treeView.NodeById(_simulation.Id)).Returns(_simulationNode);
            A.CallTo(() => _simulation.MoBiBuildConfiguration).Returns(buildConfiguration);
        }
        /// <summary>
        /// Starts a new build. Does nothing if a build is already in process.
        /// </summary>
        /// <param name="configuration">The <see cref="BuildConfiguration"/> representing what configuration to build.</param>
        /// <param name="args">The arguments to use for building.</param>
        public void Start(BuildConfigurationNode configuration, BuildStartArgs args)
        {
            lock (LOCK)
            {
                if (configuration == null)
                {
                    throw new ArgumentNullException("configuration");
                }
                if (args == null)
                {
                    throw new ArgumentNullException("args");
                }

                if (IsRunning)
                {
                    return;
                }

                // Set up build log
                _buildLog = new BuildLog();
                _buildLog.AffectedUser = Environment.UserDomainName;
                _buildLog.BuildStarted = DateTime.UtcNow;

                _buildThread = new Thread(BuildThread);
                _buildThread.Start(new object[2] { configuration, args });
            }
        }