/** * <p>Copyright: Copyright (c) 2009</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.ui.search; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.util.OpenStrategy; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.search.ui.ISearchResultPage; import org.eclipse.search.ui.text.AbstractTextSearchResult; import org.eclipse.search.ui.text.AbstractTextSearchViewPage; import org.eclipse.search.ui.text.Match; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import com.hundsun.ares.studio.core.ARESCore; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESElement; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.internal.core.ArchiveARESResource; import com.hundsun.ares.studio.ui.ARESElementSorter; import com.hundsun.ares.studio.ui.ARESResourceEditorInput; import com.hundsun.ares.studio.ui.CommonElementContentProvider; import com.hundsun.ares.studio.ui.CommonElementLabelProvider; /** * * @author liaogc */ public class ARESSearchResultPage extends AbstractTextSearchViewPage implements ISearchResultPage { /** * ʹ�����ṹ��ʾ��� */ public ARESSearchResultPage() { super(FLAG_LAYOUT_TREE); } @Override protected void clear() { // TODO �ƺ���ʵ��Ҳû��ϵ } @Override protected void configureTableViewer(TableViewer viewer) { // TODO Ŀǰ��ʹ�ñ�� } @Override protected void configureTreeViewer(TreeViewer viewer) { // �������ṹ CommonElementContentProvider cp = new CommonElementContentProvider(); viewer.setContentProvider(new TreeContentProvider()); viewer.setLabelProvider(new CommonElementLabelProvider(cp));//(new ACElementLabelProvider() ); viewer.setComparator(new ARESElementSorter()); } @Override protected void elementsChanged(Object[] objects) { getViewer().refresh(); } /** * ������������ṩ�� */ private class TreeContentProvider implements ITreeContentProvider { @Override public Object[] getChildren(Object parentElement) { Match[] matchs = getInput().getMatches(parentElement); if (matchs.length > 0) { return ((ARESSearchElementMatch)(matchs[0])).getChildren().toArray(); } return new Object[0]; } @Override public Object getParent(Object element) { return ((IARESElement)element).getParent(); } @Override public boolean hasChildren(Object element) { Match[] matchs = getInput().getMatches(element); return matchs.length > 0 && !((ARESSearchElementMatch)(matchs[0])).getChildren().isEmpty(); } @Override public Object[] getElements(Object inputElement) { // �Թ���Ϊһ���ڵ� List<IARESElement> ret = new ArrayList<IARESElement>(); try { for (IARESProject project : ARESCore.getModel().getARESProjects() ) { Match[] matchs = ((AbstractTextSearchResult)inputElement).getMatches(project); for (Match match : matchs) { ret.add( (IARESElement)match.getElement() ); } } } catch (ARESModelException e) { e.printStackTrace(); } return ret.toArray(); } @Override public void dispose() { // TODO Auto-generated method stub } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } } /* (non-Javadoc) * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#showMatch(org.eclipse.search.ui.text.Match, int, int, boolean) */ @Override protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate) throws PartInitException { // ��Դ�Ķ�λ Object e = match.getElement(); if (e instanceof IARESElement) { if (e instanceof IARESResource) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); if(e instanceof ArchiveARESResource){ ArchiveARESResource aresfile = (ArchiveARESResource)e; ARESResourceEditorInput input = new ARESResourceEditorInput(aresfile); boolean active = OpenStrategy.activateOnOpen(); try { IEditorDescriptor editor = IDE.getEditorDescriptor(aresfile.getElementName()); if (editor != null) { IDE.openEditor(page, input, editor.getId(), active); } } catch (PartInitException e1) { e1.printStackTrace(); } }else{ IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), (IFile) ((IARESResource)e).getResource()); } } else { IResource resource = ((IARESElement) e).getResource(); if (resource instanceof IFile) { IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), (IFile) resource); } } } } }