public string GetNewNodeName(string sourceNodeName, NodeStructureType nodeStructureType) { Log.LogDebug("NodeStructureEnricher.GetNewNodeName({sourceNodeName}, {nodeStructureType})", sourceNodeName, nodeStructureType.ToString()); string targetStructureName = NodeStructureTypeToLanguageSpecificName(Engine.Target, nodeStructureType); string targetProjectName = Engine.Target.Config.Project; string sourceStructureName = NodeStructureTypeToLanguageSpecificName(Engine.Source, nodeStructureType); string sourceProjectName = Engine.Source.Config.Project; // Replace project name with new name (if necessary) and inject nodePath (Area or Iteration) into path for node validation string newNodeName; if (_prefixProjectToNodes) { newNodeName = $@"{targetProjectName}\{targetStructureName}\{sourceNodeName}"; } else { var regex = new Regex(Regex.Escape(sourceProjectName)); if (sourceNodeName.StartsWith($@"{sourceProjectName}\{sourceStructureName}\")) { newNodeName = regex.Replace(sourceNodeName, targetProjectName, 1); } else { newNodeName = regex.Replace(sourceNodeName, $@"{targetProjectName}\{targetStructureName}", 1); } } // Validate the node exists if (!TargetNodeExists(newNodeName)) { Log.LogWarning("The Node '{newNodeName}' does not exist, leaving as '{newProjectName}'. This may be because it has been renamed or moved and no longer exists, or that you have not migrateed the Node Structure yet.", newNodeName, targetProjectName); newNodeName = targetProjectName; } // Remove nodePath (Area or Iteration) from path for correct population in work item if (newNodeName.StartsWith(targetProjectName + '\\' + targetStructureName + '\\')) { newNodeName = newNodeName.Remove(newNodeName.IndexOf($@"{targetStructureName}\"), $@"{targetStructureName}\".Length); } else if (newNodeName.StartsWith(targetProjectName + '\\' + targetStructureName)) { newNodeName = newNodeName.Remove(newNodeName.IndexOf($@"{targetStructureName}"), $@"{targetStructureName}".Length); } return(newNodeName); }
public string NodeStructureTypeToLanguageSpecificName(IMigrationClient client, NodeStructureType value) { // insert switch statement here switch (value) { case NodeStructureType.Area: return(client.Config.LanguageMaps.AreaPath); case NodeStructureType.Iteration: return(client.Config.LanguageMaps.IterationPath); default: throw new InvalidOperationException("Not a valid NodeStructureType "); } }