/*******************************************************************************
* Copyright (c) 2007 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.aop.ui.matcher;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.search.ui.text.Match;
import org.eclipse.ui.PartInitException;
import org.springframework.ide.eclipse.aop.core.model.IAopReference;
import org.springframework.ide.eclipse.aop.ui.matcher.internal.PointcutMatcherContentProvider;
import org.springframework.ide.eclipse.aop.ui.matcher.internal.PointcutMatcherLabelProvider;
import org.springframework.ide.eclipse.beans.ui.BeansUIUtils;
import org.springframework.ide.eclipse.core.model.IResourceModelElement;
import org.springframework.ide.eclipse.ui.SpringUIUtils;
/**
* Text search result page that is used to display pointcut matches
* @author Christian Dupuis
* @since 2.0.2
* @see PointcutMatcherSearchPage
*/
public class PointcutMatcherResultPage extends AbstractTextSearchViewPage {
private PointcutMatcherContentProvider provider;
public PointcutMatcherResultPage() {
super();
setID(PointcutMatcherResultPage.class.getName());
}
protected void clear() {
provider.clear();
}
protected void configureTableViewer(TableViewer viewer) {
viewer.setUseHashlookup(true);
viewer.setLabelProvider(new PointcutMatcherLabelProvider(this));
viewer.setContentProvider(getContentProvider());
}
protected void configureTreeViewer(TreeViewer viewer) {
viewer.setUseHashlookup(true);
viewer.setLabelProvider(new PointcutMatcherLabelProvider(this));
viewer.setContentProvider(getContentProvider());
}
protected void elementsChanged(Object[] objects) {
if (provider != null) {
provider.elementsChanged(objects);
}
}
private PointcutMatcherContentProvider getContentProvider() {
if (this.provider == null) {
this.provider = new PointcutMatcherContentProvider(this);
}
return this.provider;
}
protected void handleOpen(OpenEvent event) {
Viewer viewer= event.getViewer();
ISelection sel= event.getSelection();
if (viewer instanceof TreeViewer && sel instanceof IStructuredSelection) {
IStructuredSelection selection= (IStructuredSelection) sel;
Object element = selection.getFirstElement();
if (getDisplayedMatches(element).length != 0) {
super.handleOpen(event);
}
else {
showElement(true, element);
}
}
}
private void showElement(boolean activate, Object element) {
if (element instanceof IAopReference) {
SpringUIUtils.openInEditor(((IAopReference) element).getTarget());
}
else if (element instanceof IResourceModelElement) {
BeansUIUtils.openInEditor((IResourceModelElement) element, activate);
}
else if (element instanceof IFile) {
SpringUIUtils.openInEditor((IFile) element, 1, activate);
}
}
@Override
protected void showMatch(Match match, int currentOffset, int currentLength,
boolean activate) throws PartInitException {
Object element = match.getElement();
showElement(activate, element);
}
}