*** empty log message ***
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java
index 6947d33..6ea9ef8 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/model/DefaultSiteParser.java
@@ -33,7 +33,9 @@
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.update.core.IURLEntry;
import org.eclipse.update.core.SiteFeatureReferenceModel;
+import org.eclipse.update.core.URLEntry;
import org.eclipse.update.internal.core.Digest;
import org.eclipse.update.internal.core.ExtendedSite;
import org.eclipse.update.internal.core.LiteFeature;
@@ -96,6 +98,8 @@
private static final String CATEGORY = "category"; //$NON-NLS-1$
private static final String DESCRIPTION = "description"; //$NON-NLS-1$
private static final String MIRROR = "mirror"; //$NON-NLS-1$
+ private static final String ASSOCIATE_SITES = "associateSites"; //$NON-NLS-1$
+ private static final String ASSOCIATE_SITE = "associateSite"; //$NON-NLS-1$
private static final String DEFAULT_INFO_URL = "index.html"; //$NON-NLS-1$
private static final String FEATURES = "features/"; //$NON-NLS-1$
@@ -544,6 +548,14 @@
}
}
+ if ( (site instanceof ExtendedSite) && (attributes.getValue("associateSitesURL") != null)) { //$NON-NLS-1$
+ IURLEntry[] associateSites = getAssociateSites(attributes.getValue("associateSitesURL"), factory); //$NON-NLS-1$
+ if (associateSites != null)
+ ((ExtendedSite)site).setAssociateSites(associateSites);
+ else
+ site.setMirrorsURLString(mirrorsURL);
+ }
+
objectStack.push(site);
if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_PARSING)
@@ -854,6 +866,43 @@
}
}
+ private static IURLEntry[] getAssociateSites(String associateSitesURL, SiteModelFactory factory) {
+
+ try {
+ DocumentBuilderFactory domFactory =
+ DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = domFactory.newDocumentBuilder();
+ Document document = builder.parse(associateSitesURL);
+ if (document == null)
+ return null;
+ NodeList mirrorNodes = document.getElementsByTagName(ASSOCIATE_SITE);
+ URLEntry[] mirrors = new URLEntry[mirrorNodes.getLength()];
+ for (int i=0; i<mirrorNodes.getLength(); i++) {
+ Element mirrorNode = (Element)mirrorNodes.item(i);
+ mirrors[i] = new URLEntry();
+ String infoURL = mirrorNode.getAttribute("url"); //$NON-NLS-1$
+ String label = mirrorNode.getAttribute("label"); //$NON-NLS-1$
+ mirrors[i].setURLString(infoURL);
+ mirrors[i].setAnnotation(label);
+
+ if (UpdateCore.DEBUG && UpdateCore.DEBUG_SHOW_PARSING)
+ debug("Processed mirror: url:" + infoURL + " label:" + label); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return mirrors;
+ }
+ catch (Exception e) {
+ // log if absolute url
+ if (associateSitesURL != null &&
+ (associateSitesURL.startsWith("http://") //$NON-NLS-1$
+ || associateSitesURL.startsWith("https://") //$NON-NLS-1$
+ || associateSitesURL.startsWith("file://") //$NON-NLS-1$
+ || associateSitesURL.startsWith("ftp://") //$NON-NLS-1$
+ || associateSitesURL.startsWith("jar://"))) //$NON-NLS-1$
+ UpdateCore.log(Messages.DefaultSiteParser_mirrors, e);
+ return null;
+ }
+ }
+
private LiteFeature[] getLightFeatures(ExtendedSite site) {
URL fullDigestURL;
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ExtendedSite.java b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ExtendedSite.java
index 88630b6..1412abe 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ExtendedSite.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/internal/core/ExtendedSite.java
@@ -13,6 +13,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.update.core.IURLEntry;
import org.eclipse.update.internal.model.SiteWithTimestamp;
public class ExtendedSite extends SiteWithTimestamp /*Site*/ {
@@ -22,8 +23,10 @@
private String[] availableLocals;
private String digestURL;
private LiteFeature[] liteFeatures;
+ private IURLEntry[] associateSites;
private boolean pack200 = false;
+
public String getDigestURL() {
return digestURL;
}
@@ -113,5 +116,11 @@
return result;
}
+ public IURLEntry[] getAssociateSites() {
+ return associateSites;
+ }
+ public void setAssociateSites(IURLEntry[] associateSites) {
+ this.associateSites = associateSites;
+ }
}
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java b/update/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java
index 0079758..143a323 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/search/UpdateSearchRequest.java
@@ -12,6 +12,10 @@
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -25,6 +29,7 @@
import org.eclipse.update.core.ISiteWithMirrors;
import org.eclipse.update.core.IURLEntry;
import org.eclipse.update.core.SiteManager;
+import org.eclipse.update.internal.core.ExtendedSite;
import org.eclipse.update.internal.core.Messages;
import org.eclipse.update.internal.operations.UpdateUtils;
import org.eclipse.update.internal.search.SiteSearchCategory;
@@ -59,6 +64,23 @@
private UpdateSearchScope scope;
private boolean searchInProgress = false;
private AggregateFilter aggregateFilter = new AggregateFilter();
+
+ private static class UpdateSearchSite
+ extends UpdateSiteAdapter
+ implements IUpdateSearchSite {
+ private String[] categoriesToSkip;
+
+ public UpdateSearchSite(
+ String label,
+ URL siteURL,
+ String[] categoriesToSkip) {
+ super(label, siteURL);
+ this.categoriesToSkip = categoriesToSkip;
+ }
+ public String[] getCategoriesToSkip() {
+ return categoriesToSkip;
+ }
+}
class MirroredUpdateSiteAdapter extends UpdateSiteAdapter {
public MirroredUpdateSiteAdapter(IURLEntry mirror) {
@@ -215,6 +237,12 @@
searchInProgress = true;
IUpdateSearchQuery[] queries = category.getQueries();
IUpdateSearchSite[] candidates = scope.getSearchSites();
+ Set visitedSitesURL = new HashSet();
+ Set visitedSites = new HashSet();
+ for(int i = 0; i < candidates.length; i++) {
+ visitedSitesURL.add(candidates[i].getURL());
+ //visitedSites.add(candidates[i]);
+ }
URL updateMapURL = scope.getUpdateMapURL();
boolean searchFeatureProvidedSites = scope.isFeatureProvidedSitesEnabled();
@@ -245,6 +273,7 @@
statusList.add(status);
}
+ List combinedAssociateSites = new ArrayList();
for (int i = 0; i < queries.length; i++) {
IUpdateSearchQuery query = queries[i];
IQueryUpdateSiteAdapter qsite = query.getQuerySearchSite();
@@ -258,19 +287,23 @@
continue;
SubProgressMonitor subMonitor =
new SubProgressMonitor(monitor, 1);
+ List associateSites = new ArrayList();
IStatus status =
searchOneSite(
mappedSite,
null,
query,
collector,
+ associateSites,
subMonitor,
true);
if (status != null)
statusList.add(status);
if (monitor.isCanceled())
break;
+ combinedAssociateSites = combineAssociateSites( combinedAssociateSites, associateSites, visitedSitesURL, visitedSites);
}
+
for (int j = 0; j < candidates.length; j++) {
if (monitor.isCanceled()) {
break;
@@ -278,16 +311,48 @@
IUpdateSearchSite source = candidates[j];
SubProgressMonitor subMonitor =
new SubProgressMonitor(monitor, 1);
+ List associateSites = new ArrayList();
IStatus status =
searchOneSite(
source,
source.getCategoriesToSkip(),
query,
collector,
+ associateSites,
subMonitor,
true);
if (status != null)
statusList.add(status);
+ combinedAssociateSites = combineAssociateSites( combinedAssociateSites, associateSites, visitedSitesURL, visitedSites);
+ }
+ if (monitor.isCanceled())
+ break;
+
+
+ for(int associateSitesDepth = 0; associateSitesDepth < 5; associateSitesDepth++) {
+ List tempCombinedSites = new ArrayList();
+ Iterator combinedAssociateSitesIterator = combinedAssociateSites.iterator();
+ while(combinedAssociateSitesIterator.hasNext()) {
+
+ IUpdateSearchSite source = (IUpdateSearchSite)combinedAssociateSitesIterator.next();
+
+ List associateSites = new ArrayList();
+ SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1);
+ IStatus status =
+ searchOneSite(
+ source,
+ source.getCategoriesToSkip(),
+ query,
+ collector,
+ associateSites,
+ subMonitor,
+ true);
+ combinedAssociateSites = combineAssociateSites( tempCombinedSites, associateSites, visitedSitesURL, visitedSites);
+ if (status != null)
+ statusList.add(status);
+ }
+ combinedAssociateSites = tempCombinedSites;
+
}
if (monitor.isCanceled())
break;
@@ -300,7 +365,13 @@
}
searchInProgress = false;
monitor.done();
+
+ Iterator visitedSitesIterator = visitedSites.iterator();
+ while (visitedSitesIterator.hasNext()) {
+ IUpdateSearchSite associateSite = (IUpdateSearchSite)visitedSitesIterator.next();
+ scope.addSearchSite(associateSite.getLabel(), associateSite.getURL(), null);
+ }
if (statusList.size() > 0) {
IStatus[] children =
(IStatus[]) statusList.toArray(new IStatus[statusList.size()]);
@@ -311,11 +382,28 @@
children,
Messages.Search_networkProblems,
null);
+ System.out.println("U ERROR"); //$NON-NLS-1$
throw new CoreException(multiStatus);
}
}
+ private List combineAssociateSites(List combinedAssociateSites, List associateSites, Set visitedSitesURL, Set visitedSites) {
+ Iterator iterator = associateSites.iterator();
+
+ while(iterator.hasNext()) {
+ UpdateSearchSite associateSite = (UpdateSearchSite)iterator.next();
+ if ( !visitedSitesURL.contains(associateSite.getURL())) {
+ combinedAssociateSites.add(associateSite);
+ visitedSitesURL.add(associateSite.getURL());
+ visitedSites.add(associateSite);
+ }
+
+ }
+ return combinedAssociateSites;
+ }
+
+
/*
* See if this query site adapter is mapped in the map file
* to a different URL.
@@ -339,6 +427,7 @@
String[] categoriesToSkip,
IUpdateSearchQuery query,
IUpdateSearchResultCollector collector,
+ List associateSites,
SubProgressMonitor monitor,
boolean checkMirrors)
throws CoreException {
@@ -361,6 +450,7 @@
return null;
}
+
// prompt the user to pick up a site (do not recursively go into mirror sites on the mirror site)
if ((collector instanceof IUpdateSearchResultCollectorFromMirror) &&
(site instanceof ISiteWithMirrors) &&
@@ -369,7 +459,7 @@
IURLEntry mirror = ((IUpdateSearchResultCollectorFromMirror)collector).getMirror((ISiteWithMirrors)site, siteAdapter.getLabel());
if (mirror != null)
- return searchOneSite(new MirroredUpdateSiteAdapter(mirror), categoriesToSkip, query, collector, new SubProgressMonitor(monitor,1), false);
+ return searchOneSite(new MirroredUpdateSiteAdapter(mirror), categoriesToSkip, query, collector, associateSites, new SubProgressMonitor(monitor,1), false);
}
} catch (CoreException e) {
// Test the exception. If the exception is
@@ -389,6 +479,15 @@
text = NLS.bind(Messages.UpdateSearchRequest_checking, siteAdapter.getLabel());
monitor.getWrappedProgressMonitor().subTask(text);
+ if (site instanceof ExtendedSite) {
+ //System.out.println("ExtendedSite is here"); //$NON-NLS-1$
+ IURLEntry[] associateSitesList = ((ExtendedSite)site).getAssociateSites();
+ if (associateSitesList != null) {
+ for(int i = 0; i < associateSitesList.length; i++) {
+ associateSites.add(new UpdateSearchSite(associateSitesList[i].getAnnotation(), associateSitesList[i].getURL(), null));
+ }
+ }
+ }
query.run(
site,
categoriesToSkip,