Example usage for org.eclipse.jface.viewers ITreePathContentProvider getParents

List of usage examples for org.eclipse.jface.viewers ITreePathContentProvider getParents

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers ITreePathContentProvider getParents.

Prototype

public TreePath[] getParents(Object element);

Source Link

Document

Return the possible parent paths for the given element.

Usage

From source file:org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.java

License:Open Source License

public TreePath[] getParents(Object element) {
    if (contentProvider instanceof ITreePathContentProvider) {
        ITreePathContentProvider tpcp = (ITreePathContentProvider) contentProvider;
        return tpcp.getParents(element);
    }/*from ww w  .jav  a2 s . c o m*/
    ArrayList segments = new ArrayList();
    Object parent = element;
    do {
        parent = contentProvider.getParent(parent);
        if (parent != null && parent != viewer.getInput())
            segments.add(0, parent);
    } while (parent != null && parent != viewer.getInput());
    if (!segments.isEmpty()) {
        // Loop backwards over the array to create the path.         
        return new TreePath[] { new TreePath(segments.toArray()) };
    }
    return NO_PATHS;
}

From source file:org.eclipse.ui.internal.navigator.NavigatorSaveablesService.java

License:Open Source License

/** helper to compute the saveables for which elements are part of the tree.
 * Must be called from a synchronized method.
 * //  ww  w.  j  a  va2s.  com
 * @return the saveables
 */
private Saveable[] computeSaveables() {
    ITreeContentProvider contentProvider = (ITreeContentProvider) viewer.getContentProvider();
    boolean isTreepathContentProvider = contentProvider instanceof ITreePathContentProvider;
    Object viewerInput = viewer.getInput();
    List result = new ArrayList();
    Set roots = new HashSet(Arrays.asList(contentProvider.getElements(viewerInput)));
    SaveablesProvider[] saveablesProviders = getSaveablesProviders();
    for (int i = 0; i < saveablesProviders.length; i++) {
        SaveablesProvider saveablesProvider = saveablesProviders[i];
        Saveable[] saveables = saveablesProvider.getSaveables();
        for (int j = 0; j < saveables.length; j++) {
            Saveable saveable = saveables[j];
            Object[] elements = saveablesProvider.getElements(saveable);
            // the saveable is added to the result if at least one of the
            // elements representing the saveable appears in the tree, i.e.
            // if its parent chain leads to a root node.
            boolean foundRoot = false;
            for (int k = 0; !foundRoot && k < elements.length; k++) {
                Object element = elements[k];
                if (roots.contains(element)) {
                    result.add(saveable);
                    foundRoot = true;
                } else if (isTreepathContentProvider) {
                    ITreePathContentProvider treePathContentProvider = (ITreePathContentProvider) contentProvider;
                    TreePath[] parentPaths = treePathContentProvider.getParents(element);
                    for (int l = 0; !foundRoot && l < parentPaths.length; l++) {
                        TreePath parentPath = parentPaths[l];
                        for (int m = 0; !foundRoot && m < parentPath.getSegmentCount(); m++) {
                            if (roots.contains(parentPath.getSegment(m))) {
                                result.add(saveable);
                                foundRoot = true;
                            }
                        }
                    }
                } else {
                    while (!foundRoot && element != null) {
                        if (roots.contains(element)) {
                            // found a parent chain leading to a root. The
                            // saveable is part of the tree.
                            result.add(saveable);
                            foundRoot = true;
                        } else {
                            element = contentProvider.getParent(element);
                        }
                    }
                }
            }
        }
    }
    return (Saveable[]) result.toArray(new Saveable[result.size()]);
}

From source file:org.eclipse.ui.internal.navigator.NavigatorSaveablesService.java

License:Open Source License

/**
 * @param selection/* w  w w.  ja v  a  2 s. com*/
 * @param provider
 * @return the active saveables
 */
private Saveable[] getActiveSaveablesFromTreePathProvider(IStructuredSelection selection,
        ITreePathContentProvider provider) {
    Set result = new HashSet();
    for (Iterator it = selection.iterator(); it.hasNext();) {
        Object element = it.next();
        Saveable saveable = getSaveable(element);
        if (saveable != null) {
            result.add(saveable);
        } else {
            TreePath[] paths = provider.getParents(element);
            saveable = findSaveable(paths);
            if (saveable != null) {
                result.add(saveable);
            }
        }
    }
    return (Saveable[]) result.toArray(new Saveable[result.size()]);
}

From source file:rabbit.ui.internal.viewers.TreePathPatternFilter.java

License:Apache License

@Override
protected boolean isParentMatch(Viewer viewer, Object element) {
    ITreePathContentProvider provider = (ITreePathContentProvider) ((ContentViewer) viewer)
            .getContentProvider();// w w  w .j  av a2 s . com
    TreePath[] parents = provider.getParents(element);
    if (parents == null) {
        return false;
    }

    for (TreePath parent : parents) {
        Object[] children = provider.getChildren(parent);
        for (Object child : children) {
            if (child == element) {
                TreePath currentPath = parent.createChildPath(child);
                if (isMatch(viewer, currentPath)) {
                    return true;
                }
            }
        }
    }
    return false;
}

From source file:rabbit.ui.internal.viewers.TreePathPatternFilterTest.java

License:Apache License

@Test
public void shouldHideTheElementIfTheLabelOfTheElementDoesNotMatchTheFilterText() {
    TreePath path = new TreePath(new Object[] { "parent", "child" });

    ITreePathContentProvider contentProvider = mock(ITreePathContentProvider.class);
    given(contentProvider.getChildren(path.getParentPath())).willReturn(new Object[] { path.getLastSegment() });
    given(contentProvider.getChildren(path)).willReturn(new Object[0]);
    given(contentProvider.getParents(path.getLastSegment()))
            .willReturn(new TreePath[] { path.getParentPath() });

    TreeViewer v = mock(TreeViewer.class);
    given(v.getContentProvider()).willReturn(contentProvider);

    filter.setPattern("not a match");
    assertThat(filter.isElementVisible(v, path.getLastSegment()), is(FALSE));
}

From source file:rabbit.ui.internal.viewers.TreePathPatternFilterTest.java

License:Apache License

@Test
public void shouldShowTheElementIfTheLabelOfTheElementMatchesTheFilterText() {
    TreePath path = new TreePath(new Object[] { "parent", "child" });

    ITreePathContentProvider contentProvider = mock(ITreePathContentProvider.class);
    given(contentProvider.getChildren(path.getParentPath())).willReturn(new Object[] { path.getLastSegment() });
    given(contentProvider.getParents(path.getLastSegment()))
            .willReturn(new TreePath[] { path.getParentPath() });

    TreeViewer v = mock(TreeViewer.class);
    given(v.getContentProvider()).willReturn(contentProvider);

    filter.setPattern("child");
    assertThat(filter.isElementVisible(v, path.getLastSegment()), is(TRUE));
}