| /******************************************************************************* |
| * Copyright (c) 2016 Red Hat. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Red Hat - Initial Contribution |
| *******************************************************************************/ |
| package org.eclipse.linuxtools.internal.docker.core; |
| |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.linuxtools.docker.core.IRegistryAccount; |
| |
| public class RegistryAccountManager { |
| |
| private static RegistryAccountManager instance; |
| |
| /** the storage manager. */ |
| private RegistryAccountStorageManager storageManager = new RegistryAccountStorageManager(); |
| |
| /** local cache of accounts. */ |
| private List<IRegistryAccount> registryAccounts; |
| |
| /** |
| * Private constructor of the singleton |
| */ |
| private RegistryAccountManager() { |
| |
| } |
| |
| public static RegistryAccountManager getInstance() { |
| if (instance == null) { |
| instance = new RegistryAccountManager(); |
| } |
| return instance; |
| } |
| |
| /** |
| * Replaces the default storage manager implementation instance, |
| * {@link RegistryAccountStorageManager} by another one. This can be used |
| * during tests if a mock instance is used to avoid actually storing |
| * registry accounts. |
| * |
| * @param storageManager |
| * the {@link RegistryAccountStorageManager} instance to use |
| */ |
| public void setStorageManager( |
| final RegistryAccountStorageManager storageManager) { |
| this.storageManager = storageManager; |
| // make sure the registry accounts are bound to the new storage manager |
| this.registryAccounts = storageManager.getAccounts(); |
| } |
| |
| /** |
| * @return the underlying {@link RegistryAccountStorageManager} |
| */ |
| public RegistryAccountStorageManager getStorageManager() { |
| return this.storageManager; |
| } |
| |
| public List<IRegistryAccount> getAccounts() { |
| if (this.registryAccounts == null) { |
| this.registryAccounts = storageManager.getAccounts(); |
| } |
| return Collections.unmodifiableList(this.registryAccounts); |
| } |
| |
| public IRegistryAccount getAccount(final String serverAddress, |
| final String username) { |
| return getAccounts().stream() |
| .filter(a -> a.getServerAddress().equals(serverAddress) |
| && a.getUsername().equals(username)) |
| .findFirst().orElse(null); |
| } |
| |
| public void add(final IRegistryAccount info) { |
| this.registryAccounts.add(info); |
| storageManager.add(info); |
| } |
| |
| public void remove(final IRegistryAccount info) { |
| this.registryAccounts.remove(info); |
| storageManager.remove(info); |
| } |
| |
| |
| } |