/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.alibaba.jstorm.ui.model.graph; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.util.List; import java.util.Set; /** * @author Jark (wuchong.wc@alibaba-inc.com) */ public class TreeNode { private String componentId; private int layer = -1; private List<TreeNode> parents = Lists.newArrayList(); private List<TreeNode> children = Lists.newArrayList(); private Set<String> sources = Sets.newHashSet(); private Set<TreeNode> loopNodes = Sets.newHashSet(); private int breadth = -1; public TreeNode(String componentId) { this.componentId = componentId; } public Set<TreeNode> getLoopNodes() { return loopNodes; } public void setLoopNodes(Set<TreeNode> loopNodes) { this.loopNodes = loopNodes; } public boolean addLoopNode(TreeNode node){ if (loopNodes.contains(node) || node.getLoopNodes().contains(this)){ return false; }else{ loopNodes.add(node); node.getLoopNodes().add(this); return true; } } public boolean inCircle(TreeNode node){ return sources.contains(node.componentId) && node.getSources().contains(componentId); } public void addSource(String src){ sources.add(src); } public boolean addSources(Set<String> srcs){ int beforeSize = sources.size(); sources.addAll(srcs); int afterSize = sources.size(); return beforeSize == afterSize; } public Set<String> getSources() { return sources; } public boolean hasChildren(){ return children.size() > 0; } public void addParent(TreeNode node){ parents.add(node); } public void addChild(TreeNode node){ children.add(node); } public String getComponentId() { return componentId; } public void setComponentId(String componentId) { this.componentId = componentId; } public List<TreeNode> getParents() { return parents; } public void setParents(List<TreeNode> parents) { this.parents = parents; } public List<TreeNode> getChildren() { return children; } public void setChildren(List<TreeNode> children) { this.children = children; } public int getLayer() { return layer; } public void setLayer(int layer) { this.layer = layer; } public boolean isVisited(){ return layer != -1; } public int getBreadth() { return breadth; } public void setBreadth(int breadth) { this.breadth = breadth; } }