docs: public void addMasterListeners()
      {
          super.addMasterListeners();
          this.getField(UserInfo.USER_NAME).addListener(new CheckNonNumericListener(null));
          this.addListener(new ReadOnlyRecordHandler(this.getField(UserInfo.READ_ONLY_RECORD), true));
          this.addListener(new FileListener(null)
          {
              /**
               * Make sure the user group ID is non-null (set it to the anon group id)
               */
              public int doRecordChange(FieldInfo field, int iChangeType, boolean bDisplayOption)
              { // Read a valid record
                  switch (iChangeType)
                  {
                      case DBConstants.ADD_TYPE:
                      case DBConstants.UPDATE_TYPE:
                          if (this.getOwner().getField(UserInfo.USER_GROUP_ID).isNull())
                              if (this.getOwner().getRecordOwner() != null)
                          {
                              Record recUserControl = (Record)this.getOwner().getRecordOwner().getRecord(UserControl.USER_CONTROL_FILE);
                              if (recUserControl == null)
                              {
                                  recUserControl = new UserControl(this.getOwner().getRecordOwner());
                                  this.getOwner().addListener(new FreeOnFreeHandler(recUserControl));
                              }
                              this.getOwner().getField(UserInfo.USER_GROUP_ID).moveFieldToThis(recUserControl.getField(UserControl.ANON_USER_GROUP_ID));
                          }
                          break;
                  }
                  return super.doRecordChange(field, iChangeType, bDisplayOption);        // Initialize the record
              }
              
          });
      }