blob: d83e0d392b60a22ca6dcdfc7663b7860818cac7f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are 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:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
/* -- ST-Origin --
* Source folder: org.eclipse.cdt.ui/src
* Class: org.eclipse.cdt.internal.ui.search.PDOMSearchQuery
* Version: 1.16
*/
package org.eclipse.ptp.internal.rdt.ui.search;
import java.util.List;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.ptp.internal.rdt.core.model.Scope;
import org.eclipse.ptp.internal.rdt.core.search.RemoteSearchMatch;
import org.eclipse.ptp.internal.rdt.core.search.RemoteSearchQuery;
import org.eclipse.ptp.internal.rdt.core.subsystems.ICIndexSubsystem;
import org.eclipse.search.ui.ISearchQuery;
import org.eclipse.search.ui.ISearchResult;
import org.eclipse.search.ui.text.Match;
/**
* Adapts RemoteSearchQuery instances so that they may be used with Eclipse's
* search framework.
*/
public class RemoteSearchQueryAdapter implements ISearchQuery {
protected ICIndexSubsystem fSubsystem;
protected RemoteSearchQuery fQuery;
protected RemoteSearchResult fResult;
protected Scope fScope;
public RemoteSearchQueryAdapter(ICIndexSubsystem subsystem, Scope scope, RemoteSearchQuery query) {
fSubsystem = subsystem;
fScope = scope;
fQuery = query;
fResult = new RemoteSearchResult(this);
}
public boolean canRerun() {
return fQuery.canRerun();
}
public boolean canRunInBackground() {
return fQuery.canRunInBackground();
}
public String getLabel() {
String type;
if ((fQuery.getFlags() & RemoteSearchQuery.FIND_REFERENCES) != 0)
type = CSearchMessages.PDOMSearchQuery_refs_label;
else if ((fQuery.getFlags() & RemoteSearchQuery.FIND_DECLARATIONS) != 0)
type = CSearchMessages.PDOMSearchQuery_decls_label;
else
type = CSearchMessages.PDOMSearchQuery_defs_label;
return type;
}
public ISearchResult getSearchResult() {
return fResult;
}
public IStatus run(IProgressMonitor monitor) throws OperationCanceledException {
fSubsystem.checkAllProjects(monitor);
RemoteSearchResult result= (RemoteSearchResult) getSearchResult();
result.removeAll();
// Send query to remote side for processing
List<RemoteSearchMatch> results = fSubsystem.runQuery(fScope, fQuery, monitor);
if (results.size() > 0) {
Match[] matches = new Match[results.size()];
int i = 0;
try {
for (RemoteSearchMatch match : results) {
matches[i] = new RemoteSearchMatchAdapter(match);
i++;
}
fResult.addMatches(matches);
} catch (CoreException e) {
CUIPlugin.log(e);
}
return new Status(IStatus.OK, "org.eclipse.ptp.rdt.ui", ""); //$NON-NLS-1$ //$NON-NLS-2$
}
else {
// no matches found
return new Status(IStatus.OK, "org.eclipse.ptp.rdt.ui", ""); //$NON-NLS-1$ //$NON-NLS-2$
}
}
public RemoteSearchQuery getQuery() {
return fQuery;
}
public ICProject[] getProjects() {
return new ICProject[0];
}
}