예제 #1
0
 //private IAppRepositoryBase<ProjectUnit> _projectUnitRepository;
 //private IProjectHelper _projectHelper;
 public ProjectStatisticsService(
     IAppRepositoryBase <Project> projectRepository,
     IAppRepositoryBase <QualityProblem> qualityProblemRepository,
     IAppRepositoryBase <SafetyProblem> safetyProblemRepository,
     //IAppRepositoryBase<ProjectUnit> projectUnitRepository,
     IAuthInfoProvider authInfoProvider,
     IWfEngine wfEngine,
     IAuthorizationRepositoryBase <User> userRepository,
     IAuthorizationRepositoryBase <UserUnit> userUnitRepository,
     //IAppDbContextProvider dbContextProvider,
     //IMessagingProvider messagingProvider,
     IProjectHelper projectHelper
     )
 {
     //_projectHelper = projectHelper;
     //_messagingProvider = messagingProvider;
     _authInfoProvider   = authInfoProvider;
     _userRepository     = userRepository;
     _userUnitRepository = userUnitRepository;
     //_runtimeProvider = wfEngine.GetRuntimeProvider();
     //_taskProvider = wfEngine.GetTaskProvider();
     //_definitionProvder = wfEngine.GetDefinitionProvider();
     //_historyProvider = wfEngine.GetHistoryProvider();
     //_dbContextProvider = dbContextProvider;
     _projectRepository        = projectRepository;
     _qualityProblemRepository = qualityProblemRepository;
     _safetyProblemRepository  = safetyProblemRepository;
     //_projectUnitRepository = projectUnitRepository;
 }
예제 #2
0
 public ProjectService(
     IAppRepositoryBase <Project> projectRepository,
     IAppRepositoryBase <ProjectUnit> projectUnitRepository,
     IAuthInfoProvider authInfoProvider,
     IWfEngine wfEngine,
     IAuthorizationRepositoryBase <User> userRepository,
     IAuthorizationRepositoryBase <UserUnit> userUnitRepository,
     IAppDbContextProvider dbContextProvider,
     IMessagingProvider messagingProvider,
     IProjectHelper projectHelper
     )
 {
     _projectHelper         = projectHelper;
     _messagingProvider     = messagingProvider;
     _authInfoProvider      = authInfoProvider;
     _userRepository        = userRepository;
     _userUnitRepository    = userUnitRepository;
     _runtimeProvider       = wfEngine.GetRuntimeProvider();
     _taskProvider          = wfEngine.GetTaskProvider();
     _definitionProvder     = wfEngine.GetDefinitionProvider();
     _historyProvider       = wfEngine.GetHistoryProvider();
     _dbContextProvider     = dbContextProvider;
     _projectRepository     = projectRepository;
     _projectUnitRepository = projectUnitRepository;
 }
예제 #3
0
 public QualityAccidentService(
     IAuthInfoProvider authInfoProvider,
     IAppRepositoryBase <QualityAccident> accidentRepository,
     IAppRepositoryBase <QualityAccidentDisposal> disposalRepository,
     //  IAppRepositoryBase<Project> projectRepository,
     IAppDbContextProvider dbContextProvider,
     IDbOperator op,
     IEventBus eventBus,
     IWfEngine wfEngine,
     IProjectHelper projectHelper
     )
 {
     _projectHelper      = projectHelper;
     _authInfoProvider   = authInfoProvider;
     _accidentRepository = accidentRepository;
     _disposalRepository = disposalRepository;
     // _projectRepository = projectRepository;
     _dbContextProvider = dbContextProvider;
     _eventBus          = eventBus;
     _op = op;
     _runtimeProvider   = wfEngine.GetRuntimeProvider();
     _taskProvider      = wfEngine.GetTaskProvider();
     _definitionProvder = wfEngine.GetDefinitionProvider();
     _historyProvider   = wfEngine.GetHistoryProvider();
 }
예제 #4
0
 public QualityProblemService(
     IAuthInfoProvider authInfoProvider,
     IAppRepositoryBase <QualityProblem> problemRepository,
     IAppRepositoryBase <QualityProblemRectification> rectificationRepository,
     // IAppRepositoryBase<Project> projectRepository,
     IAppDbContextProvider dbContextProvider,
     IDbOperator op,
     IEventBus eventBus,
     IWfEngine wfEngine,
     IProjectHelper projectHelper
     )
 {
     _projectHelper           = projectHelper;
     _authInfoProvider        = authInfoProvider;
     _problemRepository       = problemRepository;
     _rectificationRepository = rectificationRepository;
     //_projectRepository = projectRepository;
     _dbContextProvider = dbContextProvider;
     _eventBus          = eventBus;
     _op = op;
     _runtimeProvider   = wfEngine.GetRuntimeProvider();
     _taskProvider      = wfEngine.GetTaskProvider();
     _definitionProvder = wfEngine.GetDefinitionProvider();
     _historyProvider   = wfEngine.GetHistoryProvider();
 }
예제 #5
0
 public ProjectLinkService(IAppRepositoryBase <ProjectLink> linkRepository,
                           IProjectHelper projectHelper,
                           IAppRepositoryBase <ProjectGantt> ganttRepository
                           )
 {
     _ganttRepository = ganttRepository;
     _linkRepository  = linkRepository;
     _projectHelper   = projectHelper;
 }
예제 #6
0
 public MonthlyPlanService(
     IAuthInfoProvider authInfoProvider,
     IAppRepositoryBase <MonthlyPlan> investmentMonthlyPlanRepository,
     // IAppRepositoryBase<Project> projectRepository
     IProjectHelper projectHelper
     )
 {
     _projectHelper    = projectHelper;
     _authInfoProvider = authInfoProvider;
     _planRepository   = investmentMonthlyPlanRepository;
     // _projectRepository = projectRepository;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="TeamProjectController"/> class.
 /// </summary>
 /// <param name="logger">Logs errors and information.</param>
 /// <param name="telemetryClient">The Application Insights telemetry client.</param>
 /// <param name="projectHelper">Helper for creating models and filtering projects as per criteria.</param>
 /// <param name="projectSearchService">Project search service for fetching project with search criteria and filters.</param>
 /// <param name="teamSkillStorageProvider">Provides methods for team skills operations from database.</param>
 public TeamProjectController(
     ILogger <ProjectController> logger,
     TelemetryClient telemetryClient,
     IProjectHelper projectHelper,
     IProjectSearchService projectSearchService,
     ITeamSkillStorageProvider teamSkillStorageProvider)
     : base(telemetryClient)
 {
     this.logger                   = logger;
     this.projectHelper            = projectHelper;
     this.projectSearchService     = projectSearchService;
     this.teamSkillStorageProvider = teamSkillStorageProvider;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MessagingExtensionHelper"/> class.
 /// </summary>
 /// <param name="localizer">The current cultures' string localizer.</param>
 /// <param name="projectSearchService">Search service instance to fetch projects based in search and filter criteria.</param>
 /// <param name="options">>A set of key/value application configuration properties for activity handler.</param>
 /// <param name="projectHelper">Project helper dependency injection.</param>
 /// <param name="projectStatusHelper">Instance of project status helper.</param>
 public MessagingExtensionHelper(
     IStringLocalizer <Strings> localizer,
     IProjectSearchService projectSearchService,
     IOptions <BotSettings> options,
     IProjectHelper projectHelper,
     ProjectStatusHelper projectStatusHelper)
 {
     this.localizer            = localizer;
     this.projectSearchService = projectSearchService;
     this.options             = options ?? throw new ArgumentNullException(nameof(options));
     this.projectStatusHelper = projectStatusHelper;
     this.projectHelper       = projectHelper;
 }
예제 #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ProjectController"/> class.
 /// </summary>
 /// <param name="logger">Logs errors and information.</param>
 /// <param name="telemetryClient">The Application Insights telemetry client.</param>
 /// <param name="projectHelper">Helper for creating models and filtering projects as per criteria.</param>
 /// <param name="projectStorageProvider">Provides methods for add, update and delete project operations from database.</param>
 /// <param name="projectSearchService">Project search service for fetching project with search criteria and filters.</param>
 /// <param name="notificationHelper">Provides methods to send notifications to users.</param>
 public ProjectController(
     ILogger <ProjectController> logger,
     TelemetryClient telemetryClient,
     IProjectHelper projectHelper,
     IProjectStorageProvider projectStorageProvider,
     IProjectSearchService projectSearchService,
     NotificationHelper notificationHelper)
     : base(telemetryClient)
 {
     this.logger                 = logger;
     this.projectHelper          = projectHelper;
     this.projectStorageProvider = projectStorageProvider;
     this.projectSearchService   = projectSearchService;
     this.notificationHelper     = notificationHelper;
 }
예제 #10
0
        /// <param name="isVSIX">
        /// Indicates that the call
        /// is from Visual Studio.
        /// </param>
        protected AbstractSwitch(bool isVSIX, ReferenceType type, IPackageOption packageOption, IProjectHelper projectHelper, IMessageHelper messageHelper)
        {
            IsVSIX = isVSIX;

            if (IsVSIX)
            {
                DTE = Package.GetGlobalService(typeof(DTE)) as DTE;
            }

            Type = type;

            PackageOption = packageOption;
            ProjectHelper = projectHelper;
            MessageHelper = messageHelper;
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ProjectController"/> class.
 /// </summary>
 /// <param name="logger">The ILogger object which logs errors and information.</param>
 /// <param name="projectHelper">The instance of project helper which helps in managing operations on project entity.</param>
 /// <param name="userHelper">Instance of user helper.</param>
 /// <param name="telemetryClient">The Application Insights telemetry client.</param>
 /// <param name="taskMapper">The instance of task mapper.</param>
 /// <param name="taskHelper">The instance of task helper.</param>
 /// <param name="managerDashboardHelper">Holds the instance of manager dashboard helper.</param>
 /// <param name="repositoryAccessors">Holds the instance of respository accessors for database operations.</param>
 public ProjectController(
     ILogger <ProjectController> logger,
     IProjectHelper projectHelper,
     IUserHelper userHelper,
     IManagerDashboardHelper managerDashboardHelper,
     TelemetryClient telemetryClient,
     ITaskMapper taskMapper,
     ITaskHelper taskHelper,
     IRepositoryAccessors repositoryAccessors)
     : base(telemetryClient)
 {
     this.projectHelper          = projectHelper;
     this.userHelper             = userHelper;
     this.managerDashboardHelper = managerDashboardHelper;
     this.logger              = logger;
     this.taskMapper          = taskMapper;
     this.taskHelper          = taskHelper;
     this.repositoryAccessors = repositoryAccessors;
 }
예제 #12
0
 public ProjectTaskService(
     IAppRepositoryBase <ProjectTask> taskRepository,
     IAppRepositoryBase <ProjectGantt> ganttRepository,
     IAuthInfoProvider authInfoProvider,
     IWfEngine wfEngine,
     IAuthorizationRepositoryBase <User> userRepository,
     IAppDbContextProvider dbContextProvider,
     IProjectHelper projectHelper
     )
 {
     _ganttRepository       = ganttRepository;
     _projectHelper         = projectHelper;
     _authInfoProvider      = authInfoProvider;
     _userRepository        = userRepository;
     _runtimeProvider       = wfEngine.GetRuntimeProvider();
     _taskProvider          = wfEngine.GetTaskProvider();
     _definitionProvder     = wfEngine.GetDefinitionProvider();
     _historyProvider       = wfEngine.GetHistoryProvider();
     _dbContextProvider     = dbContextProvider;
     _projectTaskRepository = taskRepository;
 }
예제 #13
0
        public MemorabiliaRecordService(
            IAuthInfoProvider authInfoProvider,
            IWfEngine wfEngine,
            IAppRepositoryBase <MemorabiliaRecord> recordRepository,
            //IAppRepositoryBase<Project> projectRepository,
            IAppDbContextProvider dbContextProvider,
            IProjectHelper projectHelper


            )
        {
            _projectHelper    = projectHelper;
            _authInfoProvider = authInfoProvider;
            _recordRepository = recordRepository;
            // _projectRepository = projectRepository;
            _dbContextProvider = dbContextProvider;
            _runtimeProvider   = wfEngine.GetRuntimeProvider();
            _taskProvider      = wfEngine.GetTaskProvider();
            _definitionProvder = wfEngine.GetDefinitionProvider();
            _historyProvider   = wfEngine.GetHistoryProvider();
        }
예제 #14
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ProjectSearchService"/> class.
        /// </summary>
        /// <param name="optionsAccessor">A set of key/value application configuration properties.</param>
        /// <param name="projectStorageProvider">Project storage provider dependency injection.</param>
        /// <param name="logger">Logger implementation to send logs to the logger service.</param>
        /// <param name="searchServiceClient">Search service client dependency injection.</param>
        /// <param name="searchIndexClient">Search index client dependency injection.</param>
        /// <param name="projectHelper">Helper for creating models and filtering projects as per criteria.</param>
        public ProjectSearchService(
            IOptions <SearchServiceSetting> optionsAccessor,
            IProjectStorageProvider projectStorageProvider,
            ILogger <ProjectSearchService> logger,
            ISearchServiceClient searchServiceClient,
            ISearchIndexClient searchIndexClient,
            IProjectHelper projectHelper)
        {
            optionsAccessor = optionsAccessor ?? throw new ArgumentNullException(nameof(optionsAccessor));

            this.options = optionsAccessor.Value;
            var searchServiceValue = this.options.SearchServiceName;

            this.initializeTask         = new Lazy <Task>(() => this.InitializeAsync());
            this.projectStorageProvider = projectStorageProvider;
            this.logger = logger;
            this.searchServiceClient = searchServiceClient;
            this.searchIndexClient   = searchIndexClient;
            this.retryPolicy         = Policy.Handle <CloudException>(
                ex => (int)ex.Response.StatusCode == StatusCodes.Status409Conflict ||
                (int)ex.Response.StatusCode == StatusCodes.Status429TooManyRequests)
                                       .WaitAndRetryAsync(Backoff.LinearBackoff(TimeSpan.FromMilliseconds(2000), 2));
            this.projectHelper = projectHelper;
        }
예제 #15
0
 public PackageSwitch(bool isVSIX, ReferenceType type, IPackageOption packageOption, IProjectHelper projectHelper, IMessageHelper messageHelper) : base(isVSIX, type, packageOption, projectHelper, messageHelper)
 {
 }
예제 #16
0
        /// <summary>
        /// Runs through a project and generates the files in it.
        /// </summary>
        /// <param name="progressHelper">The TaskProgressHelper to use to report progress and cancel the operation.</param>
        /// <param name="projectInfo">The Project we are generating files from.</param>
        /// <param name="folderName">The name of the root folder to generate into. Not the full path, just the relative path to the
        /// current folder.</param>
        /// <param name="folder"></param>
        /// <param name="parentNode"></param>
        /// <param name="thisLevelRootObject"></param>
        /// <returns></returns>
        /// <param name="loader"></param>
        /// <param name="controller"></param>
        public int GenerateAllFiles(ITaskProgressHelper <GenerateFilesProgress> progressHelper, IProjectHelper projectInfo, string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, ILoader loader, IController controller)
        {
            if (parentNode is ProjectFileTree)
            {
                ((ProjectFileTree)parentNode).TreeRestructuring = true;
                ((ProjectFileTree)parentNode).Clear();
            }
            int fileCount = 0;

            try
            {
                _Controller       = controller;
                _Loader           = loader;
                _ProgressHelper   = progressHelper;
                project           = projectInfo;
                CurrentRootObject = thisLevelRootObject;
                absoluteBasePath  = controller.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator);


                {
                    Version version         = new Version(loader.GetAssemblyVersionNumber());
                    Version expectedVersion = new Version(1, 1, 9, 49);
                    if (version < expectedVersion)
                    {
                        throw new OldVersionException("The template was compiled with an old version of ArchAngel, and cannot be used in this version of Workbench");
                    }
                }


                foreach (IFolder subFolder in folder.SubFolders)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return(fileCount);
                    }

                    ProjectFileTreeNode folderNode = null;

                    if (parentNode != null && subFolder.Name != "ROOT")
                    {
                        folderNode          = parentNode.AddChildNode(subFolder.Name);
                        folderNode.IsFolder = true;
                    }

                    if (!string.IsNullOrEmpty(subFolder.IteratorName))
                    {
                        // The folder has an iterator
                        ProviderInfo provider;
                        Type         iteratorType = project.GetTypeFromProviders(subFolder.IteratorName, out provider);

                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return(fileCount);
                        }

                        if (iteratorType != null)
                        {
                            IEnumerable <IScriptBaseObject> iteratorObjects;

                            if (thisLevelRootObject == null)
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName);
                            }
                            else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                            {
                                iteratorObjects = new[] { thisLevelRootObject };
                            }
                            else
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject);
                            }
                            if (iteratorObjects != null)
                            {
                                foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                                {
                                    if (progressHelper.IsCancellationPending())
                                    {
                                        progressHelper.Cancel();
                                        return(fileCount);
                                    }

                                    CurrentRootObject = iteratorObject;

                                    string subFolderName = UpdateScriptName(iteratorObject, subFolder);

                                    if (folderNode != null)
                                    {
                                        folderNode.Text = subFolderName;
                                    }

                                    subFolderName = Path.Combine(folderName, subFolderName);

                                    //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                                    fileCount += GenerateAllFiles(progressHelper, project, subFolderName, subFolder, folderNode, CurrentRootObject, loader, controller);
                                }
                            }
                        }
                        else
                        {
                            throw new Exception(string.Format("The IteratorType could not be found: {0}. Are you missing an assembly?", subFolder.IteratorName));
                        }
                    }
                    else
                    {
                        // The folder doesn't have an iterator
                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return(fileCount);
                        }
                        string subFolderName = UpdateScriptName(null, subFolder);

                        if (folderNode != null)
                        {
                            folderNode.Text = subFolderName;
                        }
                        subFolderName = Path.Combine(folderName, subFolderName);
                        //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                        fileCount += GenerateAllFiles(progressHelper, projectInfo, subFolderName, subFolder, folderNode, thisLevelRootObject, loader, controller);
                    }

                    //progressHelper.ReportProgress(20, new GenerateFilesProgress(fileCount));
                }

                //progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));

                foreach (IScript script in folder.Scripts)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return(fileCount);
                    }
                    fileCount += CreateScriptFile(progressHelper, folderName, script, parentNode);
                }

                // progressHelper.ReportProgress(80, new GenerateFilesProgress(fileCount));

                foreach (IFile file in folder.Files)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return(fileCount);
                    }
                    fileCount += CreateStaticFile(progressHelper, folderName, file, parentNode);
                }

                //progressHelper.ReportProgress(95, new GenerateFilesProgress(fileCount));

                //Application.DoEvents();
            }
            catch (Exception e)
            {
                progressHelper.ReportProgress(100, new GenerateFilesProgress(fileCount, e));
                return(fileCount);
            }
            finally
            {
                if (parentNode is ProjectFileTree)
                {
                    ((ProjectFileTree)parentNode).TreeRestructuring = false;
                    parentNode.RaiseNodeChangedEvent(parentNode, true);
                }
            }
            progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));
            return(fileCount);
        }
예제 #17
0
        /// <summary>
        /// Runs through a project and generates the files in it.
        /// </summary>
        /// <param name="progressHelper">The TaskProgressHelper to use to report progress and cancel the operation.</param>
        /// <param name="projectInfo">The Project we are generating files from.</param>
        /// <param name="folderName">The name of the root folder to generate into. Not the full path, just the relative path to the 
        /// current folder.</param>
        /// <param name="folder"></param>
        /// <param name="parentNode"></param>
        /// <param name="thisLevelRootObject"></param>
        /// <returns></returns>
        /// <param name="loader"></param>
        /// <param name="controller"></param>
        public int GenerateAllFiles(ITaskProgressHelper<GenerateFilesProgress> progressHelper, IProjectHelper projectInfo, string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, ILoader loader, IController controller)
        {
            if (parentNode is ProjectFileTree)
            {
                ((ProjectFileTree)parentNode).TreeRestructuring = true;
                ((ProjectFileTree)parentNode).Clear();
            }
            int fileCount = 0;

            try
            {
                _Controller = controller;
                _Loader = loader;
                _ProgressHelper = progressHelper;
                project = projectInfo;
                CurrentRootObject = thisLevelRootObject;
                absoluteBasePath = controller.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator);

                {
                    Version version = new Version(loader.GetAssemblyVersionNumber());
                    Version expectedVersion = new Version(1, 1, 9, 49);
                    if (version < expectedVersion)
                    {
                        throw new OldVersionException("The template was compiled with an old version of ArchAngel, and cannot be used in this version of Workbench");
                    }
                }

                foreach (IFolder subFolder in folder.SubFolders)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return fileCount;
                    }

                    ProjectFileTreeNode folderNode = null;

                    if (parentNode != null && subFolder.Name != "ROOT")
                    {
                        folderNode = parentNode.AddChildNode(subFolder.Name);
                        folderNode.IsFolder = true;
                    }

                    if (!string.IsNullOrEmpty(subFolder.IteratorName))
                    {
                        // The folder has an iterator
                        ProviderInfo provider;
                        Type iteratorType = project.GetTypeFromProviders(subFolder.IteratorName, out provider);

                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return fileCount;
                        }

                        if (iteratorType != null)
                        {
                            IEnumerable<IScriptBaseObject> iteratorObjects;

                            if (thisLevelRootObject == null)
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName);
                            }
                            else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                            {
                                iteratorObjects = new[] { thisLevelRootObject };
                            }
                            else
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject);
                            }
                            if (iteratorObjects != null)
                            {
                                foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                                {
                                    if (progressHelper.IsCancellationPending())
                                    {
                                        progressHelper.Cancel();
                                        return fileCount;
                                    }

                                    CurrentRootObject = iteratorObject;

                                    string subFolderName = UpdateScriptName(iteratorObject, subFolder);

                                    if (folderNode != null)
                                    {
                                        folderNode.Text = subFolderName;
                                    }

                                    subFolderName = Path.Combine(folderName, subFolderName);

                                        //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                                    fileCount += GenerateAllFiles(progressHelper, project, subFolderName, subFolder, folderNode, CurrentRootObject, loader, controller);

                                }
                            }
                        }
                        else
                        {
                            throw new Exception(string.Format("The IteratorType could not be found: {0}. Are you missing an assembly?", subFolder.IteratorName));
                        }
                    }
                    else
                    {
                        // The folder doesn't have an iterator
                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return fileCount;
                        }
                        string subFolderName = UpdateScriptName(null, subFolder);

                        if (folderNode != null)
                        {
                            folderNode.Text = subFolderName;
                        }
                        subFolderName = Path.Combine(folderName, subFolderName);
                        //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                        fileCount += GenerateAllFiles(progressHelper, projectInfo, subFolderName, subFolder, folderNode, thisLevelRootObject, loader, controller);
                    }

                    //progressHelper.ReportProgress(20, new GenerateFilesProgress(fileCount));
                }

                //progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));

                foreach (IScript script in folder.Scripts)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return fileCount;
                    }
                    fileCount += CreateScriptFile(progressHelper, folderName, script, parentNode);
                }

                // progressHelper.ReportProgress(80, new GenerateFilesProgress(fileCount));

                foreach (IFile file in folder.Files)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return fileCount;
                    }
                    fileCount += CreateStaticFile(progressHelper, folderName, file, parentNode);
                }

                //progressHelper.ReportProgress(95, new GenerateFilesProgress(fileCount));

                //Application.DoEvents();
            }
            catch(Exception e)
            {
                progressHelper.ReportProgress(100, new GenerateFilesProgress(fileCount, e));
                return fileCount;
            }
            finally
            {
                if (parentNode is ProjectFileTree)
                {
                    ((ProjectFileTree) parentNode).TreeRestructuring = false;
                    parentNode.RaiseNodeChangedEvent(parentNode, true);
                }
            }
            progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));
            return fileCount;
        }