class StringSubstitutionEngine implements StringSubstitutor {

    @Override
    public void substituteGroups(List<String> groups)
            throws StringSubstitutionException {
        if (!isValid(groups)) {
            throw new StringSubstitutionException(_strings.get("missingGroupIdentifiers"));
        }
        for (String groupId : groups) {
            Group group = findGroupById(groupId);
            if (group == null) {
                _logger.log(Level.WARNING, SLogger.MISSING_GROUP, groupId);
                continue;
            }
            doSubstitution(group);
        }
    }

    public  StringSubstitutionEngine(InputStream inputStream);

}