/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.ui.search;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.search.SearchPattern;
import org.eclipse.jdt.internal.core.search.JavaSearchScope;
import org.eclipse.jdt.ui.search.IMatchPresentation;
import org.eclipse.jdt.ui.search.IQueryParticipant;
import org.eclipse.jdt.ui.search.ISearchRequestor;
import org.eclipse.jdt.ui.search.PatternQuerySpecification;
import org.eclipse.jdt.ui.search.QuerySpecification;
/**
* Implements {@link IQueryParticipant} to build-in a Search for Seam references
* into a Java search
*
* @author Jeremy
*/
public class SeamQueryParticipant implements IQueryParticipant {
/**
* @see org.eclipse.jdt.ui.search.IQueryParticipant#estimateTicks(org.eclipse.jdt.ui.search.QuerySpecification)
*/
public int estimateTicks(QuerySpecification specification) {
return 1;
}
/**
* @see org.eclipse.jdt.ui.search.IQueryParticipant#getUIParticipant()
*/
public IMatchPresentation getUIParticipant() {
return new SeamMatchPresentation();
}
/**
* @see org.eclipse.jdt.ui.search.IQueryParticipant#search(org.eclipse.jdt.ui.search.ISearchRequestor, org.eclipse.jdt.ui.search.QuerySpecification, org.eclipse.core.runtime.IProgressMonitor)
*/
public void search(ISearchRequestor requestor, QuerySpecification querySpecification, IProgressMonitor monitor) throws CoreException {
//indexIfNeeded();
// >>> Fix for JBIDE-5093: If the querySpecification is an ElementQuerySpecification then we don't need to perform a search here
/*
// do search based on the particular Java query
if(querySpecification instanceof ElementQuerySpecification) {
// element search (eg. from global find references in Java file)
ElementQuerySpecification elementQuery = (ElementQuerySpecification)querySpecification;
IJavaSearchScope javaScope = querySpecification.getScope();
// Search only for references to java element
if (!SeamSearchEngine.isSearchForReferences(querySpecification.getLimitTo()))
return;
IJavaElement element = elementQuery.getElement();
IResource project = element.getResource().getProject();
SeamSearchScope scope = new SeamSearchScope(querySpecification.getScope(), querySpecification.getLimitTo());
SeamSearchQuery query = new SeamSearchQuery(
new IJavaElement[] {element},
(IFile)element.getResource(),
scope);
query.setParentRequestor(requestor);
query.run(monitor);
} else */
// Fix for JBIDE-5093 <<<
if(querySpecification instanceof PatternQuerySpecification) {
// pattern search (eg. from Java search page)
PatternQuerySpecification patternQuery = (PatternQuerySpecification)querySpecification;
String pattern = patternQuery.getPattern();
SeamJavaSearchRequestor seamRequestor = new SeamJavaSearchRequestor(requestor);
SeamSearchScope scope = new SeamSearchScope(new JavaSearchScope(), patternQuery.getLimitTo());
SeamSearchEngine.getInstance().search(pattern,
scope,
patternQuery.getSearchFor(),
patternQuery.getLimitTo(),
SearchPattern.R_PATTERN_MATCH,
false,
seamRequestor);
}
}
}