// Copyright 2012 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.collide.client.workspace.outline; import com.google.collide.client.documentparser.AsyncParser; import com.google.collide.client.ui.tree.TreeNodeElement; import com.google.collide.json.shared.JsonArray; import com.google.collide.shared.document.anchor.Anchor; import com.google.collide.shared.document.anchor.AnchorType; import com.google.collide.shared.util.JsonCollections; import com.google.common.base.Preconditions; /** * Data class containing information about file structure node and some renderer-specific * information. * */ public class OutlineNode implements AsyncParser.LineAware { public static final AnchorType OUTLINE_NODE_ANCHOR_TYPE = AnchorType.create( OutlineNode.class, "outlineNode"); /** * Types of structure nodes. */ public enum OutlineNodeType { ROOT, CLASS, FUNCTION, FIELD, CSS_CLASS } private final OutlineNodeType type; private final JsonArray<OutlineNode> children; private final OutlineNode parent; private final int lineNumber; private final int column; private boolean enabled; private Anchor anchor; private String name; private TreeNodeElement<OutlineNode> renderedNode; public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @return The associated rendered {@link TreeNodeElement}. If there is no * tree node element rendered yet, then {@code null} is returned. */ public TreeNodeElement<OutlineNode> getRenderedTreeNode() { return renderedNode; } public OutlineNodeType getType() { return type; } public OutlineNode(String name, OutlineNodeType type, OutlineNode parent, int lineNumber, int column) { Preconditions.checkNotNull(type); this.parent = parent; this.lineNumber = lineNumber; this.column = column; this.name = name; this.type = type; this.children = JsonCollections.createArray(); } /** * Associates this FileTreeNode with the supplied {@link TreeNodeElement} as * the rendered node in the tree. This allows us to go from model -> rendered * tree element in order to reflect model mutations in the tree. */ public void setRenderedTreeNode(TreeNodeElement<OutlineNode> renderedNode) { this.renderedNode = renderedNode; } public JsonArray<OutlineNode> getChildren() { return children; } public OutlineNode getParent() { return parent; } @Override public int getLineNumber() { return lineNumber; } public int getColumn() { return column; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public Anchor getAnchor() { return anchor; } public void setAnchor(Anchor anchor) { this.anchor = anchor; } }