/*********************************************************************************************************************** * * Copyright (C) 2010 by the Stratosphere project (http://stratosphere.eu) * * 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 eu.stratosphere.nephele.visualization.swt; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public abstract class AbstractSWTVertex extends AbstractSWTComponent { private final List<AbstractSWTVertex> edges = new ArrayList<AbstractSWTVertex>(); private int longestPath = -1; protected AbstractSWTVertex(AbstractSWTComponent parent) { super(parent); } Iterator<AbstractSWTVertex> getEdges() { return this.edges.iterator(); } public void connectTo(AbstractSWTVertex vertex) { if (vertex == null) { return; } if (!this.edges.contains(vertex)) { this.edges.add(vertex); } } public int getLongestPathAmongChildren() { int longestPath = 0; Iterator<AbstractSWTComponent> it = getChildren(); while (it.hasNext()) { AbstractSWTComponent child = it.next(); if (child instanceof AbstractSWTVertex) { AbstractSWTVertex childVertex = (AbstractSWTVertex) child; longestPath = Math.max(longestPath, childVertex.getLongestPath(this)); } } return longestPath; } public int getLongestPath(AbstractSWTVertex parent) { if (this.longestPath == -1) { int longestPath = 0; for (AbstractSWTVertex targetVertex : edges) { if (targetVertex.getParent() == parent) { longestPath = Math.max(longestPath, targetVertex.getLongestPath(parent) + 1); } } this.longestPath = longestPath; } return this.longestPath; } public int getEdgeSourceX() { return getX() + (getWidth() / 2); } public int getEdgeSourceY() { return getY(); } public int getEdgeTargetX() { return getX() + (getWidth() / 2); } public int getEdgeTargetY() { return getY() + getHeight(); } }