package fr.keemto.core;
import java.util.ArrayList;
import java.util.List;
public class AccountLocator {
private final List<AccountRepository> registeredRepositories;
public AccountLocator(List<AccountRepository> preRegisteredRepositories) {
this.registeredRepositories = new ArrayList<AccountRepository>(preRegisteredRepositories);
}
public List<Account> findAccounts(User user) {
List<Account> accounts = new ArrayList<Account>();
for (AccountRepository repository : registeredRepositories) {
List<Account> userAccounts = repository.getAccounts(user);
accounts.addAll(userAccounts);
}
return accounts;
}
public Account findAccount(AccountKey key) {
String providerId = key.getProviderId();
AccountRepository accountRepository = selectFactoryByProvider(providerId);
return accountRepository.getAccount(key);
}
private AccountRepository selectFactoryByProvider(String providerId) {
for (AccountRepository repository : registeredRepositories) {
if (repository.supports(providerId)) {
return repository;
}
}
throw new IllegalArgumentException("Unable to find an account factory for " + providerId
+ ". Please check if provider " + providerId + " is a valid provider.");
}
public void register(AccountRepository repository) {
registeredRepositories.add(repository);
}
}