ist.palcom.routing.util
Class AbstractRoutingManager

java.lang.Object
  extended by ist.palcom.routing.util.AbstractRoutingManager
All Implemented Interfaces:
IHgraphNode, RoutingManager
Direct Known Subclasses:
DSDVRoutingManager, SimpleMulticastRoutingManager, SMURFRoutingManager

public abstract class AbstractRoutingManager
extends java.lang.Object
implements RoutingManager

This class is work in progress :-)


Field Summary
protected  HgraphNode _node
           
protected  MediaManager manager
           
protected  RoutingPubSubManager pubSubManager
           
protected  PalcomThread recieverThread
           
protected  LinearMap registeredThreads
           
protected  PalcomScheduler scheduler
           
 
Fields inherited from interface ist.palcom.hgraph.IHgraphNode
CHILD_NAME_CLASH, CIRCULARITY_CLASH, COMMAND_OR_NODE_MISSING, ERROR, HANDLER_MISSING, INVOKATOR_MISSING, LISTENER_MISSING, NODE_NOT_CHILD, PATH_MISSING, SIBLING_ALREADY_EXISTS, SIBLING_NONEXISTENT, SIBLING_REFERENCE_ALREADY_EXISTS, SIBLING_REFERENCE_NONEXISTENT, STATUS_OK, VALUE_ALREADY_EXISTS, VALUE_NOT_PRESENT
 
Constructor Summary
AbstractRoutingManager(PalcomScheduler scheduler, MediaManager manager, RoutingPubSubManager pubSubManager, URN deviceURN)
          Create a new Routing manager.
 
Method Summary
 void addErrorHandler(PalcomThread handler)
           
 int addNodeChild(IHgraphNode node, Path callerPath)
          Adds a child to the node's private list of children.
 java.util.Iterator getChildIterator()
           
 FuncFunc getFuncFunc()
           
 java.lang.String getLocalDeviceCache()
           
 java.lang.String getNodeName()
          hgraph impl below
 IHgraphNode getNodeParent()
           
 Path getPath()
           
 Selector getRoutingSelector()
           
 URN getRoutingURN()
           
 SiblingFunc getSiblingFunc()
           
 ValueFunc getValueFunc()
           
protected abstract  void handleRoutingMessage(AbstractRoutingMessage message)
          Method that should be implemented to handle the different routing messages that the specific implementation of a routing manager can handle.
 boolean hasChildNamed(java.lang.String name)
          Checks whether the node has a child with a given name
 boolean isAncestorOf(IHgraphNode node)
          Checks whether this node is an ancestor of the parameter node.
 void registerAsListener(PalcomThread communicationManager)
          Registers as a listener to messages received by this manager from the network.
 void registerForHeartBeats(PalcomThread resourceManager)
           
 int removeNodeChild(java.lang.String name, Path callerPath)
          Removes a child based on its name.
 boolean send(Message message, java.lang.String receiverDeviceID)
           
abstract  boolean send(Message message, URN senderURN, Selector senderSelector, URN receiverURN, Selector receiverSelector)
           
 void sendBroadcast(Message message)
           
 void sendGroupJoinMessage(java.lang.String groupID)
           
 void sendGroupLeaveMessage(java.lang.String groupID)
           
 void sendHeartAttack()
           
 void sendHeartBeat(boolean isHeartBeatAck)
           
 void setDiscoverySelector(Selector selector)
           
 void setLocalDeviceCache(java.lang.String localDeviceCache)
           
 void setLocalDeviceID(java.lang.String localDeviceID)
           
 void setLocalDiscoveryVersion(java.lang.String discoveryVersion)
           
 void setLocalStatusFlag(byte statusFlag)
           
 void setLocalStatusFlag(int statusFlag)
           
 int setNodeName(java.lang.String name, Path callerPath)
          Sets the name of the node.
 int setNodeParent(IHgraphNode newParent, Path callerPath)
          Sets the parent of the HgraphNode.
 URL startReceiving(PalcomThread receiver)
          Deprecated.  
protected abstract  void startRouting()
           
 void stop()
          Stop the manager.
 void stopReceiving(PalcomThread receiver)
          Stop receiving messages for a receiver.
 void stopReceiving(Selector selector)
          Stop receiving messages at a selector.
 java.lang.String toXML()
           
 java.lang.String toXMLFull()
           
 java.lang.String toXMLFullRecursively()
           
 java.lang.String toXMLRecursively()
           
 void unregisterDevice(java.lang.String deviceID)
          Remove the device with deviceID from the list of registered devices.
 void updatePath()
          Updates the path of the H-Graph node along with its offspring recursively.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_node

protected HgraphNode _node

manager

protected final MediaManager manager

pubSubManager

protected RoutingPubSubManager pubSubManager

scheduler

protected PalcomScheduler scheduler

recieverThread

protected PalcomThread recieverThread

registeredThreads

protected LinearMap registeredThreads
Constructor Detail

AbstractRoutingManager

public AbstractRoutingManager(PalcomScheduler scheduler,
                              MediaManager manager,
                              RoutingPubSubManager pubSubManager,
                              URN deviceURN)
Create a new Routing manager.

Parameters:
scheduler - - the palcom scheduler used in this service.
manager - - the mediamanager used in this service, this could be a compound media manager.
pubSubManager - - the RoutingPuSubManager
deviceURN - - information about the device e.g. the URN of the device
Method Detail

handleRoutingMessage

protected abstract void handleRoutingMessage(AbstractRoutingMessage message)
Method that should be implemented to handle the different routing messages that the specific implementation of a routing manager can handle.

Parameters:
message - - message send between the nodes in the network to update/establish routing.

startRouting

protected abstract void startRouting()

send

public abstract boolean send(Message message,
                             URN senderURN,
                             Selector senderSelector,
                             URN receiverURN,
                             Selector receiverSelector)
Specified by:
send in interface RoutingManager

startReceiving

public URL startReceiving(PalcomThread receiver)
Deprecated. 

Start receiving messages, at an URL selected by the manager. Messages will be sent to the receiver in MessageEvents.

Returns:
PalCom URL for sending messages here.

stopReceiving

public void stopReceiving(Selector selector)
Stop receiving messages at a selector.

Specified by:
stopReceiving in interface RoutingManager

stopReceiving

public void stopReceiving(PalcomThread receiver)
Stop receiving messages for a receiver.

Specified by:
stopReceiving in interface RoutingManager

stop

public void stop()
Stop the manager. This will stop all listening for messages.

Specified by:
stop in interface RoutingManager

getRoutingURN

public URN getRoutingURN()

getRoutingSelector

public Selector getRoutingSelector()

send

public boolean send(Message message,
                    java.lang.String receiverDeviceID)
Specified by:
send in interface RoutingManager

addErrorHandler

public void addErrorHandler(PalcomThread handler)
Specified by:
addErrorHandler in interface RoutingManager

setLocalDeviceCache

public void setLocalDeviceCache(java.lang.String localDeviceCache)
Specified by:
setLocalDeviceCache in interface RoutingManager

getLocalDeviceCache

public java.lang.String getLocalDeviceCache()
Specified by:
getLocalDeviceCache in interface RoutingManager

setLocalDeviceID

public void setLocalDeviceID(java.lang.String localDeviceID)
Specified by:
setLocalDeviceID in interface RoutingManager

setLocalStatusFlag

public void setLocalStatusFlag(byte statusFlag)
Specified by:
setLocalStatusFlag in interface RoutingManager

setLocalStatusFlag

public void setLocalStatusFlag(int statusFlag)

setLocalDiscoveryVersion

public void setLocalDiscoveryVersion(java.lang.String discoveryVersion)
Specified by:
setLocalDiscoveryVersion in interface RoutingManager

setDiscoverySelector

public void setDiscoverySelector(Selector selector)
Specified by:
setDiscoverySelector in interface RoutingManager

sendBroadcast

public void sendBroadcast(Message message)
Specified by:
sendBroadcast in interface RoutingManager

sendHeartAttack

public void sendHeartAttack()
Specified by:
sendHeartAttack in interface RoutingManager

sendGroupJoinMessage

public void sendGroupJoinMessage(java.lang.String groupID)
Specified by:
sendGroupJoinMessage in interface RoutingManager

sendGroupLeaveMessage

public void sendGroupLeaveMessage(java.lang.String groupID)
Specified by:
sendGroupLeaveMessage in interface RoutingManager

registerAsListener

public void registerAsListener(PalcomThread communicationManager)
Registers as a listener to messages received by this manager from the network.

Specified by:
registerAsListener in interface RoutingManager
Parameters:
communicationManager - The PalComThread used in CommunicationManager

registerForHeartBeats

public void registerForHeartBeats(PalcomThread resourceManager)
Specified by:
registerForHeartBeats in interface RoutingManager

sendHeartBeat

public void sendHeartBeat(boolean isHeartBeatAck)
Specified by:
sendHeartBeat in interface RoutingManager

unregisterDevice

public void unregisterDevice(java.lang.String deviceID)
Remove the device with deviceID from the list of registered devices.

Specified by:
unregisterDevice in interface RoutingManager

getNodeName

public java.lang.String getNodeName()
hgraph impl below

Specified by:
getNodeName in interface IHgraphNode
Returns:
The name of the node.

setNodeName

public int setNodeName(java.lang.String name,
                       Path callerPath)
Description copied from interface: IHgraphNode
Sets the name of the node. If a sibling already has the name, an error control message is returned

Specified by:
setNodeName in interface IHgraphNode
Parameters:
name - The new name
Returns:
IHgraphNode.STATUS_OK if the change succeeded. IHgraphNode.CHILD_NAME_CLASH if a sibling with the given name already exists.

getPath

public Path getPath()
Specified by:
getPath in interface IHgraphNode
Returns:
the Path object pertaining to the path of the node

updatePath

public void updatePath()
Description copied from interface: IHgraphNode
Updates the path of the H-Graph node along with its offspring recursively. The path is updated when the node name and the node parent is sat.

Specified by:
updatePath in interface IHgraphNode

hasChildNamed

public boolean hasChildNamed(java.lang.String name)
Description copied from interface: IHgraphNode
Checks whether the node has a child with a given name

Specified by:
hasChildNamed in interface IHgraphNode
Parameters:
name - The name to check
Returns:
True iff the node has an actual child with the given name. False if not.

isAncestorOf

public boolean isAncestorOf(IHgraphNode node)
Description copied from interface: IHgraphNode
Checks whether this node is an ancestor of the parameter node. It does so with a depth-first sharch of its offspring (children etc.)

Specified by:
isAncestorOf in interface IHgraphNode
Returns:
true if this node is an ancestor of the parameter node. false if not.

removeNodeChild

public int removeNodeChild(java.lang.String name,
                           Path callerPath)
Description copied from interface: IHgraphNode
Removes a child based on its name.

Specified by:
removeNodeChild in interface IHgraphNode
Parameters:
name - The name of the child to be removed
Returns:
IHgraphNode.STATUS_OK if the operation succeeds

toXML

public java.lang.String toXML()
Specified by:
toXML in interface IHgraphNode
Returns:
A simple xml'ified String of the node (type, name, path, children)

toXMLFull

public java.lang.String toXMLFull()
Specified by:
toXMLFull in interface IHgraphNode
Returns:
A complete xml'ified String of the node (same as simple + handlers, invokators, listeners, values)

toXMLRecursively

public java.lang.String toXMLRecursively()
Specified by:
toXMLRecursively in interface IHgraphNode
Returns:
A simple recursive xml'ified String of the node (type, name, path, children)

toXMLFullRecursively

public java.lang.String toXMLFullRecursively()
Specified by:
toXMLFullRecursively in interface IHgraphNode
Returns:
A complete recursive xml'ified String of the node (same as simple + handlers, invokators, listeners, values) HEAVY!!!

setNodeParent

public int setNodeParent(IHgraphNode newParent,
                         Path callerPath)
Description copied from interface: IHgraphNode
Sets the parent of the HgraphNode. This triggers a recalculation of the path of the node and its offspring

Specified by:
setNodeParent in interface IHgraphNode
Parameters:
newParent - the new parent
Returns:
IHgraphNode.STATUS_OK if the operation succeeds. IHgraphNode.CIRCULARITY_CLASH if the operation causes a circularity.

addNodeChild

public int addNodeChild(IHgraphNode node,
                        Path callerPath)
Description copied from interface: IHgraphNode
Adds a child to the node's private list of children. Ensures that names amongst children are unique

Specified by:
addNodeChild in interface IHgraphNode
Parameters:
node - The new child to be added
Returns:
IHgraphNode.STATUS_OK if the change succeeded. IHgraphNode.CHILD_NAME_CLASH if a sibling with the given name already exists.

getSiblingFunc

public SiblingFunc getSiblingFunc()
Specified by:
getSiblingFunc in interface IHgraphNode
Returns:
The SiblingFunc Sibling functionality object for the given node.

getValueFunc

public ValueFunc getValueFunc()
Specified by:
getValueFunc in interface IHgraphNode
Returns:
The ValueFunc Value functionality object for the given node.

getFuncFunc

public FuncFunc getFuncFunc()
Specified by:
getFuncFunc in interface IHgraphNode
Returns:
The FuncFunc functional functionality (ie. handlers, invokators and listeners) object for the given node.

getNodeParent

public IHgraphNode getNodeParent()
Specified by:
getNodeParent in interface IHgraphNode
Returns:
The parent of the node. null if the parent is root

getChildIterator

public java.util.Iterator getChildIterator()
Specified by:
getChildIterator in interface IHgraphNode
Returns:
An Iterator over the children of the node