package sk.stuba.fiit.perconik.core.resources;
import org.eclipse.search.ui.ISearchQuery;
import org.eclipse.search.ui.NewSearchUI;
import sk.stuba.fiit.perconik.core.listeners.SearchQueryListener;
import sk.stuba.fiit.perconik.core.listeners.SearchResultListener;
final class SearchResultHook extends InternalHook<ISearchQuery, SearchResultListener> implements SearchQueryListener {
SearchResultHook(final SearchResultListener listener) {
super(new QueryHandler(listener));
}
static final class Support extends AbstractHookSupport<SearchResultHook, ISearchQuery, SearchResultListener> {
public Hook<ISearchQuery, SearchResultListener> create(final SearchResultListener listener) {
return new SearchResultHook(listener);
}
}
private static final class QueryHandler extends InternalHandler<ISearchQuery, SearchResultListener> {
QueryHandler(final SearchResultListener listener) {
super(ISearchQuery.class, listener);
}
public void register(final ISearchQuery query) {
query.getSearchResult().addListener(this.listener);
}
public void unregister(final ISearchQuery query) {
query.getSearchResult().removeListener(this.listener);
}
}
@Override
void preRegisterInternal() {
for (ISearchQuery query: NewSearchUI.getQueries()) {
this.add(query);
}
}
public void queryAdded(final ISearchQuery query) {
this.add(query);
}
public void queryRemoved(final ISearchQuery query) {
this.remove(query);
}
public void queryStarting(final ISearchQuery query) {}
public void queryFinished(final ISearchQuery query) {}
}