Class GraphPinScene<N,E,P>

All Implemented Interfaces:
Accessible, org.openide.util.Lookup.Provider
Direct Known Subclasses:
GraphPinScene.StringGraph, VMDGraphScene

public abstract class GraphPinScene<N,E,P> extends ObjectScene
This class holds and manages graph-oriented model.

In comparison with the GraphScene class, in this class the graph consists of nodes, edges and pins. Each pin is assigned to a node (the assigned cannot be change at any time. Each edge could be attach to a single source and target pin.

The class is abstract and manages only data model and mapping with widgets. The graphics (widgets) has to be supplied by a developer by overriding the attachNodeWidget, attachPinWidget, attachEdgeWidget, attachEdgeSourceAnchor and attachEdgeTargetAnchor abstract methods.

This class is using generics and allows you to specify type representation for nodes and edges in the graph model. Example:

 class MyGraph extends GraphScene<MyNode, MyEdge, MyPin> { ... }
 
Since the type of nodes, edges and pins could be the same, all node, edge and pin instances have to be unique within the whole scene.
  • Constructor Details

    • GraphPinScene

      public GraphPinScene()
      Creates a graph scene.
  • Method Details

    • addNode

      public final Widget addNode(N node)
      Adds a node.
      Parameters:
      node - the node to be added; the node must not be null, must not be already in the model, must be unique in the model (means: there is no other node, edge or pin in the model has is equal to this node) and must not be a Widget
      Returns:
      the widget that is created by attachNodeWidget; null if the node is non-visual
    • removeNode

      public final void removeNode(N node)
      Removes a node with all pins that are assigned to the node.
      Parameters:
      node - the node to be removed; the node must not be null and must be already in the model
    • removeNodeWithEdges

      public final void removeNodeWithEdges(N node)
      Removes a node with all pins that are assign to the node and with all edges that are connected to the pins.
      Parameters:
      node - the node to be removed; the node must not be null and must be already in the model
    • getNodes

      public final Collection<N> getNodes()
      Returns a collection of all nodes registered in the graph model.
      Returns:
      the collection of all nodes registered in the graph model
    • addEdge

      public final Widget addEdge(E edge)
      Adds an edge.
      Parameters:
      edge - the edge to be added; the edge must not be null, must not be already in the model, must be unique in the model (means: there is no other node, edge or pin in the model has is equal to this edge) and must not be a Widget
      Returns:
      the widget that is created by attachEdgeWidget; null if the edge is non-visual
    • removeEdge

      public final void removeEdge(E edge)
      Removes an edge and detaches it from its source and target pins.
      Parameters:
      edge - the edge to be removed; the edge must not be null and must be already in the model
    • getEdges

      public final Collection<E> getEdges()
      Returns a collection of all edges registered in the graph model.
      Returns:
      the collection of all edges registered in the graph model
    • addPin

      public final Widget addPin(N node, P pin)
      Adds a pin and assigns it to a specified node.
      Parameters:
      node - the node where the pin is assigned to
      pin - the pin to be added; the pin must not be null, must not be already in the model, must be unique in the model (means: there is no other node, edge or pin in the model has is equal to this pin) and must not be a Widget
      Returns:
      the widget that is created by attachPinWidget; null if the pin is non-visual
    • removePin

      public final void removePin(P pin)
      Removes an pin and detaches all edges that are connected to it.
      Parameters:
      pin - the pin to be removed; the pin must not be null and must be already in the model
    • removePinWithEdges

      public final void removePinWithEdges(P pin)
      Removes a pin with all edges that are connected to the pin.
      Parameters:
      pin - the pin to be removed; the pin must not be null and must be already in the model
    • getPinNode

      public final N getPinNode(P pin)
      Returns a node where the pin assigned to.
      Parameters:
      pin - the pin
      Returns:
      the node where the pin assigned to.
    • getPins

      public final Collection<P> getPins()
      Returns all pins registered in the graph model.
      Returns:
      the collection of all pins registered in the graph model
    • getNodePins

      public final Collection<P> getNodePins(N node)
      Returns a collection of pins that are assigned to a specified node
      Parameters:
      node - the node
      Returns:
      the collection of pins; null if node does not exist in the scene
    • setEdgeSource

      public final void setEdgeSource(E edge, P sourcePin)
      Sets an edge source.
      Parameters:
      edge - the edge which source is going to be changed
      sourcePin - the source pin; if null, then the edge source will be detached
    • setEdgeTarget

      public final void setEdgeTarget(E edge, P targetPin)
      Sets an edge target.
      Parameters:
      edge - the edge which target is going to be changed
      targetPin - the target pin; if null, then the edge target will be detached
    • getEdgeSource

      public final P getEdgeSource(E edge)
      Returns an edge source.
      Parameters:
      edge - the edge
      Returns:
      the edge source; null, if edge does not have source attached
    • getEdgeTarget

      public final P getEdgeTarget(E edge)
      Returns an edge target.
      Parameters:
      edge - the edge
      Returns:
      the edge target; null, if edge does not have target attached
    • findPinEdges

      public final Collection<E> findPinEdges(P pin, boolean allowOutputEdges, boolean allowInputEdges)
      Returns a collection of edges that are attached to a specified pin.
      Parameters:
      pin - the pin which edges connections are searched for
      allowOutputEdges - if true, the output edges are included in the collection; if false, the output edges are not included
      allowInputEdges - if true, the input edges are included in the collection; if false, the input edges are not included
      Returns:
      the collection of edges
    • findEdgesBetween

      public final Collection<E> findEdgesBetween(P sourcePin, P targetPin)
      Returns a collection of edges that are between a source and a target pin.
      Parameters:
      sourcePin - the source pin
      targetPin - the target pin
      Returns:
      the collection of edges
    • isNode

      public boolean isNode(Object object)
      Checks whether an object is registered as a node in the graph model.
      Parameters:
      object - the object; must not be a Widget
      Returns:
      true, if the object is registered as a node
    • isEdge

      public boolean isEdge(Object object)
      Checks whether an object is registered as an edge in the graph model.
      Parameters:
      object - the object; must not be a Widget
      Returns:
      true, if the object is registered as a edge
    • isPin

      public boolean isPin(Object object)
      Checks whether an object is registered as a pin in the graph model.
      Parameters:
      object - the object; must not be a Widget
      Returns:
      true, if the object is registered as a pin
    • notifyNodeAdded

      protected void notifyNodeAdded(N node, Widget widget)
      Called by the addNode method to notify that a node is added into the graph model.
      Parameters:
      node - the added node
      widget - the widget created by the attachNodeWidget method as a visual representation of the node
    • notifyEdgeAdded

      protected void notifyEdgeAdded(E edge, Widget widget)
      Called by the addEdge method to notify that an edge is added into the graph model.
      Parameters:
      edge - the added node
      widget - the widget created by the attachEdgeWidget method as a visual representation of the edge
    • notifyPinAdded

      protected void notifyPinAdded(N node, P pin, Widget widget)
      Called by the addPin method to notify that a pin is added into the graph model.
      Parameters:
      node - the node where the pin is assigned to
      pin - the added pin
      widget - the widget created by the attachPinWidget method as a visual representation of the pin
    • detachNodeWidget

      protected void detachNodeWidget(N node, Widget widget)
      Called by the removeNode method to notify that a node is removed from the graph model. The default implementation removes the node widget from its parent widget.
      Parameters:
      node - the removed node
      widget - the removed node widget; null if the node is non-visual
    • detachEdgeWidget

      protected void detachEdgeWidget(E edge, Widget widget)
      Called by the removeEdge method to notify that an edge is removed from the graph model. The default implementation removes the edge widget from its parent widget.
      Parameters:
      edge - the removed edge
      widget - the removed edge widget; null if the edge is non-visual
    • detachPinWidget

      protected void detachPinWidget(P pin, Widget widget)
      Called by the removePin method to notify that a pin is removed from the graph model. The default implementation removes the pin widget from its parent widget.
      Parameters:
      pin - the removed pin
      widget - the removed pin widget; null if the pin is non-visual
    • attachNodeWidget

      protected abstract Widget attachNodeWidget(N node)
      Called by the addNode method before the node is registered to acquire a widget that is going to represent the node in the scene. The method is responsible for creating the widget, adding it into the scene and returning it from the method.
      Parameters:
      node - the node that is going to be added
      Returns:
      the widget representing the node; null, if the node is non-visual
    • attachEdgeWidget

      protected abstract Widget attachEdgeWidget(E edge)
      Called by the addEdge method before the edge is registered to acquire a widget that is going to represent the edge in the scene. The method is responsible for creating the widget, adding it into the scene and returning it from the method.
      Parameters:
      edge - the edge that is going to be added
      Returns:
      the widget representing the edge; null, if the edge is non-visual
    • attachPinWidget

      protected abstract Widget attachPinWidget(N node, P pin)
      Called by the addPin method before the pin is registered to acquire a widget that is going to represent the pin in the scene. The method is responsible for creating the widget, adding it into the scene and returning it from the method.
      Parameters:
      node - the node where the pin is assigned to
      pin - the pin that is going to be added
      Returns:
      the widget representing the pin; null, if the pin is non-visual
    • attachEdgeSourceAnchor

      protected abstract void attachEdgeSourceAnchor(E edge, P oldSourcePin, P sourcePin)
      Called by the setEdgeSource method to notify about the changing the edge source in the graph model. The method is responsible for attaching a new source pin to the edge in the visual representation.

      Usually it is implemented as:

       Widget sourcePinWidget = findWidget (sourcePin);
       Anchor sourceAnchor = AnchorFactory.createRectangularAnchor (sourcePinWidget)
       ConnectionWidget edgeWidget = (ConnectionWidget) findWidget (edge);
       edgeWidget.setSourceAnchor (sourceAnchor);
       
      Parameters:
      edge - the edge which source is changed in graph model
      oldSourcePin - the old source pin
      sourcePin - the new source pin
    • attachEdgeTargetAnchor

      protected abstract void attachEdgeTargetAnchor(E edge, P oldTargetPin, P targetPin)
      Called by the setEdgeTarget method to notify about the changing the edge target in the graph model. The method is responsible for attaching a new target pin to the edge in the visual representation.

      Usually it is implemented as:

       Widget targetPinWidget = findWidget (targetPin);
       Anchor targetAnchor = AnchorFactory.createRectangularAnchor (targetPinWidget)
       ConnectionWidget edgeWidget = (ConnectionWidget) findWidget (edge);
       edgeWidget.setTargetAnchor (targetAnchor);
       
      Parameters:
      edge - the edge which target is changed in graph model
      oldTargetPin - the old target pin
      targetPin - the new target pin