Search in sources :

Example 1 with HitContainer

use of org.opensolaris.opengrok.egrok.model.HitContainer in project OpenGrok by OpenGrok.

the class ResultsControl method open.

private IEditorPart open(Hit hit) {
    HitContainer container = hit.getContainer();
    IFile correspondingFile = container.getCorrespondingFile();
    if (correspondingFile != null) {
        IEditorPart editor = openInEditor(correspondingFile, findEditor(hit.getContainer()));
        if (editor instanceof ITextEditor) {
            ITextEditor textEditor = (ITextEditor) editor;
            IDocument document = textEditor.getDocumentProvider().getDocument(editor.getEditorInput());
            if (document != null) {
                IRegion lineInfo = null;
                try {
                    lineInfo = document.getLineInformation(hit.getLineno() - 1);
                } catch (BadLocationException e) {
                    e.printStackTrace();
                }
                if (lineInfo != null) {
                    textEditor.selectAndReveal(lineInfo.getOffset(), lineInfo.getLength());
                }
            }
        }
    } else {
        openInBrowser(hit.getDirectory() + "/" + hit.getFilename(), hit.getLineno());
    }
    return null;
}
Also used : HitContainer(org.opensolaris.opengrok.egrok.model.HitContainer) IFile(org.eclipse.core.resources.IFile) ITextEditor(org.eclipse.ui.texteditor.ITextEditor) IEditorPart(org.eclipse.ui.IEditorPart) IDocument(org.eclipse.jface.text.IDocument) IRegion(org.eclipse.jface.text.IRegion) BadLocationException(org.eclipse.jface.text.BadLocationException)

Example 2 with HitContainer

use of org.opensolaris.opengrok.egrok.model.HitContainer in project OpenGrok by OpenGrok.

the class ResultsDialog method setResults.

public void setResults(List<Hit> results) {
    final Map<String, HitContainer> roots = new HashMap<String, HitContainer>();
    for (Hit hit : results) {
        String key = hit.getDirectory() + "/" + hit.getFilename();
        HitContainer container = roots.get(key);
        if (container == null) {
            container = new HitContainer(key);
            roots.put(key, container);
        }
        container.add(hit);
    }
    viewer.setHits(roots);
    if (resultsView != null) {
        resultsView.setHits(roots);
    }
    Display.getDefault().asyncExec(new Runnable() {

        @Override
        public void run() {
            if (!viewer.getControl().isDisposed()) {
                viewer.refresh();
            }
        }
    });
    if (Activator.getDefault().getPreferenceStore().getBoolean(EGrokPreferencePage.WORKSPACE_MATCHES)) {
        Runnable workspaceLocator = new Runnable() {

            @Override
            public void run() {
                IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
                final Map<HitContainer, HashMap<IProject, Integer>> potentialProjects = new HashMap<HitContainer, HashMap<IProject, Integer>>();
                final Map<IProject, ArrayList<String>> locationSegments = new HashMap<IProject, ArrayList<String>>();
                try {
                    workspaceRoot.accept(new IResourceVisitor() {

                        @Override
                        public boolean visit(IResource resource) throws CoreException {
                            if (resource instanceof IWorkspaceRoot) {
                                return true;
                            }
                            if (resource instanceof IProject) {
                                IProject project = (IProject) resource;
                                IPath location = project.getLocation();
                                for (String segment : location.segments()) {
                                    ArrayList<String> segments = locationSegments.get(project);
                                    if (segments == null) {
                                        segments = new ArrayList<String>();
                                        locationSegments.put(project, segments);
                                    }
                                    segments.add(segment);
                                }
                            }
                            return false;
                        }
                    });
                } catch (CoreException e) {
                    e.printStackTrace();
                }
                Map<HitContainer, ArrayList<String>> hitcontainerSegments = new HashMap<HitContainer, ArrayList<String>>();
                for (HitContainer hitcontainer : roots.values()) {
                    ArrayList<String> segments = new ArrayList<String>();
                    for (String segment : hitcontainer.getName().split("/")) {
                        segments.add(segment);
                    }
                    hitcontainerSegments.put(hitcontainer, segments);
                }
                for (IProject project : locationSegments.keySet()) {
                    ArrayList<String> segments = locationSegments.get(project);
                    int idx = 0;
                    for (String segment : segments) {
                        for (HitContainer container : hitcontainerSegments.keySet()) {
                            for (String containerPathSegment : hitcontainerSegments.get(container)) {
                                if (segment.equals(containerPathSegment)) {
                                    HashMap<IProject, Integer> matches = potentialProjects.get(container);
                                    if (matches == null) {
                                        matches = new HashMap<IProject, Integer>();
                                        potentialProjects.put(container, matches);
                                    }
                                    matches.put(project, idx);
                                }
                            }
                        }
                        idx++;
                    }
                }
                for (HitContainer container : potentialProjects.keySet()) {
                    String fullLocation = container.getName();
                    HashMap<IProject, Integer> matches = potentialProjects.get(container);
                    System.out.println(container.getName());
                    for (Entry<IProject, Integer> match : matches.entrySet()) {
                        IProject project = match.getKey();
                        Integer matchingLocation = match.getValue();
                        String matchingString = project.getLocation().segment(matchingLocation);
                        System.out.println("match: " + matchingString);
                        String local = fullLocation.substring(fullLocation.indexOf(matchingString) + matchingString.length());
                        System.out.println("local: " + local);
                        IResource member = project.findMember(local);
                        System.out.println("member: " + member);
                        if (member instanceof IFile) {
                            IFile file = (IFile) member;
                            container.setCorrespondingFile(file);
                        }
                    }
                }
                Display.getDefault().asyncExec(new Runnable() {

                    @Override
                    public void run() {
                        if (!viewer.getControl().isDisposed()) {
                            viewer.refresh();
                        }
                        if (resultsView != null) {
                            resultsView.refresh();
                        }
                    }
                });
            }
        };
        workspaceLocator.run();
    }
}
Also used : IResourceVisitor(org.eclipse.core.resources.IResourceVisitor) IFile(org.eclipse.core.resources.IFile) IPath(org.eclipse.core.runtime.IPath) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IProject(org.eclipse.core.resources.IProject) Point(org.eclipse.swt.graphics.Point) HitContainer(org.opensolaris.opengrok.egrok.model.HitContainer) Hit(org.opensolaris.opengrok.egrok.model.Hit) IWorkspaceRoot(org.eclipse.core.resources.IWorkspaceRoot) CoreException(org.eclipse.core.runtime.CoreException) IResource(org.eclipse.core.resources.IResource)

Aggregations

IFile (org.eclipse.core.resources.IFile)2 HitContainer (org.opensolaris.opengrok.egrok.model.HitContainer)2 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 IProject (org.eclipse.core.resources.IProject)1 IResource (org.eclipse.core.resources.IResource)1 IResourceVisitor (org.eclipse.core.resources.IResourceVisitor)1 IWorkspaceRoot (org.eclipse.core.resources.IWorkspaceRoot)1 CoreException (org.eclipse.core.runtime.CoreException)1 IPath (org.eclipse.core.runtime.IPath)1 BadLocationException (org.eclipse.jface.text.BadLocationException)1 IDocument (org.eclipse.jface.text.IDocument)1 IRegion (org.eclipse.jface.text.IRegion)1 Point (org.eclipse.swt.graphics.Point)1 IEditorPart (org.eclipse.ui.IEditorPart)1 ITextEditor (org.eclipse.ui.texteditor.ITextEditor)1 Hit (org.opensolaris.opengrok.egrok.model.Hit)1