class AvroRecordConverter {

    public Collection<String> getUnmappedFields() {
        List<String> result = Lists.newArrayList();
        for (Field f : outputSchema.getFields()) {
            String fieldName = f.name();
            if (fieldMapping.containsKey(fieldName)) {
                fieldName = fieldMapping.get(fieldName);
            }

            Schema currentSchema = inputSchema;
            while (fieldName.contains(".")) {
                // Recurse down the schema to find the right field.
                int dotIndex = fieldName.indexOf('.');
                String entityName = fieldName.substring(0, dotIndex);
                // Get the schema. In case we had an optional record, choose
                // just the record.
                currentSchema = getNonNullSchema(currentSchema);
                if (currentSchema.getField(entityName) == null) {
                    // Tried to step into a schema that doesn't exist. Break out
                    // of the loop
                    break;
                }
                currentSchema = currentSchema.getField(entityName).schema();
                fieldName = fieldName.substring(dotIndex + 1);
            }
            if (currentSchema == null
                    || getNonNullSchema(currentSchema).getField(fieldName) == null) {
                result.add(f.name());
            }
        }
        return result;
    }

    public  AvroRecordConverter(Schema inputSchema, Schema outputSchema,
            Map<String, String> fieldMapping);
    public  AvroRecordConverter(Schema inputSchema, Schema outputSchema,
            Map<String, String> fieldMapping, Locale locale);

}