| /* |
| * Copyright (c) 2011 Google Inc. |
| * |
| * 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 |
| */ |
| package com.google.eclipse.protobuf.ui.outline; |
| |
| import static java.util.Collections.singletonList; |
| |
| import static com.google.common.collect.Collections2.filter; |
| import static com.google.common.collect.Lists.newArrayList; |
| |
| import java.util.Collection; |
| import java.util.List; |
| |
| import org.eclipse.xtext.ui.editor.outline.IOutlineNode; |
| import org.eclipse.xtext.ui.editor.outline.impl.DocumentRootNode; |
| import org.eclipse.xtext.ui.editor.outline.impl.OutlinePage; |
| |
| import com.google.common.base.Predicate; |
| |
| /** |
| * Outline Page for Protocol Buffer editors. |
| * |
| * @author alruiz@google.com (Alex Ruiz) |
| */ |
| public class ProtobufOutlinePage extends OutlinePage { |
| @Override protected List<IOutlineNode> getInitiallyExpandedNodes() { |
| IOutlineNode rootNode = getTreeProvider().createRoot(getXtextDocument()); |
| List<IOutlineNode> nodes = newArrayList(rootNode); |
| addChildrenToExpand(singletonList(rootNode), nodes, 0); |
| return nodes; |
| } |
| |
| private void addChildrenToExpand(Collection<IOutlineNode> parents, List<IOutlineNode> nodes, int depth) { |
| if (depth < 1) { |
| return; |
| } |
| for (IOutlineNode parent : parents) { |
| Collection<IOutlineNode> children = childrenToExpand(parent); |
| nodes.addAll(children); |
| addChildrenToExpand(children, nodes, depth - 1); |
| } |
| } |
| |
| private Collection<IOutlineNode> childrenToExpand(IOutlineNode parent) { |
| if (parent instanceof DocumentRootNode) { |
| return filter(parent.getChildren(), new Predicate<IOutlineNode>() { |
| @Override public boolean apply(IOutlineNode node) { |
| return !(node instanceof SimpleOutlineNode); |
| } |
| }); |
| } |
| return parent.getChildren(); |
| } |
| } |