protected virtual void OnImportRequested(string path) { ImportEventHandler handler = ImportRequested; if (handler != null && path != null) { ImportEventArgs args = new ImportEventArgs(path); handler(this, args); UpdateProgress(args.ReturnMessage); } else { UpdateProgress(null); } }
private static void ImportWorkItemTypes(ILogger logger, ApplicationTask task, bool setTaskProgress, ref int step, ImportOptions options, WorkItemStore store, Dictionary <TeamProjectInfo, List <WorkItemTypeDefinition> > teamProjectsWithWorkItemTypes) { var importValidationFailed = false; ImportEventHandler importEventHandler = (sender, e) => { if (e.Severity == ImportSeverity.Error) { importValidationFailed = true; var message = e.Message; var schemaValidationException = e.Exception as XmlSchemaValidationException; if (schemaValidationException != null) { message = string.Format("XML validation error at row {0}, column {1}: {2}", schemaValidationException.LineNumber, schemaValidationException.LinePosition, message); } task.SetError(message); } else if (e.Severity == ImportSeverity.Warning) { task.SetWarning(e.Message); } }; // Validate. if (!task.IsCanceled) { WorkItemType.ValidationEventHandler += importEventHandler; try { foreach (var teamProjectWithWorkItemTypes in teamProjectsWithWorkItemTypes) { var teamProject = teamProjectWithWorkItemTypes.Key; var project = store.Projects[teamProject.Name]; foreach (var workItemTypeFile in teamProjectWithWorkItemTypes.Value) { task.Status = string.Format("Validating {0} for Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); try { WorkItemType.Validate(project, workItemTypeFile.XmlDefinition.OuterXml); } catch (Exception exc) { var message = string.Format("An error occurred while validating {0} for Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); logger.Log(message, exc); task.SetError(message, exc); } if (task.IsCanceled) { break; } } if (task.IsCanceled) { task.Status = "Canceled"; break; } } } finally { WorkItemType.ValidationEventHandler -= importEventHandler; } } // Import. if (!task.IsCanceled && !importValidationFailed) { foreach (var teamProjectWithWorkItemTypes in teamProjectsWithWorkItemTypes) { var teamProject = teamProjectWithWorkItemTypes.Key; var project = store.Projects[teamProject.Name]; project.WorkItemTypes.ImportEventHandler += importEventHandler; try { foreach (var workItemTypeFile in teamProjectWithWorkItemTypes.Value) { if (options.HasFlag(ImportOptions.Simulate)) { var status = string.Format("Simulating import of {0} in Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); if (setTaskProgress) { task.SetProgress(step++, status); } else { task.Status = status; } } else { var status = string.Format("Importing {0} in Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); if (setTaskProgress) { task.SetProgress(step++, status); } else { task.Status = status; } try { project.WorkItemTypes.Import(workItemTypeFile.XmlDefinition.DocumentElement); } catch (Exception exc) { var message = string.Format("An error occurred while importing {0} in Team Project \"{1}\"", workItemTypeFile.DisplayName, teamProject.Name); logger.Log(message, exc); task.SetError(message, exc); } } if (task.IsCanceled) { break; } } } finally { project.WorkItemTypes.ImportEventHandler -= importEventHandler; } if (task.IsCanceled) { task.Status = "Canceled"; break; } } } }