Bug 500969 - Duplicate registry info in combo after changing settings

Using a ocal copy of the registry accounts instead of the same list
to avoid adding the new registry account twice (once upon dialog
completion, once upon preference page completion)

Change-Id: I551354cd4c6416cad992a2e9d9bf047f2aff79b1
Signed-off-by: Xavier Coulon <xcoulon@redhat.com>
Reviewed-on: https://git.eclipse.org/r/80831
Tested-by: Hudson CI
Reviewed-by: Jeff Johnston <jjohnstn@redhat.com>
(cherry picked from commit b821b51f9674b37ff3422c0fda8e524f45fe2d18)
Reviewed-on: https://git.eclipse.org/r/81124
diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/RegistryAccountManager.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/RegistryAccountManager.java
index 602a037..5da02d7 100644
--- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/RegistryAccountManager.java
+++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/RegistryAccountManager.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.linuxtools.internal.docker.core;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.linuxtools.docker.core.IRegistryAccount;
@@ -65,7 +66,7 @@
 		if (this.registryAccounts == null) {
 			this.registryAccounts = storageManager.getAccounts();
 		}
-		return this.registryAccounts;
+		return Collections.unmodifiableList(this.registryAccounts);
 	}
 
 	public IRegistryAccount getAccount(final String serverAddress,
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/preferences/DockerRegistryAccountPreferencePage.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/preferences/DockerRegistryAccountPreferencePage.java
index 2bac7d5..3973046 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/preferences/DockerRegistryAccountPreferencePage.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/preferences/DockerRegistryAccountPreferencePage.java
@@ -261,8 +261,9 @@
 	 */
 	@Override
 	public void init(IWorkbench workbench) {
-		// reinit passwords list
-		passwords = RegistryAccountManager.getInstance().getAccounts();
+		// get a local copy of the accounts
+		passwords = new ArrayList<>(
+				RegistryAccountManager.getInstance().getAccounts());
 
 		// refresh password table
 		if (pwdTableViewer != null) {
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullPushPage.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullPushPage.java
index e3f61c6..e4cd47b 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullPushPage.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/wizards/ImagePullPushPage.java
@@ -151,6 +151,8 @@
 	 *         daemon.
 	 */
 	protected List<IRegistry> getRegistryAccounts() {
+		// get a local copy an insert an entry at the first position for Docker
+		// Hub with no credentials
 		final List<IRegistry> accounts = new ArrayList<>(
 				RegistryAccountManager.getInstance().getAccounts());
 		accounts.add(0, new RegistryInfo(DOCKER_DAEMON_DEFAULT, true));