Bug 520430 - [Glance] After stopping a reindexing it is not possible to
start it again

Change-Id: I3e57b4c78e4e9658bca380c6ae7dc55c92127a2d
diff --git a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchManager.java b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchManager.java
index 5d91a89..1f07074 100644
--- a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchManager.java
+++ b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchManager.java
@@ -20,7 +20,6 @@
 import org.eclipse.ui.IWindowListener;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
-
 import org.eclipse.ui.glance.internal.GlancePlugin;
 import org.eclipse.ui.glance.internal.panels.SearchPanelManager;
 import org.eclipse.ui.glance.internal.panels.SearchStatusLine;
@@ -29,6 +28,7 @@
 import org.eclipse.ui.glance.internal.sources.TextSourceMaker;
 import org.eclipse.ui.glance.internal.sources.TextSourceManager;
 import org.eclipse.ui.glance.panels.ISearchPanel;
+import org.eclipse.ui.glance.panels.ISearchPanel.IndexingState;
 import org.eclipse.ui.glance.panels.ISearchPanelListener;
 import org.eclipse.ui.glance.sources.ITextSource;
 import org.eclipse.ui.glance.sources.Match;
@@ -331,8 +331,7 @@
 				&& indexRequired) {
 			index();
 		} else {
-			panel.setIndexingState(indexRequired ? ISearchPanel.INDEXING_STATE_INITIAL
-					: ISearchPanel.INDEXING_STATE_DISABLE);
+			panel.setIndexingState(indexRequired ? IndexingState.INITIAL : IndexingState.DISABLED);
 		}
 	}
 
@@ -342,7 +341,7 @@
 			new Thread() {
 				@Override
 				public void run() {
-					panel.setIndexingState(ISearchPanel.INDEXING_STATE_IN_PROGRESS);
+					panel.setIndexingState(IndexingState.IN_PROGRESS);
 					if (source != null) {
 						source.index(monitor);
 					}
@@ -357,7 +356,7 @@
 		if (panel != null) {
 			panel.setEnabled(source != null);
 			if (source == null) {
-				panel.setIndexingState(ISearchPanel.INDEXING_STATE_FINISHED);
+				panel.setIndexingState(IndexingState.FINISHED);
 			}
 		}
 	}
diff --git a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchProgressMonitor.java b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchProgressMonitor.java
index 1a9a7cb..5f574e3 100644
--- a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchProgressMonitor.java
+++ b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/internal/search/SearchProgressMonitor.java
@@ -11,8 +11,8 @@
 package org.eclipse.ui.glance.internal.search;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-
 import org.eclipse.ui.glance.panels.ISearchPanel;
+import org.eclipse.ui.glance.panels.ISearchPanel.IndexingState;
 
 public class SearchProgressMonitor implements IProgressMonitor {
 
@@ -37,7 +37,7 @@
 		if (isCanceled()) {
 			return;
 		}
-		panel.setIndexingState(ISearchPanel.INDEXING_STATE_FINISHED);
+		panel.setIndexingState(IndexingState.FINISHED);
 	}
 
 	@Override
@@ -60,7 +60,8 @@
 	@Override
 	public void setCanceled(boolean value) {
 		this.cancel = value;
-		panel.setIndexingState(ISearchPanel.INDEXING_STATE_FINISHED);
+		if (value)
+			panel.setIndexingState(IndexingState.CANCELED);
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/ISearchPanel.java b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/ISearchPanel.java
index 9d1566c..64fd85f 100644
--- a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/ISearchPanel.java
+++ b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/ISearchPanel.java
@@ -11,7 +11,6 @@
 package org.eclipse.ui.glance.panels;
 
 import org.eclipse.swt.widgets.Control;
-
 import org.eclipse.ui.glance.internal.search.ISearchListener;
 import org.eclipse.ui.glance.internal.search.SearchRule;
 
@@ -21,13 +20,9 @@
  */
 public interface ISearchPanel extends ISearchListener {
 
-	public static int INDEXING_STATE_DISABLE = 0;
-
-	public static int INDEXING_STATE_INITIAL = 1;
-
-	public static int INDEXING_STATE_IN_PROGRESS = 2;
-
-	public static int INDEXING_STATE_FINISHED = 3;
+	public enum IndexingState {
+		DISABLED, INITIAL, IN_PROGRESS, CANCELED, FINISHED
+	}
 
 	public void addPanelListener(ISearchPanelListener listener);
 
@@ -39,7 +34,7 @@
 
 	public Control getControl();
 
-	public void setIndexingState(int state);
+	public void setIndexingState(IndexingState state);
 
 	public void updateIndexingPercent(double percent);
 
diff --git a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/SearchPanel.java b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/SearchPanel.java
index 4404a53..e511bb0 100644
--- a/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/SearchPanel.java
+++ b/bundles/org.eclipse.ui.glance/src/org/eclipse/ui/glance/panels/SearchPanel.java
@@ -55,7 +55,6 @@
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.PreferencesUtil;
-
 import org.eclipse.ui.glance.internal.GlanceEventDispatcher;
 import org.eclipse.ui.glance.internal.GlancePlugin;
 import org.eclipse.ui.glance.internal.panels.CheckAction;
@@ -84,15 +83,15 @@
 	}
 
 	@Override
-	public void setIndexingState(final int state) {
-		indexState = state;
+	public void setIndexingState(final IndexingState state) {
+		indexingState = state;
 
 		if (updateInfoThread != null) {
 			final UpdateInfoThread thread = updateInfoThread;
 			thread.requestStop();
 			updateInfoThread = null;
 		}
-		if (state == INDEXING_STATE_IN_PROGRESS) {
+		if (state == IndexingState.IN_PROGRESS) {
 			indexPercent = 0;
 			try {
 				updateInfoThread = new UpdateInfoThread();
@@ -155,7 +154,7 @@
 
 		@Override
 		protected boolean isTerminated() {
-			return stop || indexState != INDEXING_STATE_IN_PROGRESS;
+			return stop || indexingState != IndexingState.IN_PROGRESS;
 		}
 
 		@Override
@@ -173,27 +172,24 @@
 			return;
 		}
 
-		if (indexState == INDEXING_STATE_DISABLE) {
-			bIndexing.setToolTipText("Index component");
-			bIndexing.setSelection(false);
+		if (indexingState == IndexingState.DISABLED) {
+			bIndexing.setToolTipText("Indexing isn't available for the component");
 			bIndexing.setEnabled(false);
 			if (bIndexing.getImage() == null) {
 				bIndexing.setImage(GlancePlugin
 						.getImage(GlancePlugin.IMG_START_INDEXING));
 			}
-		} else if (indexState == INDEXING_STATE_INITIAL) {
+		} else if (indexingState == IndexingState.INITIAL || indexingState == IndexingState.CANCELED) {
 			bIndexing.setToolTipText("Index component");
-			bIndexing.setSelection(false);
 			bIndexing.setImage(GlancePlugin
 					.getImage(GlancePlugin.IMG_START_INDEXING));
 			bIndexing.setEnabled(true);
-		} else if (indexState == INDEXING_STATE_FINISHED) {
-			bIndexing.setToolTipText("Index finished");
-			bIndexing.setSelection(false);
+		} else if (indexingState == IndexingState.FINISHED) {
+			bIndexing.setToolTipText("Component indexed");
+			bIndexing.setImage(GlancePlugin.getImage(GlancePlugin.IMG_START_INDEXING));
 			bIndexing.setEnabled(false);
 		} else {
 			final StringBuilder buffer = new StringBuilder();
-			bIndexing.setSelection(true);
 			bIndexing.setImage(image);
 			if (taskName != null && taskName.length() > 0) {
 				buffer.append(taskName);
@@ -294,7 +290,7 @@
 			createNextItem(toolBar);
 			createPreviousItem(toolBar);
 		}
-		createIndexing(toolBar);
+		createIndexItem(toolBar);
 		createSettingsMenu(toolBar);
 		if (getPreferences().getBoolean(PANEL_CLOSE)) {
 			createClose(toolBar);
@@ -324,16 +320,16 @@
 		return bPrev;
 	}
 
-	private void createIndexing(final ToolBar bar) {
-		bIndexing = new ToolItem(bar, SWT.CHECK);
+	private void createIndexItem(final ToolBar bar) {
+		bIndexing = new ToolItem(bar, SWT.PUSH);
 		bIndexing.setDisabledImage(GlancePlugin
 				.getImage(GlancePlugin.IMG_INDEXING_FINISHED));
 		bIndexing.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void selected(final SelectionEvent e) {
-				if (indexState == INDEXING_STATE_INITIAL) {
+				if (indexingState == IndexingState.INITIAL || indexingState == IndexingState.CANCELED) {
 					SearchManager.getIntance().index();
-				} else if (indexState != INDEXING_STATE_FINISHED) {
+				} else if (indexingState != IndexingState.FINISHED) {
 					fireIndexCanceled();
 				}
 			}
@@ -674,7 +670,7 @@
 	protected Combo title;
 	private boolean titleEnabled = true;
 
-	private final ListenerList listeners = new ListenerList();
+	private final ListenerList<ISearchPanelListener> listeners = new ListenerList<>();
 	private final ModifyListener modifyListener = new ModifyListener() {
 		@Override
 		public void modifyText(final ModifyEvent e) {
@@ -691,7 +687,7 @@
 	private SearchRule rule;
 	private Match[] result = Match.EMPTY;
 
-	private double indexState;
+	private IndexingState indexingState;
 	private double indexPercent;
 	private String taskName;