class RecoveryCodeGenerator {

    public String generateDelimitedCode(CodeGeneratorSource alphabet, char delimiter, int... groups) {
        Reject.ifNull(groups);
        Reject.ifTrue(groups.length < 1);
        Reject.ifNull(delimiter);

        StringBuilder codeBuilder = new StringBuilder();

        for (int group : groups) {
            Reject.ifTrue(group < 1);
            if (codeBuilder.length() > 0) {
                codeBuilder.append(delimiter);
            }
            codeBuilder.append(generateCode(alphabet, group));
        }

        return codeBuilder.toString();
    }

    public  RecoveryCodeGenerator(SecureRandom secureRandom, int retryMaximum);
    @Inject public  RecoveryCodeGenerator(SecureRandom secureRandom);

}