JXTA

net.jxta.impl.id.binaryID
Class ModuleClassBinaryID

java.lang.Object
  extended by net.jxta.id.ID
      extended by net.jxta.platform.ModuleClassID
          extended by net.jxta.impl.id.binaryID.ModuleClassBinaryID
All Implemented Interfaces:
Serializable

public final class ModuleClassBinaryID
extends ModuleClassID

This interface defines a Module Class Identifier. A ModuleClassID uniquely identifies a particular local behaviour, that is, a specific API for each execution environment for which an implementation exists.

A ModuleClassID has two components: A base class identifier, and a role identifier. The role identifier may be zero. By convention the API uses the ModuleClassID with a zero role identifier to designate the base class in contexts where only the base class is significant. Nonetheless, a ModuleClassID with a zero role identifier is a valid ModulesClassID wherever a full ModuleClassID is expected. In many cases, only one role in a given class is ever used. Using role zero in such cases is an optimization because it may make the string representation of the ModuleClassID shorter.

Each service of a group, that is, the role it plays in the group, is uniquely identified per the group definition. This identifier may be used by other modules in the group to designate this one, or by the service itself to identify its parameters in a PeerAdvertisement. In addition, by combining its PeerGroupID with its own ModuleClassID, a service may create a predictible identifier unique on their peer, suitable for registering listeners with the EndpointService or other services with similar listener interfaces.

The standard PeerGroup implementation of the java reference implementation assigns to each service its ModuleClassID as its unique service identifier. Most of the times this ModuleClassID is a base classID, but groups that use the same Module Class for more than one service (same behaviour but playing a different role in the group, such as, for example, a data base engine with a different data base), may define multiple roles identified by the same base class identifier but different role identifiers. The standard PeerGroup implementation of the java reference implementation has the notion of main application: a default application which may be started automatically upon instantiating the group. This application implements Module and, therefore, is assigned a ModuleClassID. However applications are not expected to play any specific role in the group. As a result, they are assigned a role identifier allocated at run-time as need to garantee local unicity. As a result main applications cannot expect a predictible ClassID.

A ModuleClassID is optionaly described by a published ModuleClassAdvertisement.

There may be any number of embodiements of a module class. These are module specifications. A module specification represent the network behaviour of a module while its class represents its local behaviour. Different groups may use a common subset of classes, for example, the basic set defined by the platform should always be part of it. Each group may use different and network-incompatible specifications for common classes, optimized for various purposes. The local API of a given class on a given JXTA implementation will be invariant per the spec being used. Therefore, the difference will be transparent to applications which do not depend on the possibly different quality of service.

A ModuleSpecID embeds a base class identifier, which permits to verify that a given Module specification is suitable for its intended use.

Author:
Daniel Brookshier turbogeek@cluck.com
See Also:
PeerGroup, Module, ModuleClassID, PeerAdvertisement, ModuleSpecAdvertisement, ModuleClassAdvertisement, EndpointService, ID, Serialized Form

Field Summary
protected  BinaryID classID
          The id data
protected  BinaryID parentClassID
           
protected  PeerGroupID peerGroupID
           
protected  BinaryID roleID
           
 
Fields inherited from class net.jxta.id.ID
nullID, URIEncodingName, URNNamespace
 
Constructor Summary
  ModuleClassBinaryID()
          Constructor for creating a new ModuleClassID.
protected ModuleClassBinaryID(BinaryID classID, BinaryID parentClassID, BinaryID roleID, BinaryID peerGroupID)
           
protected ModuleClassBinaryID(BinaryID classID, BinaryID parentClassID, BinaryID roleID, PeerGroupID peerGroupID)
          Constructor.
protected ModuleClassBinaryID(String id)
          Constructor.
 
Method Summary
 boolean equals(Object target)
          
 ModuleClassID getBaseClass()
          Return a ModuleClassID of the same base class but with the role portion set to zero. aka "the base class".
 BinaryID getBaseClassID()
          Getter for property parentClassID.
 BinaryID getClassID()
          get the class' unique id
protected  String getID()
          returns the coded ID without the binaryid tag.
 String getIDFormat()
          Returns a string identifier which indicates which ID format is used by this ID instance.
 ID getPeerGroupID()
          Returns the peer group ID
 BinaryID getRoleID()
          get the role unique id
 Object getUniqueValue()
          Returns an object containing the unique value of the ID.
 int hashCode()
          
 boolean isOfSameBaseClass(ModuleClassID classId)
          Returns true if this ModuleClassID is of the same base class than the given class.
 boolean isOfSameBaseClass(ModuleSpecID specId)
          Returns true if this ModuleClassID is of the same class than the the given ModuleSpecID.
 
Methods inherited from class net.jxta.platform.ModuleClassID
create, intern
 
Methods inherited from class net.jxta.id.ID
getURL, toString, toURI
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

classID

protected BinaryID classID
The id data


parentClassID

protected BinaryID parentClassID

roleID

protected BinaryID roleID

peerGroupID

protected PeerGroupID peerGroupID
Constructor Detail

ModuleClassBinaryID

protected ModuleClassBinaryID(String id)
Constructor. Intializes contents from provided ID.

Parameters:
id - the ID data
Since:
JXTA 1.0

ModuleClassBinaryID

protected ModuleClassBinaryID(BinaryID classID,
                              BinaryID parentClassID,
                              BinaryID roleID,
                              PeerGroupID peerGroupID)
Constructor. Creates a ModuleClassID in a given class, with a given class unique id. A BinaryID of a class and another BinaryID are provided.

Parameters:
parentClassID - the class to which this will belong.
roleID - the unique id of this role in that class.
peerGroupID - the peer group ID
classID - the class ID

ModuleClassBinaryID

protected ModuleClassBinaryID(BinaryID classID,
                              BinaryID parentClassID,
                              BinaryID roleID,
                              BinaryID peerGroupID)

ModuleClassBinaryID

public ModuleClassBinaryID()
Constructor for creating a new ModuleClassID. A new class BinaryID is created. The role ID is left null. This is the only way to create a new class without supplying a new BinaryID explicitly. To create a new role in an existing class, one must use one of the other constructors. Note that a null role is just as valid as any other, it just has a shorter string representation. So it is not mandatory to create a new role in a new class.

Since:
JXTA 1.0
Method Detail

equals

public boolean equals(Object target)

Overrides:
equals in class Object

hashCode

public int hashCode()

Overrides:
hashCode in class Object

getIDFormat

public String getIDFormat()
Returns a string identifier which indicates which ID format is used by this ID instance.

Specified by:
getIDFormat in class ID
Returns:
a string identifier which indicates which ID format is used by this ID instance.

getUniqueValue

public Object getUniqueValue()
Returns an object containing the unique value of the ID. This object must provide implementations of toString(), equals() and hashCode() that are canonical and consistent from run-to-run given the same input values. Beyond this nothing should be assumed about the nature of this object. For some implementations the object returned may be this.

Specified by:
getUniqueValue in class ID
Returns:
Object which can provide canonical representations of the ID.

getPeerGroupID

public ID getPeerGroupID()
Returns the peer group ID

Returns:
the peer group ID

getID

protected String getID()
returns the coded ID without the binaryid tag.

Returns:
string of the contents

getBaseClass

public ModuleClassID getBaseClass()
Return a ModuleClassID of the same base class but with the role portion set to zero. aka "the base class".

Specified by:
getBaseClass in class ModuleClassID
Returns:
ModuleClassID the base class.

isOfSameBaseClass

public boolean isOfSameBaseClass(ModuleClassID classId)
Returns true if this ModuleClassID is of the same base class than the given class. Note: This method is NOT named "isOfClass" because a ModuleClassID may have two UUID; one that denotes a "base" class proper, and an optional second one that denotes a "Role", or subclass. Compatibility between ClassIDs is based on the "base" portion, hence the "isOfSame" naming. This routine can be used for comparison with a base class since a base class is just a class which role portion happens to be zero.

Specified by:
isOfSameBaseClass in class ModuleClassID
Parameters:
classId - Module class id to compare with
Returns:
boolean true if equals

isOfSameBaseClass

public boolean isOfSameBaseClass(ModuleSpecID specId)
Returns true if this ModuleClassID is of the same class than the the given ModuleSpecID.

Specified by:
isOfSameBaseClass in class ModuleClassID
Parameters:
specId - Module spec id to compare with
Returns:
boolean true if equals

getClassID

public BinaryID getClassID()
get the class' unique id

Returns:
BinaryID module class' unique id
Since:
JXTA 1.0

getRoleID

public BinaryID getRoleID()
get the role unique id

Returns:
Module role unique id.
Since:
JXTA 1.0

getBaseClassID

public BinaryID getBaseClassID()
Getter for property parentClassID.

Returns:
Value of property parentClassID.

JXSE