/* * Copyright (c) 2005, David Benson * * All rights reserved. * * This file is licensed under the JGraph software license, a copy of which * will have been provided to you in the file LICENSE at the root of your * installation directory. If you are unable to locate this file please * contact JGraph sales for another copy. */ package com.mxgraph.layout.hierarchical.model; import java.util.ArrayList; import java.util.List; /** * An abstraction of a hierarchical edge for the hierarchy layout */ public class mxGraphHierarchyEdge extends mxGraphAbstractHierarchyCell { /** * The graph edge(s) this object represents. Parallel edges are all grouped * together within one hierarchy edge. */ public List<Object> edges; /** * The node this edge is sourced at */ public mxGraphHierarchyNode source; /** * The node this edge targets */ public mxGraphHierarchyNode target; /** * Whether or not the direction of this edge has been reversed * internally to create a DAG for the hierarchical layout */ protected boolean isReversed = false; /** * Constructs a hierarchy edge * @param edges a list of real graph edges this abstraction represents */ public mxGraphHierarchyEdge(List<Object> edges) { this.edges = edges; } /** * Inverts the direction of this internal edge(s) */ public void invert() { mxGraphHierarchyNode temp = source; source = target; target = temp; isReversed = !isReversed; } /** * @return Returns the isReversed. */ public boolean isReversed() { return isReversed; } /** * @param isReversed The isReversed to set. */ public void setReversed(boolean isReversed) { this.isReversed = isReversed; } /** * Returns the cells this cell connects to on the next layer up * @param layer the layer this cell is on * @return the cells this cell connects to on the next layer up */ @SuppressWarnings("unchecked") public List<mxGraphAbstractHierarchyCell> getNextLayerConnectedCells(int layer) { if (nextLayerConnectedCells == null) { nextLayerConnectedCells = new ArrayList[temp.length]; for (int i = 0; i < nextLayerConnectedCells.length; i++) { nextLayerConnectedCells[i] = new ArrayList<mxGraphAbstractHierarchyCell>(2); if (i == nextLayerConnectedCells.length - 1) { nextLayerConnectedCells[i].add(source); } else { nextLayerConnectedCells[i].add(this); } } } return nextLayerConnectedCells[layer - minRank - 1]; } /** * Returns the cells this cell connects to on the next layer down * @param layer the layer this cell is on * @return the cells this cell connects to on the next layer down */ @SuppressWarnings("unchecked") public List<mxGraphAbstractHierarchyCell> getPreviousLayerConnectedCells(int layer) { if (previousLayerConnectedCells == null) { previousLayerConnectedCells = new ArrayList[temp.length]; for (int i = 0; i < previousLayerConnectedCells.length; i++) { previousLayerConnectedCells[i] = new ArrayList<mxGraphAbstractHierarchyCell>(2); if (i == 0) { previousLayerConnectedCells[i].add(target); } else { previousLayerConnectedCells[i].add(this); } } } return previousLayerConnectedCells[layer - minRank - 1]; } /** * * @return whether or not this cell is an edge */ public boolean isEdge() { return true; } /** * * @return whether or not this cell is a node */ public boolean isVertex() { return false; } /** * Gets the value of temp for the specified layer * * @param layer * the layer relating to a specific entry into temp * @return the value for that layer */ public int getGeneralPurposeVariable(int layer) { return temp[layer - minRank - 1]; } /** * Set the value of temp for the specified layer * * @param layer * the layer relating to a specific entry into temp * @param value * the value for that layer */ public void setGeneralPurposeVariable(int layer, int value) { temp[layer - minRank - 1] = value; } }