[185011] Do not list older versions of currently installed features
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java
index 0bb977f..11fd470 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java
@@ -102,8 +102,44 @@
}
}
- public static void addFeature(List list, List existing, IFeature newFeature, FeatureListener listener) {
+ /**
+ * Return true if the new feature is already installed, or a newer one is.
+ *
+ * @param existing
+ * @param newFeature
+ * @return true if the new feature is already installed, or a newer one is.
+ */
+ protected static boolean alreadyExists(List existing, IFeature newFeature) {
if (existing.contains(newFeature))
+ return true;
+
+ VersionedIdentifier newVi = newFeature.getVersionedIdentifier();
+ String ver = newVi.toString();
+ int ind = ver.indexOf("_");
+ if (ind >= 0)
+ ver = ver.substring(ind+1);
+ Version newV = new Version(ver);
+
+ Iterator iterator = existing.iterator();
+ while (iterator.hasNext()) {
+ IFeature feature = (IFeature) iterator.next();
+ VersionedIdentifier vi = feature.getVersionedIdentifier();
+ if (vi.getIdentifier().equals(newVi.getIdentifier())) {
+ ver = vi.toString();
+ ind = ver.indexOf("_");
+ if (ind >= 0)
+ ver = ver.substring(ind+1);
+ Version nextCand = new Version(ver);
+ if (nextCand.compareTo(newV) >= 0)
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static void addFeature(List list, List existing, IFeature newFeature, FeatureListener listener) {
+ if (alreadyExists(existing, newFeature))
return;
VersionedIdentifier newVi = newFeature.getVersionedIdentifier();
@@ -274,6 +310,7 @@
SiteManager.getLocalSite().getCurrentConfiguration().getConfiguredSites()[0].install(feature, verificationListener, monitor);
} catch (CoreException ce) {
Trace.trace(Trace.WARNING, "Error installing server adapter", ce);
+ throw ce;
}
try {