*** empty log message ***
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
index c088606..0bc71a2 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/forms/DetailsForm.java
@@ -232,15 +232,18 @@
super.initialize(modelObject);
}
- private void configureSectionHandler(FormWidgetFactory factory, Display display) {
+ private void configureSectionHandler(
+ FormWidgetFactory factory,
+ Display display) {
sectionHandler.setHyperlinkUnderlineMode(
HyperlinkHandler.UNDERLINE_NEVER);
sectionHandler.setBackground(factory.getBackgroundColor());
sectionHandler.setForeground(UpdateColors.getTopicColor(display));
}
-
+
protected void updateHeadings() {
- sectionHandler.setForeground(UpdateColors.getTopicColor(getControl().getDisplay()));
+ sectionHandler.setForeground(
+ UpdateColors.getTopicColor(getControl().getDisplay()));
super.updateHeadings();
}
@@ -406,15 +409,17 @@
currentFeature = (IFeature) obj;
refresh();
} else if (obj instanceof IFeatureAdapter) {
- IFeatureAdapter adapter = (IFeatureAdapter)obj;
+ IFeatureAdapter adapter = (IFeatureAdapter) obj;
try {
currentAdapter = adapter;
currentFeature = adapter.getFeature();
} catch (CoreException e) {
//UpdateUIPlugin.logException(e);
- currentFeature = new MissingFeature(adapter.getSite(), adapter.getURL());
- }
- finally {
+ currentFeature =
+ new MissingFeature(
+ adapter.getSite(),
+ adapter.getURL());
+ } finally {
refresh();
}
} else {
@@ -536,8 +541,9 @@
return true;
}
// Random site feature
- if (alreadyInstalled)
- return false;
+ if (alreadyInstalled) {
+ return isBrokenFeatureUpdate();
+ }
// Not installed - check if there are other
// features with this ID that are installed
// and that are newer than this one
@@ -546,6 +552,29 @@
return true;
}
+ private boolean isBrokenFeatureUpdate() {
+ if (installedFeatures.length != 1)
+ return false;
+ IFeature installedFeature = installedFeatures[0];
+ if (installedFeature
+ .getVersionedIdentifier()
+ .equals(currentFeature.getVersionedIdentifier())) {
+ return isBroken(currentFeature);
+ }
+ return false;
+ }
+
+ private boolean isBroken(IFeature feature) {
+ try {
+ IStatus status =
+ SiteManager.getLocalSite().getFeatureStatus(feature);
+ if (status != null && status.getSeverity() == IStatus.ERROR)
+ return true;
+ } catch (CoreException e) {
+ }
+ return false;
+ }
+
private boolean getUninstallButtonVisibility() {
/*
* We will not allow uninstalls for now.
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
index 642a5f3..63d9635 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/UpdatesSearchCategory.java
@@ -110,10 +110,20 @@
public ISiteAdapter getSearchSite() {
return adapter;
}
+ private boolean isBroken() {
+ try {
+ IStatus status =
+ SiteManager.getLocalSite().getFeatureStatus(candidate);
+ return status.getSeverity() == IStatus.ERROR;
+ } catch (CoreException e) {
+ return false;
+ }
+ }
public IFeature[] getMatchingFeatures(
ISite site,
IProgressMonitor monitor) {
ArrayList hits = new ArrayList();
+ boolean broken = isBroken();
IFeatureReference[] refs = site.getFeatureReferences();
monitor.beginTask("", refs.length + 1);
for (int i = 0; i < refs.length; i++) {
@@ -122,11 +132,19 @@
if (isNewerVersion(candidate.getVersionedIdentifier(),
ref.getVersionedIdentifier())) {
hits.add(new Hit(candidate, ref));
+ } else {
+ // accept the same feature if the installed
+ // feature is broken
+ if (broken
+ && candidate.getVersionedIdentifier().equals(
+ ref.getVersionedIdentifier()))
+ hits.add(new Hit(candidate, ref));
}
} catch (CoreException e) {
}
monitor.worked(1);
- if (monitor.isCanceled()) return new IFeature[0];
+ if (monitor.isCanceled())
+ return new IFeature[0];
}
IFeature[] result;
if (hits.size() == 0)
@@ -310,13 +328,15 @@
map.put("unchecked", buf.toString());
}
private ArrayList getSelectedCandidates() {
- if (tableViewer==null || tableViewer.getControl()==null ||
- tableViewer.getControl().isDisposed()) {
- return candidates;
+ if (tableViewer == null
+ || tableViewer.getControl() == null
+ || tableViewer.getControl().isDisposed()) {
+ return candidates;
}
ArrayList selected = new ArrayList();
- Object [] sel = tableViewer.getCheckedElements();
- for (int i=0; i<sel.length; i++) selected.add(sel[i]);
+ Object[] sel = tableViewer.getCheckedElements();
+ for (int i = 0; i < sel.length; i++)
+ selected.add(sel[i]);
return selected;
}
}
\ No newline at end of file