public Map<String, String> calculateSubstututions(SourceDetails details, SourceProject project) {
    Map<String, String> substitutes = new HashMap<String, String>();
    for(String field : details.getFields().keySet()) {
       String type = details.getFields().get(field);
       SourceDetails fieldDetails = project.GetDetails(type);
       if(fieldDetails != null) {
          PopulateFrom(fieldDetails, field, substitutes);
       }
    }
    PopulateFrom(details, null, substitutes);
    return substitutes;
 }