groupmgmt
Class GroupManager

java.lang.Object
  extended bygroupmgmt.GroupManager
All Implemented Interfaces:
java.util.EventListener, GroupChangedListener

public class GroupManager
extends java.lang.Object
implements GroupChangedListener

The Group Manager; Built for use in LIME 1.1; Maintains local information about the group that the current host is a part of (list of members).
Can be switched on and off by the controlling class.
Controls the MemberDetector - Detects new/stopping members & dropped connections.
and the GroupDisseminator - Effects changes in the group based on data from the Detector.

Version:
July 2003
Author:
Christine Julien, Tom Elgin

Nested Class Summary
private static class GroupManager.TestFrame
          ## Private GUI class used for testing.
 
Field Summary
private  boolean debugging
          Determines whether to output log messages.
private  MemberDetector detector
          The MemberDetector determines when a connection with another member should be initiated or closed.
private  GroupDisseminator disseminator
          The GroupDisseminator handles the formation of new groups based on info from the MemberDetector.
private  java.util.Vector groupChangedListeners
          A list of all GroupChangedListeners that are registered to receive GroupChangedEvents from this GroupDisseminator.
private static Member me
          Reference to my Member object (for identification).
private  java.util.Vector members
          The members of the group I'm in (including me).
private  GroupChangedEvent pendingUpdate
          The GroupChangedEvent waiting to be sent out.
private  boolean sendSelfEngagement
          Set to determine whether the calling class will receive GroupChangedEvents representing self-engagement (ie right after the GroupManager starts up).
private  boolean suppressUpdates
          Allows the calling class to temporarily suppress GroupChangedEvents.
 
Constructor Summary
GroupManager(int groupmgmtPort, MemberDetector detector, GroupDisseminator disseminator, boolean sendSelfEngagement)
          Constructor, initializes the GroupManager with the provided MemberDetector and GroupDisseminator.
 
Method Summary
 void addGroupChangedListener(GroupChangedListener listener)
          Registers a GroupChangedListener to receive all GroupChangedEvents generated by this GroupDisseminator.
 void connect()
          Turn the GroupManager on.
 void disconnect()
          Turn the GroupManager off.
private  void fireGroupChangedEvent(GroupChangedEvent event)
          Sends a GroupChangedEvent to all registered listeners.
 MemberDetector getDetector()
          Accessor to get the MemberDetector.
 GroupDisseminator getDisseminator()
          Accessor to get the GroupDisseminator.
static Member getMember()
          Static accessor for Detectors/Disseminators to get a Member object representing this group member.
 void groupChanged(GroupChangedEvent event)
          Method required by the GroupChangedListener interface.
private  void log(java.lang.String msg)
          Private utility message to log debugging output from the GroupManager.
static void main(java.lang.String[] args)
          ## Main method just for testing on the command-line.
static void print(java.lang.String msg)
          Static utility method to log output from any groupmgmt class.
 void removeGroupChangedListener(GroupChangedListener listener)
          Unregisters a GroupChangedListener, stops sending GroupChangedEvents to the listener.
 void resumeUpdates()
          Resume sending GroupChangedEvents to the listeners.
 void setDebug(boolean debugging)
          Determine whether to output logging messages.
 boolean setDetector(MemberDetector newDetector)
          Change the MemberDetector.
 boolean setDisseminator(GroupDisseminator newDisseminator)
          Change the GroupDisseminator and tell the MemberDetector.
private static void setMember(Member member)
          Private static helper method to store the member object of this group member.
 void suppressUpdates()
          Allows the calling class to tell us to temporarily stop sending GroupChangedEvents.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

detector

private MemberDetector detector
The MemberDetector determines when a connection with another member should be initiated or closed.


disseminator

private GroupDisseminator disseminator
The GroupDisseminator handles the formation of new groups based on info from the MemberDetector.


members

private java.util.Vector members
The members of the group I'm in (including me).


groupChangedListeners

private java.util.Vector groupChangedListeners
A list of all GroupChangedListeners that are registered to receive GroupChangedEvents from this GroupDisseminator.


suppressUpdates

private boolean suppressUpdates
Allows the calling class to temporarily suppress GroupChangedEvents.


pendingUpdate

private GroupChangedEvent pendingUpdate
The GroupChangedEvent waiting to be sent out. Used when suppressUpdates is set.


sendSelfEngagement

private boolean sendSelfEngagement
Set to determine whether the calling class will receive GroupChangedEvents representing self-engagement (ie right after the GroupManager starts up).


me

private static Member me
Reference to my Member object (for identification).


debugging

private boolean debugging
Determines whether to output log messages.

Constructor Detail

GroupManager

public GroupManager(int groupmgmtPort,
                    MemberDetector detector,
                    GroupDisseminator disseminator,
                    boolean sendSelfEngagement)
Constructor, initializes the GroupManager with the provided MemberDetector and GroupDisseminator.

Parameters:
groupmgmtPort - The port to use to identify this group member.
detector - The MemberDetector to use.
disseminator - The GroupDisseminator to use.
sendSelfEngagement - Whether to fire a GroupChangedEvent when the Member engages with itself.
Method Detail

setDebug

public void setDebug(boolean debugging)
Determine whether to output logging messages. Doesn't do anything in GroupManager because it never needed debug messages.

Parameters:
debugging - Outputs messages if true.

connect

public void connect()
Turn the GroupManager on. Start both the MemberDetector and the GroupDisseminator.


disconnect

public void disconnect()
Turn the GroupManager off. Stop both the MemberDetector and the GroupDisseminator.


suppressUpdates

public void suppressUpdates()
Allows the calling class to tell us to temporarily stop sending GroupChangedEvents. Note that this suppresses events to ALL listeners, not just one.


resumeUpdates

public void resumeUpdates()
Resume sending GroupChangedEvents to the listeners. If any updates were suppressed, the most recent GroupChangedEvent is immediately fired.


setMember

private static void setMember(Member member)
Private static helper method to store the member object of this group member.

Parameters:
member - The member object.

getMember

public static Member getMember()
Static accessor for Detectors/Disseminators to get a Member object representing this group member.

Returns:
This group member.

getDetector

public MemberDetector getDetector()
Accessor to get the MemberDetector.

Returns:
The MemberDetector currently being used.

setDetector

public boolean setDetector(MemberDetector newDetector)
Change the MemberDetector. Only works if inactive.

Returns:
True if the MemberDetector was successfully changed.

getDisseminator

public GroupDisseminator getDisseminator()
Accessor to get the GroupDisseminator.

Returns:
The GroupDisseminator currently being used.

setDisseminator

public boolean setDisseminator(GroupDisseminator newDisseminator)
Change the GroupDisseminator and tell the MemberDetector. Only works if both are inactive.

Returns:
True if the MemberDetector was successfully changed.

groupChanged

public void groupChanged(GroupChangedEvent event)
Method required by the GroupChangedListener interface. Called whenever the Group I'm in has changed and tells me the new group configuration(s). If the new group I'm in differs from the members list (it might not), then update the members list and inform my listeners via a GroupChangedEvent.

Specified by:
groupChanged in interface GroupChangedListener

addGroupChangedListener

public void addGroupChangedListener(GroupChangedListener listener)
Registers a GroupChangedListener to receive all GroupChangedEvents generated by this GroupDisseminator.

Parameters:
listener - The GroupChangedListener to receive events.

removeGroupChangedListener

public void removeGroupChangedListener(GroupChangedListener listener)
Unregisters a GroupChangedListener, stops sending GroupChangedEvents to the listener.

Parameters:
listener - The GroupChangedListener to stop receiving events.

fireGroupChangedEvent

private void fireGroupChangedEvent(GroupChangedEvent event)
Sends a GroupChangedEvent to all registered listeners. Called by the implementing class when the group changes.

Parameters:
event - The GroupChangedEvent to send.

log

private void log(java.lang.String msg)
Private utility message to log debugging output from the GroupManager.

Parameters:
msg - The message to display.

print

public static void print(java.lang.String msg)
Static utility method to log output from any groupmgmt class. Calls System.out.println with "groupmgmt:" followed by the message.

Parameters:
msg - The message to display.

main

public static void main(java.lang.String[] args)
## Main method just for testing on the command-line.