package org.codemap.search;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.search.ui.ISearchResultListener;
import org.eclipse.search.ui.SearchResultEvent;
import org.eclipse.search.ui.text.Match;
import org.eclipse.search.ui.text.MatchEvent;
import org.eclipse.search.ui.text.RemoveAllEvent;
/**
* Listen for changes to an {@link org.eclipse.search.ui.ISearchResult}.
* Filter the received events and forward the ones not filtered to
* {@link org.codemap.plugin.search.SearchResultController}.
*
* @author deif
*/
public class SearchResultListener implements ISearchResultListener {
private SearchResultController theController;
public SearchResultListener(SearchResultController controller) {
theController = controller;
}
@Override
public void searchResultChanged(SearchResultEvent e) {
if (e instanceof MatchEvent) {
handleMatchEvent((MatchEvent) e);
}
if (e instanceof RemoveAllEvent) {
handleRemoveAllEvent();
}
}
private void handleRemoveAllEvent() {
theController.onAllQueriesRemoved();
}
private void handleMatchEvent(MatchEvent me) {
switch (me.getKind()) {
case MatchEvent.ADDED:
theController.onElementsAdded(extractElements(me));
break;
case MatchEvent.REMOVED:
theController.onElementsRemoved(extractElements(me));
break;
}
}
private Collection<Object> extractElements(MatchEvent me) {
Collection<Object> elements = new ArrayList<Object>();
for(Match each: me.getMatches()) {
elements.add(each.getElement());
}
return elements;
}
}