11using System ;
22using System . Collections . Generic ;
3+ using System . IO ;
34using System . Linq ;
45using Microsoft . Extensions . Logging ;
56using Microsoft . Extensions . Options ;
89using MigrationTools . DataContracts ;
910using MigrationTools . Processors . Infrastructure ;
1011using MigrationTools . Tools . Infrastructure ;
12+ using Newtonsoft . Json ;
1113using Riok . Mapperly . Abstractions ;
1214
1315namespace MigrationTools . Tools
@@ -32,6 +34,27 @@ public TfsUserMappingTool(
3234 private readonly CaseInsensitiveStringComparer _workItemNameComparer = new ( ) ;
3335 private readonly TfsUserMappingToolMapper _mapper = new ( ) ;
3436
37+ public static void SerializeUserMap ( string fileName , Dictionary < string , string > userMap , ILogger logger )
38+ {
39+ File . WriteAllText ( fileName , JsonConvert . SerializeObject ( userMap , Formatting . Indented ) ) ;
40+ logger . LogInformation ( "User mappings writen to: {fileName}" , fileName ) ;
41+ }
42+
43+ public static Dictionary < string , string > DeserializeUserMap ( string fileName , ILogger logger )
44+ {
45+ try
46+ {
47+ string fileData = File . ReadAllText ( fileName ) ;
48+ var mapping = JsonConvert . DeserializeObject < Dictionary < string , string > > ( fileData ) ;
49+ return new Dictionary < string , string > ( mapping , StringComparer . CurrentCultureIgnoreCase ) ;
50+ }
51+ catch ( Exception )
52+ {
53+ logger . LogError ( $ "TfsUserMappingTool::DeserializeUserMap User mapping could not be deserialized from file '{ fileName } '.", fileName ) ;
54+ }
55+ return [ ] ;
56+ }
57+
3558 private HashSet < string > GetUsersFromWorkItems ( List < WorkItemData > workitems , List < string > identityFieldsToCheck )
3659 {
3760 HashSet < string > foundUsers = new ( StringComparer . CurrentCultureIgnoreCase ) ;
@@ -72,22 +95,12 @@ public void MapUserIdentityField(Field field)
7295
7396 private Dictionary < string , string > GetMappingFileData ( )
7497 {
75- if ( ! System . IO . File . Exists ( Options . UserMappingFile ) )
98+ if ( ! File . Exists ( Options . UserMappingFile ) )
7699 {
77100 Log . LogError ( "TfsUserMappingTool::GetMappingFileData:: The UserMappingFile '{UserMappingFile}' cant be found! Provide a valid file or disable TfsUserMappingTool!" , Options . UserMappingFile ) ;
78101 return [ ] ;
79102 }
80- var fileData = System . IO . File . ReadAllText ( Options . UserMappingFile ) ;
81- try
82- {
83- var fileMaps = Newtonsoft . Json . JsonConvert . DeserializeObject < List < IdentityMapData > > ( fileData ) ;
84- return fileMaps . ToDictionary ( x => x . Source . DisplayName , x => x . Target ? . DisplayName ) ;
85- }
86- catch ( Exception )
87- {
88- Log . LogError ( $ "TfsUserMappingTool::GetMappingFileData [UserMappingFile|{ Options . UserMappingFile } ] <-- invalid - No mapping are applied!") ;
89- }
90- return [ ] ;
103+ return DeserializeUserMap ( Options . UserMappingFile , Log ) ;
91104 }
92105
93106 private List < IdentityItemData > GetUsersListFromServer ( IGroupSecurityService gss )
0 commit comments