I left some comments about too complex code and refactoring below. It seems that quite some complexity arrises from the completion of missing fields here. Maybe it is a good idea to move the logic for completing fields into its own class (e.g. FieldCompletor) in order to better structure it and to allow unit testing of the code?