// The purpose of this class is to maintain a List
// of all HyperLinkedList.class Object created 
// the the Named Constructor.
// For example, this HyperLinkedList will be added into the SystemListRegistry
// HyperLinkedList myList = new HyperLinkedList("myList"); 
//     ** Whereas this example constructor will not; you can still set its name later.
//HyperLinkedList myList = new HyperLinkedList();
// myList.setName("myList"); 

// Note: None of this is Thread safe except where synched.

public class SystemListRegistry extends HyperLinkedList
{
static SystemListRegistry systemListRegistry;
static HyperLinkedList systemList;

SystemListRegistry()
{
   if(systemList == null)
   {
      systemList = this;
      systemListRegistry = this;
   }
   listName = "SystemListRegistry";
}

static HyperLinkedList getSystemList()
{
   return getRegistry().systemListRegistry.systemList;
}

public static synchronized SystemListRegistry getRegistry()
{
   if(systemListRegistry == null)
      systemListRegistry = new SystemListRegistry();
   return systemListRegistry;
}

void register(SystemListNode tListNode)
{
   synchronized(this)
   {
      //System.out.println("SYS: registering "+tListNode.parentList.listName); 
      dlStore(tListNode);
      tListNode.parentList.listFlags |= SYSTEM_REGISTERED;
      notifyAll();
   }
}

public void unregister(SystemListNode tListNode)
{
   synchronized(this)
   {
      //System.out.println("SYS: registering "+tListNode.parentList.listName); 
      dlDelete(tListNode);
      tListNode.parentList.listFlags &= ~SYSTEM_REGISTERED;
      notifyAll();
   }
}

static HyperLinkedList get(String tName)
{
boolean working = true;
HyperLinkedList tList = null;
SystemListNode tNode = null;
   if(systemListRegistry == null)
      systemListRegistry = new SystemListRegistry();
   synchronized(systemListRegistry)
   {
      tNode = (SystemListNode)systemList.listBase;
      while(tNode != null && working)
      {
         if(tNode.name.equals(tName))
         {
            tList = (HyperLinkedList)tNode.parentList;
         }
      }
      systemListRegistry.notifyAll();
   }
   if(tList == null)
   {
      tList = new HyperLinkedList(tName);
   }
   return tList;

}


}









