ptolemy.vergil.actor
Class ActorGraphModel.LinkModel

java.lang.Object
  extended by ptolemy.vergil.actor.ActorGraphModel.LinkModel
All Implemented Interfaces:
EdgeModel, MutableEdgeModel
Enclosing class:
ActorGraphModel

public class ActorGraphModel.LinkModel
extends java.lang.Object
implements MutableEdgeModel

The model for links that connect two ports, or a port and a vertex.


Nested Class Summary
 class ActorGraphModel.LinkModel.LinkChangeListener
          This change listener is responsible for dispatching graph events when an edge is moved.
 
Constructor Summary
ActorGraphModel.LinkModel()
           
 
Method Summary
private  double[] _getNewLocation(NamedObj semanticHead, NamedObj semanticTail, boolean headIsActorPort, boolean tailIsActorPort)
          Get a location for a new relations between the ports denoted by semanticHead and semanticTail.
private  java.lang.String _linkMoML(NamedObj container, java.lang.StringBuffer moml, java.lang.StringBuffer failmoml, NamedObj linkHead, NamedObj linkTail)
          Append moml to the given buffer that connects a link with the given head and tail.
private  void _linkWithRelation(java.lang.StringBuffer moml, java.lang.StringBuffer failmoml, CompositeEntity container, NamedObj semanticObject, int relationIndex, java.lang.String relationName)
          Append moml to the given buffer that connects a relation with the given semanticObject.
private  void _setHeadOrTail(java.lang.Object edge, java.lang.Object newLinkHeadOrTail, boolean isHead)
          Connect the given edge to the given head or tail node.
private  boolean _unlinkMoML(NamedObj container, java.lang.StringBuffer moml, NamedObj linkHead, NamedObj linkTail, Relation relation)
          Append moml to the given buffer that disconnects a link with the given head, tail, and relation.
 boolean acceptHead(java.lang.Object edge, java.lang.Object node)
          Return true if the head of the given edge can be attached to the given node.
 boolean acceptTail(java.lang.Object edge, java.lang.Object node)
          Return true if the tail of the given edge can be attached to the given node.
 void addNewVertexToLink(java.lang.StringBuffer moml, java.lang.StringBuffer failmoml, CompositeEntity container, Link oldLink, java.lang.String newRelationName, double x, double y)
          Generate the moml to add a vertex to an exist link.
 java.lang.String getDeleteEdgeMoML(java.lang.Object edge)
          Return a MoML String that will delete the given edge from the Ptolemy model.
 java.lang.Object getHead(java.lang.Object edge)
          Return the head node of the given edge.
 java.lang.Object getTail(java.lang.Object edge)
          Return the tail node of the specified edge.
 boolean isDirected(java.lang.Object edge)
          Return true if this edge is directed.
 void setHead(java.lang.Object edge, java.lang.Object newLinkHead)
          Connect the given edge to the given head node.
 void setTail(java.lang.Object edge, java.lang.Object newLinkTail)
          Connect the given edge to the given tail node.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ActorGraphModel.LinkModel

public ActorGraphModel.LinkModel()
Method Detail

acceptHead

public boolean acceptHead(java.lang.Object edge,
                          java.lang.Object node)
Return true if the head of the given edge can be attached to the given node.

Specified by:
acceptHead in interface MutableEdgeModel
Parameters:
edge - The edge to attach, which is assumed to be a link.
node - The node to attach to.
Returns:
True if the node is a port or a vertex, or a location representing a port.

acceptTail

public boolean acceptTail(java.lang.Object edge,
                          java.lang.Object node)
Return true if the tail of the given edge can be attached to the given node.

Specified by:
acceptTail in interface MutableEdgeModel
Parameters:
edge - The edge to attach, which is assumed to be a link.
node - The node to attach to.
Returns:
True if the node is a port or a vertex, or a location representing a port.

addNewVertexToLink

public void addNewVertexToLink(java.lang.StringBuffer moml,
                               java.lang.StringBuffer failmoml,
                               CompositeEntity container,
                               Link oldLink,
                               java.lang.String newRelationName,
                               double x,
                               double y)
Generate the moml to add a vertex to an exist link.

Parameters:
moml - The moml to add the vertex to the link.
failmoml - The moml to undo these changed when something goes wrong.
container - The container.
oldLink - The link that will be replace by two new once and a vertex in between.
newRelationName - The name of the new relation.
x - The x coordinate of the location of the vertex.
y - The y coordinate of the location of the vertex.

getDeleteEdgeMoML

public java.lang.String getDeleteEdgeMoML(java.lang.Object edge)
Return a MoML String that will delete the given edge from the Ptolemy model.

Parameters:
edge - The edge.
Returns:
A valid MoML string.

getHead

public java.lang.Object getHead(java.lang.Object edge)
Return the head node of the given edge.

Specified by:
getHead in interface EdgeModel
Parameters:
edge - The edge, which is assumed to be a link.
Returns:
The node that is the head of the specified edge.
See Also:
setHead(Object, Object)

getTail

public java.lang.Object getTail(java.lang.Object edge)
Return the tail node of the specified edge.

Specified by:
getTail in interface EdgeModel
Parameters:
edge - The edge, which is assumed to be a link.
Returns:
The node that is the tail of the specified edge.
See Also:
setTail(Object, Object)

isDirected

public boolean isDirected(java.lang.Object edge)
Return true if this edge is directed. In this model, none of edges are directed, so this always returns false.

Specified by:
isDirected in interface EdgeModel
Parameters:
edge - The edge, which is assumed to be a link.
Returns:
False.

setHead

public void setHead(java.lang.Object edge,
                    java.lang.Object newLinkHead)
Connect the given edge to the given head node. This class queues a new change request with the ptolemy model to make this modification.

Specified by:
setHead in interface MutableEdgeModel
Parameters:
edge - The edge, which is assumed to be a link.
newLinkHead - The new head for the edge, which is assumed to be a location representing a port, a port or a vertex.
See Also:
getHead(Object)

setTail

public void setTail(java.lang.Object edge,
                    java.lang.Object newLinkTail)
Connect the given edge to the given tail node. This class queues a new change request with the ptolemy model to make this modification.

Specified by:
setTail in interface MutableEdgeModel
Parameters:
edge - The edge, which is assumed to be a link.
newLinkTail - The new tail for the edge, which is assumed to be a location representing a port, a port or a vertex.
See Also:
getTail(Object)

_getNewLocation

private double[] _getNewLocation(NamedObj semanticHead,
                                 NamedObj semanticTail,
                                 boolean headIsActorPort,
                                 boolean tailIsActorPort)
Get a location for a new relations between the ports denoted by semanticHead and semanticTail.

Parameters:
semanticHead - The head for the new relation.
semanticTail - The tail for the new relation.
headIsActorPort - A flag that specifies whether this is a actor port of a actor or a stand-alone port.
tailIsActorPort - A flag that specifies whether this is a actor port of a actor or a stand-alone port.
Returns:
The new location.

_linkMoML

private java.lang.String _linkMoML(NamedObj container,
                                   java.lang.StringBuffer moml,
                                   java.lang.StringBuffer failmoml,
                                   NamedObj linkHead,
                                   NamedObj linkTail)
                            throws java.lang.Exception
Append moml to the given buffer that connects a link with the given head and tail. Names in the moml that is written will be relative to the given container. This may require adding a vertex to the ptolemy model. If no vertex is added, then return null.

Parameters:
container - The container composite actor.
moml - The string buffer to write the MoML to.
failmoml - The string buffer to write alternative MoML to, to be used if the first MoML fails.
linkHead - The head vertex or port.
linkTail - The tail vertex or port.
Returns:
The MoML to establish a link, or null if no vertex is added.
Throws:
java.lang.Exception

_linkWithRelation

private void _linkWithRelation(java.lang.StringBuffer moml,
                               java.lang.StringBuffer failmoml,
                               CompositeEntity container,
                               NamedObj semanticObject,
                               int relationIndex,
                               java.lang.String relationName)
Append moml to the given buffer that connects a relation with the given semanticObject. If relationIndex equals -1 it will be ignored, otherwise the relation will be connected at index relationIndex at the semanticObject, in case it represents a port.

Parameters:
moml - The string buffer to write the MoML to.
failmoml - The string buffer to write alternative MoML to, to be used if the first MoML fails.
container - The container composite actor.
semanticObject - The semantic object (relation or port).
relationIndex - The index of the relation at the port.
relationName - The name of the relation.

_setHeadOrTail

private void _setHeadOrTail(java.lang.Object edge,
                            java.lang.Object newLinkHeadOrTail,
                            boolean isHead)
Connect the given edge to the given head or tail node. This class queues a new change request with the ptolemy model to make this modification.

Parameters:
edge - The edge, which is assumed to be a link.
newLinkHeadOrTail - The new head or tail for the edge, which is assumed to be a location representing a port, a port or a vertex.
isHead - True when newLinkHeadOrTail represents the head
See Also:
setHead(Object, Object), setTail(Object, Object)

_unlinkMoML

private boolean _unlinkMoML(NamedObj container,
                            java.lang.StringBuffer moml,
                            NamedObj linkHead,
                            NamedObj linkTail,
                            Relation relation)
Append moml to the given buffer that disconnects a link with the given head, tail, and relation. Names in the returned moml will be relative to the given container. If either linkHead or linkTail is null, then nothing will be appended to the moml buffer.

Returns:
True if any MoML is appended to the moml argument.