/**
  * Either loads the default property file on the first access, or reloads it if it has been
  * modified since last access.
  *
  * @throws DataAccessResourceFailureException
  */
 void checkUserMap() throws DataAccessResourceFailureException {
   try {
     if ((userMap == null) || userDefinitionsFile == null || userDefinitionsFile.isStale()) {
       if (userDefinitionsFile == null) {
         Resource propFile = findUserProperties();
         userDefinitionsFile = new PropertyFileWatcher(propFile);
       }
       userMap = loadUsersFromProperties(userDefinitionsFile.getProperties());
     }
   } catch (Exception e) {
     LOGGER.log(Level.SEVERE, "An error occurred loading user definitions", e);
   }
 }
  /** Writes down the current users map to file system */
  public void storeUsers() throws IOException {
    OutputStream os = null;
    try {
      // turn back the users into a users map
      Properties p = storeUsersToProperties(userMap);

      // write out to the data dir
      Resource propFile = userDefinitionsFile.getResource();
      os = propFile.out();
      p.store(os, null);
    } catch (Exception e) {
      if (e instanceof IOException) throw (IOException) e;
      else
        throw (IOException)
            new IOException("Could not write updated users list to file system").initCause(e);
    } finally {
      if (os != null) os.close();
    }
  }