Bug 548601: use Platform highlight color in DependencyTreePage

Change-Id: Id78308abc7651bfeb5cfde08a74c0a4497ab0dee
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependencyTreePage.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependencyTreePage.java
index f27b70c..97ec7a1 100644
--- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependencyTreePage.java
+++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependencyTreePage.java
@@ -40,6 +40,9 @@
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.action.ToolBarManager;
 import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.IColorProvider;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
@@ -79,6 +82,7 @@
 import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.progress.UIJob;
 import org.eclipse.ui.progress.WorkbenchJob;
+import org.eclipse.ui.services.IDisposable;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
@@ -124,7 +128,7 @@
 
   ArrayList<DependencyNode> dependencyNodes = new ArrayList<DependencyNode>();
 
-  Color searchHighlightColor;
+  Highlighter highlighter;
 
   MavenProject mavenProject;
 
@@ -146,8 +150,6 @@
 
     FormToolkit formToolkit = managedForm.getToolkit();
 
-    searchHighlightColor = new Color(Display.getDefault(), 242, 218, 170);
-
     ScrolledForm form = managedForm.getForm();
     form.setText(formatFormTitle());
     form.setExpandHorizontal(true);
@@ -160,6 +162,8 @@
     formToolkit.adapt(sashForm);
     formToolkit.adapt(sashForm, true, true);
 
+    highlighter = new Highlighter();
+
     createHierarchySection(sashForm, formToolkit);
 
     createListSection(sashForm, formToolkit);
@@ -795,7 +799,7 @@
       if(matcher != null && !matcher.isEmpty() && element instanceof DependencyNode) {
         org.eclipse.aether.artifact.Artifact a = ((DependencyNode) element).getDependency().getArtifact();
         if(matcher.isMatchingArtifact(a.getGroupId(), a.getArtifactId())) {
-          return searchHighlightColor;
+          return highlighter.getColor();
         }
       }
       return null;
@@ -898,7 +902,7 @@
       if(matcher != null && !matcher.isEmpty() && element instanceof Artifact) {
         Artifact a = (Artifact) element;
         if(matcher.isMatchingArtifact(a.getGroupId(), a.getArtifactId())) {
-          return searchHighlightColor;
+          return highlighter.getColor();
         }
       }
       return null;
@@ -1021,10 +1025,7 @@
   @Override
   public void dispose() {
     MavenPluginActivator.getDefault().getMavenProjectManager().removeMavenProjectChangedListener(this);
-
-    if(searchHighlightColor != null) {
-      searchHighlightColor.dispose();
-    }
+    highlighter.dispose();
     super.dispose();
   }
 
@@ -1109,4 +1110,46 @@
       }
     }.schedule();
   }
+
+  /**
+   * Holds highlight color, bound to "org.eclipse.search.ui.match.highlight" preference. Updates when preference
+   * changes.
+   */
+  private class Highlighter implements IPropertyChangeListener, IDisposable {
+
+    private static final String HIGHLIGHT_BG_COLOR_NAME = "org.eclipse.search.ui.match.highlight";
+
+    private Color color;
+
+    public Highlighter() {
+      initialize();
+    }
+
+    public void initialize() {
+      dispose();
+      JFaceResources.getColorRegistry().addListener(this);
+      setColor();
+    }
+
+    private void setColor() {
+      color = JFaceResources.getColorRegistry().get(HIGHLIGHT_BG_COLOR_NAME);
+    }
+
+    public void dispose() {
+      JFaceResources.getColorRegistry().removeListener(this);
+    }
+
+    public void propertyChange(PropertyChangeEvent event) {
+      String property = event.getProperty();
+      if(HIGHLIGHT_BG_COLOR_NAME.equals(property)) {
+        Display.getDefault().asyncExec(() -> setColor());
+      }
+    }
+
+    private Color getColor() {
+      return color;
+    }
+
+  }
+
 }