Package org.jcsp.net

# Class ProtocolID

java.lang.Object
org.jcsp.net.ProtocolID

All Implemented Interfaces:
  `Serializable`

Direct Known Subclasses:
  `TCPIPProtocolID`

public abstract class ProtocolID extends Object implements Serializable

Abstract class that identifies a protocol. Provides methods for obtaining the protocol's `Builder` to be installed in the LinkFactory, starting a `LinkServer` for this protocol and for creating a `NodeAddressID` for this protocol from a String.

Protocols must not make use of the NodeID so that protocols can be installed before the node ID is determined. The current definition of TCPIPv4 protocol meets this criteria. Such a change will allow the UIFactory or other initialisation details to be obtained from a central server.

Author:
  Quickstone Technologies Limited
See Also:
  - Serialized Form

## Constructor Summary

Constructors
Constructor
Description
`ProtocolID()`

## Method Summary

Modifier and Type
Method
Description
`protected abstract NodeAddressID`
`createAddressID(String stAddressID, boolean uniqueAddress)`
Constructs a `NodeAddressID` from a `String`.
`boolean`
`equals(Object o)`
This tests whether another object is equal to this object.
`protected abstract LinkFactory.Builder`
`getLinkBuilder(Hashtable settings)`
Obtains the Builder for this protocol.
`final int`
`getPosition()`
Gets the position of this protocol in the order of preference.
`final int`
`hashCode()`
Returns a hash code for this object.
`abstract boolean`
`isActive()`
Not currently used.
`abstract boolean`
`requiresUserInteraction()`
Returns whether the protocol requires user interaction in order for data to be delivered.
`protected abstract LinkServer`
`startLinkServer(NodeAddressID addressID)`
Constructs, starts and returns a `LinkServer` on a specified `NodeAddressID`.

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### ProtocolID

public ProtocolID()

## Method Details

### equals

public boolean equals(Object o)
This tests whether another object is equal to this object. Two `ProtocolID` objects are equal if their classes are the same. This is a default implementation, it is probably more efficient to override this with an implementation that uses the instanceof operator.

Overrides:
  `equals` in class `Object`
Parameters:
  `o` - an object to compare with this object.
Returns:
  `true` iff the supplied object's class is the same as the class of this object.

### hashCode

public final int hashCode()
Returns a hash code for this object.

Overrides:
  `hashCode` in class `Object`
Returns:
  the hash code for the object.

### isActive

public abstract boolean isActive()

Not currently used.

This is envisaged to be used if a protocol that is in use and needs to be removed sometime in the future. This will stop any further use of the protocol.

Returns:
  boolean indicating whether protocol is active.

### requiresUserInteraction

public abstract boolean requiresUserInteraction()

Returns whether the protocol requires user interaction in order for data to be delivered. There could be a protocol that writes data out to floppy disk or CD-R (see Tanenbaum's example of bandwidth and lorry!).

Returns:
  boolean indicating whether user interaction is required.

### getPosition

public final int getPosition()
Gets the position of this protocol in the order of preference.

Returns:
  the order of preference as an `int`.

### getLinkBuilder

protected abstract LinkFactory.Builder getLinkBuilder(Hashtable settings)
Obtains the Builder for this protocol. Provides a Hashtable that can can contain settings needed to construct the Link.

Parameters:
  `settings` - `Hashtable` containing settings.
Returns:
  the `Builder` for constructing Links.

### startLinkServer

protected abstract LinkServer startLinkServer(NodeAddressID addressID) throws IllegalArgumentException

Constructs, starts and returns a `LinkServer` on a specified `NodeAddressID`.

Parameters:
  `addressID` - The address for the server to listen on.
Returns:
  the constructed `LinkServer`
Throws:
  `IllegalArgumentException` - if the supplied `NodeAddressID` is invalid.

### createAddressID

protected abstract NodeAddressID createAddressID(String stAddressID, boolean uniqueAddress) throws IllegalArgumentException
Constructs a `NodeAddressID` from a `String`.

Parameters:
  `stAddressID` - The address in String form.
  `uniqueAddress` - boolean indicating whether address is unique.
Returns:
  the constructed `NodeAddressID`
Throws:
  `IllegalArgumentException` - if the `String` supplied is invalid.