A simple implementation of a graph model.
acceptsSource
public boolean acceptsSource(Object edge,
Object port)
Returns true
if port
is a valid source for
edge
. edge and port must be objects
previously obtained from this data source.
- acceptsSource in interface GraphModel
true
if port
is a valid source for
edge
.
acceptsTarget
public boolean acceptsTarget(Object edge,
Object port)
Returns true
if port
is a valid target for
edge
. edge and port must be objects
previously obtained from this data source.
- acceptsTarget in interface GraphModel
true
if port
is a valid target for
edge
.
beginUpdate
public void beginUpdate()
Indicates the start of one level of an executable change
- beginUpdate in interface GraphModel
cellsChanged
public void cellsChanged(Object[] cells)
Invoke this method after you've changed how the cells are to be
represented in the graph.
cloneCell
protected Object cloneCell(Object cellObj)
Creates a shallow copy of the cell including a copy of the user object.
Subclassers can override the cloneUserObject to provide a custom user
object cloning mechanism.
cloneCell
public static Object cloneCell(GraphModel model,
Object cell)
Returns a deep clone of the specified cell, including all children.
cloneCell
public static Object[] cloneCell(GraphModel model,
Object[] cells)
Returns a deep clone of the specified cells, including all children.
cloneCells
public Map cloneCells(Object[] cells)
Returns a map of (cell, clone)-pairs for all cells
. In
the new array, all references are replaced with references to the cloned
cells (ie parent or anchor). This method does only include children which
are in cells
. Use JGraph.getDescendants to get a complete
list of all children.
- cloneCells in interface GraphModel
cloneUserObject
protected Object cloneUserObject(Object userObject)
Clones the user object. Helper method that is invoked from cloneCells.
You must use cloneCells (or cloneCell for single cells) to get a deep
copy of a clone. Subclassers must override this and valueForCellChanged
to implement custom user objects. This implementation returns
object
.
connect
protected void connect(Object edge,
Object port,
boolean isSource,
boolean insert)
Connects or disconnects the edge and port in this model based on
remove
. Subclassers should override this to update
connectivity datastructures.
contains
public boolean contains(Object node)
Returns true
if node
or one of its
ancestors is in the model.
- contains in interface GraphModel
true
if node
is in the model
containsEdgeBetween
public static boolean containsEdgeBetween(GraphModel model,
Object v1,
Object v2)
Returns true if the given vertices are conntected by a single edge in
this document.
edges
public Iterator edges(Object port)
Returns an iterator of the edges connected to port
.
port must be a object previously obtained from this data source.
This method never returns null.
- edges in interface GraphModel
port
- a port in the graph, obtained from this data source
Iterator
that represents the connected edges
edit
public void edit(Map attributes,
ConnectionSet cs,
ParentMap pm,
UndoableEdit[] edits)
Shortcut to the new edit method which allows inserts and removes to go
along with an edit.
- edit in interface GraphModel
edit
public void edit(Object[] inserted,
Object[] removed,
Map attributes,
ConnectionSet cs,
ParentMap pm,
UndoableEdit[] edits)
Applies attributes
and the connection changes to the
model. The initial edits
that triggered the call are
considered to be part of this transaction. The passed-in edits are
executed if they implement the
GraphModelEvent.ExecutableGraphChange
interface in
ascending array-order, after execution of the model change. Notifies the
model- and undo listeners of the change. Note: If only
edits
is non-null, the edits are directly passed to the
UndoableEditListeners. Note: The passed-in propertyMap may contains
PortViews which must be turned into Points when stored in the model.
endUpdate
public void endUpdate()
Indicates the end of the current level of an executable change
- endUpdate in interface GraphModel
execute
public void execute(ExecutableChange change)
Executes the specified executable change on this graph model
- execute in interface GraphModel
change
- the change to be executed
getAll
public static Object[] getAll(GraphModel model)
Returns all cells of the model in an array.
- Returns all cells in the model including all descandants.
getAttributes
public Map getAttributes()
Returns the graph model's attribute. Shortcut to
getAttributes(null)
.
- attributes of
node
as a Map
getAttributes
public AttributeMap getAttributes(Object node)
Returns a Map
that represents the attributes for the
specified cell. This attributes have precedence over each view's
attributes, regardless of isAttributeStore.
- getAttributes in interface GraphModel
- attributes of
node
as a Map
getChild
public Object getChild(Object parent,
int index)
Returns the child of parent at index index in the
parent's child array. parent must be a node previously obtained
from this data source. This should not return null if index is a
valid index for parent (that is index >= 0 && index
<32getChildCount( parent )).
- getChild in interface GraphModel
parent
- a node in the tree, obtained from this data source
- the child of parent at index index
getChildCount
public int getChildCount(Object parent)
Returns the number of children of parent . Returns 0 if the node
is a leaf or if it has no children. parent must be a node
previously obtained from this data source.
- getChildCount in interface GraphModel
parent
- a node in the tree, obtained from this data source
- the number of children of the node parent
getConnectionSet
public ConnectionSet getConnectionSet()
A shortcut method to create a connection set that represents the
connections in this model. Useful for encoding to avoid writing redundant
connection data stored in the cells.
getDescendants
public static List getDescendants(GraphModel model,
Object[] cells)
Flattens the given array of root cells by adding the roots and their
descandants. The resulting set contains all cells, which means it
contains branches and leafs. Note: This is an iterative
implementation. No recursion used.
Note: This returns a linked list, for frequent read operations you should
turn this into an array, or at least an array list.
getEdges
public static Object[] getEdges(GraphModel model,
Object cell,
boolean incoming)
Returns the incoming or outgoing edges for cell. Cell should be a port or
a vertex.
getEdges
public static Set getEdges(GraphModel model,
Object[] cells)
Returns the set of all connected edges to cells
or their
descendants. The passed-in cells are never returned as part of the result
set. This can be used on vertices, edges and ports.
getEdgesBetween
public static Object[] getEdgesBetween(GraphModel model,
Object cell1,
Object cell2,
boolean directed)
Returns the edges between two specified ports or two specified vertices.
If directed is true then cell1
must be the source of the
returned edges. This method never returns null. If there are no edges
between the specified cells, then an array of length 0 is returned.
getGraphModelListeners
public GraphModelListener[] getGraphModelListeners()
Return an array of all GraphModelListeners that were added to this model.
getIncomingEdges
public static Object[] getIncomingEdges(GraphModel model,
Object cell)
Returns the incoming edges for cell. Cell should be a port or a vertex.
getIndexOfChild
public int getIndexOfChild(Object parent,
Object child)
Returns the index of child in parent. If either the parent or child is
null
, returns -1.
- getIndexOfChild in interface GraphModel
parent
- a note in the tree, obtained from this data sourcechild
- the node we are interested in
- the index of the child in the parent, or -1 if either the parent
or the child is
null
getIndexOfRoot
public int getIndexOfRoot(Object root)
Returns the index of root
in the model. If root is
null
, returns -1.
- getIndexOfRoot in interface GraphModel
root
- a root in the model, obtained from this data source
- the index of the root in the model, or -1 if the parent is
null
getOpposite
public static Object getOpposite(GraphModel model,
Object edge,
Object cell)
- Returns the opposite port or vertex in
edge
.
getOutgoingEdges
public static Object[] getOutgoingEdges(GraphModel model,
Object cell)
Returns the outgoing edges for cell. Cell should be a port or a vertex.
getParent
public Object getParent(Object child)
Returns the parent of child in the model. child must be a
node previously obtained from this data source. This returns null if
child is a root in the model.
- getParent in interface GraphModel
child
- a node in the graph, obtained from this data source
getRootAt
public Object getRootAt(int index)
Returns the root at index index in the model. This should not
return null if index is a valid index for the model (that is
index >= 0 && index <32getRootCount()).
- getRootAt in interface GraphModel
- the root of at index index
getRootCount
public int getRootCount()
Returns the number of roots in the model. Returns 0 if the model is
empty.
- getRootCount in interface GraphModel
- the number of roots in the model
getRoots
public List getRoots()
getRoots
public static Object[] getRoots(GraphModel model)
Returns the roots of the specified model as an array. This implementation
uses the GraphModel interface in the general case, but if the model is a
DefaultGraphModel
the performance can be improved to
linear time.
getRoots
public static Object[] getRoots(GraphModel model,
Object[] cells)
Returns the roots in cells
by checking if their parent is
null
. This implementation only uses the GraphModel
interface. This method never returns null.
getRootsAsCollection
public static Collection getRootsAsCollection(GraphModel model)
Returns the roots of the specified model as a collection. This implementation
uses the GraphModel interface in the general case, but if the model is a
DefaultGraphModel
the performance can be improved to
linear time.
getSource
public Object getSource(Object edge)
Returns the source of edge
. edge must be an
object previously obtained from this data source.
- getSource in interface GraphModel
Object
that represents the source of edge
getSourceVertex
public static Object getSourceVertex(GraphModel model,
Object edge)
Returns the source vertex of the edge by calling getParent on getSource
on the specified model.
getTarget
public Object getTarget(Object edge)
Returns the target of edge
. edge must be an
object previously obtained from this data source.
- getTarget in interface GraphModel
Object
that represents the target of edge
getTargetVertex
public static Object getTargetVertex(GraphModel model,
Object edge)
Returns the target vertex of the edge by calling getParent on getTarget
on the specified model.
getTopmostCells
public static Object[] getTopmostCells(GraphModel model,
Object[] cells)
- Returns the roots of cells, eg. an array that contains no cell
having an ancestor in cells.
getUpdateLevel
public int getUpdateLevel()
getUserObject
public static Object getUserObject(Object cell)
Use GraphModel.getValue(Object)
instead.
- Returns the user object of the given cell. This implementation
checks if the cell is a default mutable tree node and returns
it's user object.
getValue
public Object getValue(Object cell)
- getValue in interface GraphModel
- Returns the user object of the given cell. This implementation
checks if the cell is a default mutable tree node and returns
it's user object.
handleAttributes
protected Map handleAttributes(Map attributes)
Applies attributes
to the cells specified as keys. Returns
the attributes
to undo the change.
handleConnection
protected void handleConnection(ConnectionSet.Connection c,
boolean establish)
Inserts the specified connection into the model.
handleConnectionSet
protected ConnectionSet handleConnectionSet(ConnectionSet cs)
Applies connectionSet
to the model. Returns a connection
set that may be used to undo this change.
handleInsert
protected Object[] handleInsert(Object[] cells)
Inserts cells
into the model. Returns the cells that were
inserted (including descendants).
handleParentMap
protected ParentMap handleParentMap(ParentMap parentMap)
Applies cells
to the model. Returns a parent map that may
be used to undo this change.
handleRemove
protected Object[] handleRemove(Object[] cells)
Removes cells
from the model. Returns the cells that were
removed as roots.
hasAncestorIn
public static boolean hasAncestorIn(GraphModel model,
Set parents,
Object child)
Returns true if the specified child has an ancestor in parents.
insert
public void insert(Object[] roots,
Map attributes,
ConnectionSet cs,
ParentMap pm,
UndoableEdit[] edits)
Inserts the roots
and connections into the model. Notifies
the model- and undo listeners of the change. The passed-in edits are
executed if they implement the
GraphModelEvent.ExecutableGraphChange
interface in
ascending array-order, after execution of the model change. Note: The
passed-in propertyMap may contain PortView
s which must be
turned into Point
s when stored in the model.
- insert in interface GraphModel
isEdge
public boolean isEdge(Object edge)
Returns true
if edge
is a valid edge.
- isEdge in interface GraphModel
true
if edge
is a valid edge.
isGroup
public static boolean isGroup(GraphModel model,
Object cell)
Checks whether the cell has at least one child which is not a port. This
implementation operates on the model, not taking into account visibility
of cells. It returns true for groups regardless of their folded state.
cell
- the cell to check for being a group
- Returns true if the cell contains at least one cell which is not
a port
isLeaf
public boolean isLeaf(Object node)
Returns whether the specified node is a leaf node. The way the test is
performed depends on the.
- isLeaf in interface GraphModel
- true if the node is a leaf node
isPort
public boolean isPort(Object port)
Returns true
if port
is a valid port,
possibly supporting edge connection.
- isPort in interface GraphModel
true
if port
is a valid port.
isRemoveEmptyGroups
public boolean isRemoveEmptyGroups()
isVertex
public static boolean isVertex(GraphModel model,
Object vertex)
Returns true
if vertex
is a valid vertex.
true
if vertex
is a valid vertex.
order
public static Object[] order(GraphModel model,
Object[] cells)
Orders cells so that they reflect the model order.
remove
public void remove(Object[] roots)
Removes cells
from the model. Notifies the model- and undo
listeners of the change.
- remove in interface GraphModel
setParent
protected void setParent(Object child,
Object parent)
Sets the parent of the specified cell.
setRemoveEmptyGroups
public void setRemoveEmptyGroups(boolean removeEmptyGroups)
removeEmptyGroups
- the removeEmptyGroups to set
setSourcePort
public static void setSourcePort(GraphModel model,
Object edge,
Object port)
Helper methods that connects the source of edge
to
port
in model.
setTargetPort
public static void setTargetPort(GraphModel model,
Object edge,
Object port)
Helper methods that connects the source of edge
to
port
in model.
toBack
public void toBack(Object[] cells)
Sends cells
to back.
- toBack in interface GraphModel
toFront
public void toFront(Object[] cells)
Brings cells
to front.
- toFront in interface GraphModel
valueForCellChanged
public Object valueForCellChanged(Object cell,
Object newValue)
Applies the new value to the specified cell. Unfortunately for cloning
the user object you must still override the attribute map and provide a
custom cloneUserObject method. This is because the cloning of a cell is
local to the cell, which in turn has a reference to its attribute map.
- valueForCellChanged in interface GraphModel
- the old value for the cell, if any