[487917] using server wizard results in a bunch of p2 sites being added

Change-Id: I864422985ffea544032b282db78aef436d5459e3
diff --git a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
index 574ed48..e0efdd5 100644
--- a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
+++ b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/ExtensionUtility.java
@@ -236,7 +236,7 @@
 							configFileAreaExists = configDir.mkdirs();					
 						} catch (Exception e) {
 							// Could fail if user has no write permission
-							printLog("Cannot write to configuration", e);
+							Trace.trace(Trace.WARNING, "Cannot write to configuration", e);
 							configFileAreaExists = false;
 						}
 					}
@@ -245,7 +245,7 @@
 							copyFileUsingFileStreams(masterCopyUrl.openStream(), configFile);
 							cacheFileUrl = configFile.toURI().toURL();
 						} catch (IOException e) {
-							printLog("Cannot write to configuration", e);
+							Trace.trace(Trace.WARNING, "Cannot write to configuration", e);
 						}
 					}
 					if (cacheFileUrl == null) {
@@ -276,7 +276,7 @@
 					}
 				}
 			}
-			printLog("cacheFile=" + cacheFileUrl, null);
+			Trace.trace(Trace.INFO, "cacheFile=" + cacheFileUrl);
 			return getExtensionUpdateSitesDetails(cacheFileUrl, extenList);
 		} catch (CoreException ce) {
 			Trace.trace(Trace.SEVERE, "Could not get extension items details", ce);
@@ -296,11 +296,6 @@
 		return new File(cfgDataUrl.getFile());
 	}
 	
-	private static void printLog(String msg, Exception ex) {
-		Activator.getDefault().getLog().log(new Status(Status.INFO, Activator.PLUGIN_ID, msg, ex));
-	}
-
-	
 	/**
 	 * Returns an array of all known extension update sites.
 	 * <p>
diff --git a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java
index 01d8f26..ecf621c 100644
--- a/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java
+++ b/plugins/org.eclipse.wst.server.discovery/src/org/eclipse/wst/server/discovery/internal/model/ExtensionUpdateSite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 IBM Corporation and others.
+ * Copyright (c) 2008, 2016 IBM Corporation and others.
  * 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
@@ -65,7 +65,12 @@
 		return categories;
 	}
 
-	public List<IServerExtension> getExtensions(IProgressMonitor monitor) throws CoreException , ProvisionException{
+    public List<IServerExtension> getExtensions(IProgressMonitor monitor) throws CoreException , ProvisionException{
+		URI url2 = null;
+		IMetadataRepositoryManager manager = null;
+		IProvisioningAgent agent = null;
+		List<IServerExtension> list = new ArrayList<IServerExtension>();
+		URI[] existingSites = null;
 		try {
 			/*
 			 * To discovery the server adapter, there are three methods:
@@ -78,15 +83,28 @@
 			 *    to use category.xml)
 			 */	
 			BundleContext bd = org.eclipse.wst.server.discovery.internal.Activator.getDefault().getBundle().getBundleContext();			
-			IProvisioningAgent agent = ExtensionUtility.getAgent(bd);
+			agent = ExtensionUtility.getAgent(bd);
 			
-			URI url2 = new URI(url);
+			url2 = new URI(url);
 			
 			// Method 1: Looking at the site.xml
 			UpdateSiteMetadataRepositoryFactory mrf = new UpdateSiteMetadataRepositoryFactory();
 			mrf.setAgent(ExtensionUtility.getAgent(bd));
+			manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+			// Sites already existing for both enabled and disabled
+			URI[] existingSitesAll = manager.getKnownRepositories(IMetadataRepositoryManager.REPOSITORIES_ALL);
+			URI[] existingSitesDisabled = manager.getKnownRepositories(IMetadataRepositoryManager.REPOSITORIES_DISABLED);
+			int existingSitesAllLen = existingSitesAll == null ? 0 : existingSitesAll.length;
+			int existingSitesDisabledLen = existingSitesDisabled == null ? 0 : existingSitesDisabled.length;
+			existingSites = new URI[existingSitesAllLen + existingSitesDisabledLen];
+			if (existingSitesAllLen > 0) {
+				System.arraycopy(existingSitesAll, 0, existingSites, 0, existingSitesAllLen);
+			}
+			if (existingSitesDisabledLen > 0) {
+				System.arraycopy(existingSitesDisabled, 0, existingSites, existingSitesAllLen, existingSitesDisabledLen);
+			}
+			
 			// If the site.xml does not exist, the load will throw a org.eclipse.equinox.p2.core.ProvisionException
-			List<IServerExtension> list = new ArrayList<IServerExtension>();
 			try {
 				IMetadataRepository repo = mrf.load(url2, IRepositoryManager.REPOSITORIES_ALL, monitor);
 				IQuery<IInstallableUnit> query = QueryUtil.createMatchQuery("id ~=/*org.eclipse.wst.server.core.serverAdapter/"); //$NON-NLS-1$
@@ -100,7 +118,6 @@
 			// Call Method 2 if there are no results from Method 1 (e.g. if the site.xml exists without
 			// specifying any server adapters there or no site.xml exists)
 			if (list.isEmpty()){
-				IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
 				manager.addRepository(url2);
 				// Need to query for all IUs
 				IQuery<IInstallableUnit> query = QueryUtil.createIUAnyQuery();
@@ -126,7 +143,7 @@
 			// Call Method 3 if no results from Method 2. Creating the p2 update site using the category.xml will generate
 			// a provider property with org.eclipse.wst.server.core.serverAdapter
 			if (list.isEmpty()){
-				IMetadataRepositoryManager manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
+				manager = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME);
 				manager.addRepository(url2);
 				IQuery<IInstallableUnit> query = QueryUtil.createMatchQuery("id ~=/*org.eclipse.wst.server.core.serverAdapter/"); //$NON-NLS-1$
 				
@@ -143,6 +160,23 @@
 			
 			return new ArrayList<IServerExtension>(0);
 		}
+		finally {
+			if (url2 != null && url2.getPath().length() != 0 && manager != null) {
+				if (existingSites != null && existingSites.length > 0) {
+					boolean urlExists = false;
+					for (URI uri : existingSites) {
+						if (uri.getPath().equals(url2.getPath())){
+							urlExists = true;
+							break;
+						}
+					} 
+					// If site did not exist before, remove it as it was added with load
+					if (!urlExists) {
+						manager.removeRepository(url2);
+					}
+				}
+			}
+		}
 	}
 	
 	// Get the list of InstallableUnits and all its requirements