protected static List<MorphAction> GenerateActionsViaDiffEngine()
        {
            if (_actionsViaDiffEngine != null) return _actionsViaDiffEngine;

            using (var agileTemplate = EmbeddedProcessTemplate.Agile6())
            using (var scrumTemplate = EmbeddedProcessTemplate.Scrum2())
            {
                var agileReader = new ProcessTemplateReader(agileTemplate.TemplatePath);
                var scrumReader = new ProcessTemplateReader(scrumTemplate.TemplatePath);

                var processTemplateMap = ProcessTemplateMap.ConvertScrum2ToAgile6();

                var currentProcessTemplate = new ProcessTemplate {WorkItemTypeDefinitions = new ReadOnlyCollection<WorkItemTypeDefinition>(scrumReader.WorkItemTypeDefinitions.ToArray())};
                var goalProcessTemplate = new ProcessTemplate {WorkItemTypeDefinitions = new ReadOnlyCollection<WorkItemTypeDefinition>(agileReader.WorkItemTypeDefinitions.ToArray())};

                var diffEngine = new DiffEngine(processTemplateMap);
                var differences = diffEngine.CompareProcessTemplates(currentProcessTemplate, goalProcessTemplate);

                var morphEngine = new MorphEngine();
                _actionsViaDiffEngine = morphEngine.GenerateActions(differences).ToList();
            }

            return _actionsViaDiffEngine;
        }
        private void SetupDifferences()
        {
            WorkItemTypeDefinition workItemTypeDefinition;
            WitdField field;
            WitdState state;
            using (var template = EmbeddedProcessTemplate.Scrum2())
            {
                var templateReader = new ProcessTemplateReader(template.TemplatePath);
                workItemTypeDefinition = templateReader.WorkItemTypeDefinitions.First();
                field = workItemTypeDefinition.Fields.First(f => !f.ReferenceName.StartsWith("System."));
                state = workItemTypeDefinition.States.First();
            }

            _differences = new IDifference[]
                           {
                               new AddedWorkItemTypeDefinitionDifference(workItemTypeDefinition),
                               new AddedWorkItemStateDifference(workItemTypeDefinition.Name, state),
                               new AddedWorkItemFieldDifference(workItemTypeDefinition.Name, field),
                               new RenamedWorkItemTypeDefinitionDifference("User Story", "Product Backlog Item"),
                               new RenamedWorkItemFieldDifference(workItemTypeDefinition.Name, field.ReferenceName, field),
                               new RenamedWorkItemStateDifference(workItemTypeDefinition.Name, state.Value, state),
                               new ChangedWorkItemFieldDifference(workItemTypeDefinition.Name, field.ReferenceName, field),
                               new ChangedWorkItemStateDifference(workItemTypeDefinition.Name, state.Value, state),
                               new ChangedWorkItemFormDifference(workItemTypeDefinition.Name, workItemTypeDefinition.FormElement),
                               new ChangedWorkItemWorkflowDifference(workItemTypeDefinition.Name, workItemTypeDefinition.WorkflowElement),
                               new RemovedWorkItemTypeDefinitionDifference("Issue"),
                               new RemovedWorkItemFieldDifference(workItemTypeDefinition.Name, field.ReferenceName),
                               new RemovedWorkItemStateDifference(state.Value),
                               new ConsolidatedWorkItemStateDifference(workItemTypeDefinition.Name, state.Value, state)

                           };
        }
        private void SetupDifferences()
        {
            WorkItemTypeDefinition workItemTypeDefinition;
            WitdState state;
            using (var template = EmbeddedProcessTemplate.Scrum2())
            {
                var templateReader = new ProcessTemplateReader(template.TemplatePath);
                workItemTypeDefinition = templateReader.WorkItemTypeDefinitions.First();
                state = workItemTypeDefinition.States.First();
            }

            _differences = new IDifference[]
                           {
                               new RemovedWorkItemTypeDefinitionDifference("Issue"),
                               new RenamedWorkItemStateDifference(workItemTypeDefinition.Name, "not-" + state.Value, state)
                           };
        }