/*******************************************************************************
* Copyright (c) 2001, 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 Jens Lukowski/Innoopract - initial renaming/restructuring
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.search;
import com.google.dart.tools.search.ui.ISearchQuery;
import com.google.dart.tools.search.ui.text.AbstractTextSearchResult;
import com.google.dart.tools.search.ui.text.IEditorMatchAdapter;
import com.google.dart.tools.search.ui.text.IFileMatchAdapter;
import com.google.dart.tools.search.ui.text.Match;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.wst.sse.ui.internal.editor.EditorPluginImageHelper;
import org.eclipse.wst.sse.ui.internal.editor.EditorPluginImages;
/**
* @author pavery
*/
public class OccurrencesSearchResult extends AbstractTextSearchResult implements
IEditorMatchAdapter, IFileMatchAdapter {
private ISearchQuery fQuery = null;
private final Match[] NO_MATCHES = new Match[0];
public OccurrencesSearchResult(ISearchQuery query) {
this.fQuery = query;
}
/**
* @see org.eclipse.search.ui.text.IEditorMatchAdapter#computeContainedMatches(org.eclipse.search.ui.text.AbstractTextSearchResult,
* org.eclipse.ui.IEditorPart)
*/
public Match[] computeContainedMatches(AbstractTextSearchResult result, IEditorPart editor) {
IEditorInput editorInput = editor.getEditorInput();
if (editorInput instanceof IFileEditorInput) {
IFileEditorInput fileEditorInput = (IFileEditorInput) editorInput;
return computeContainedMatches(result, fileEditorInput.getFile());
}
return this.NO_MATCHES;
}
/**
* @see org.eclipse.search.ui.text.IFileMatchAdapter#computeContainedMatches(org.eclipse.search.ui.text.AbstractTextSearchResult,
* org.eclipse.core.resources.IFile)
*/
public Match[] computeContainedMatches(AbstractTextSearchResult result, IFile file) {
Match[] matches = this.getMatches();
Match[] containedMatches = new Match[0];
/*
* only contains matches if the file for one of the matches is the same as the given file. Note:
* all matches in a result are related to the same file
*/
if (matches.length > 0 && matches[0].getElement() instanceof BasicSearchMatchElement
&& ((BasicSearchMatchElement) matches[0].getElement()).getFile().equals(file)) {
containedMatches = matches;
}
return containedMatches;
}
/**
* @see org.eclipse.search.ui.text.AbstractTextSearchResult#getEditorMatchAdapter()
*/
public IEditorMatchAdapter getEditorMatchAdapter() {
return this;
}
/**
* @see org.eclipse.search.ui.text.IFileMatchAdapter#getFile(java.lang.Object)
*/
public IFile getFile(Object element) {
// return the file for the match
IFile file = null;
//System.out.println("get file for:"+element);
if (element instanceof IMarker) {
IResource r = ((IMarker) element).getResource();
if (r instanceof IFile) {
file = (IFile) r;
}
}
return file;
}
public IFileMatchAdapter getFileMatchAdapter() {
return this;
}
public ImageDescriptor getImageDescriptor() {
return EditorPluginImageHelper.getInstance().getImageDescriptor(
EditorPluginImages.IMG_OBJ_OCC_MATCH);
}
/**
* This label shows up in the search history
*/
public String getLabel() {
return getQuery().getLabel();
}
/**
* @return the matches associated with this result
*/
public Match[] getMatches() {
return collectMatches(getElements());
}
public ISearchQuery getQuery() {
return this.fQuery;
}
public String getTooltip() {
return getLabel();
}
/**
* @see org.eclipse.search.ui.text.IEditorMatchAdapter#isShownInEditor(org.eclipse.search.ui.text.Match,
* org.eclipse.ui.IEditorPart)
*/
public boolean isShownInEditor(Match match, IEditorPart editor) {
return true;
}
/**
* <p>
* Taken from {@link org.eclipse.jdt.internal.ui.search.OccurrencesSearchResult#collectMatches}
* </p>
*
* @param elements get the matches for these elements
* @return the matches associated with this result
*/
private Match[] collectMatches(Object[] elements) {
Match[] matches = new Match[getMatchCount()];
int writeIndex = 0;
for (int i = 0; i < elements.length; i++) {
Match[] perElement = getMatches(elements[i]);
for (int j = 0; j < perElement.length; j++) {
matches[writeIndex++] = perElement[j];
}
}
return matches;
}
}