org.eclipse.papyrus.infra.widgets.strategy.WorkspaceRevealStrategy.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.papyrus.infra.widgets.strategy.WorkspaceRevealStrategy.java

Source

/*****************************************************************************
 * Copyright (c) 2012 CEA LIST.
 * 
 * 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:
 *  Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
 *****************************************************************************/
package org.eclipse.papyrus.infra.widgets.strategy;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;

/**
 * A Strategy to search for a Resource in the Workspace
 * 
 * @author Camille Letavernier
 * 
 */
public class WorkspaceRevealStrategy extends ProviderBasedBrowseStrategy {

    public WorkspaceRevealStrategy(ITreeContentProvider provider) {
        super(provider);
    }

    public WorkspaceRevealStrategy() {
        super();
    }

    @Override
    public void revealSemanticElement(List<?> elementsToReveal) {
        if (viewer instanceof TreeViewer) {
            TreeViewer treeViewer = (TreeViewer) viewer;
            TreePath[] paths = new TreePath[elementsToReveal.size()];
            int i = 0;

            List<?> roots = Arrays.asList(getElements());

            for (Object elementToReveal : elementsToReveal) {
                LinkedList<IResource> segments = new LinkedList<IResource>();

                if (elementToReveal instanceof IResource) {
                    IResource currentElement = (IResource) elementToReveal;

                    segments.add(currentElement);

                    currentElement = currentElement.getParent();
                    while (currentElement != null) {
                        segments.addFirst(currentElement);

                        if (roots.contains(currentElement)) {
                            break; //If the tree root is not the Workspace Root, stop now
                        }
                        currentElement = currentElement.getParent();
                    }
                }

                paths[i++] = new TreePath(segments.toArray());
            }

            TreeSelection selection = new TreeSelection(paths);
            treeViewer.setSelection(selection, true);
        } else {
            super.revealSemanticElement(elementsToReveal);
        }
    }
}