/**
  * Adds a user to project group if the member have a Data owner role in the project.
  *
  * <p>throws IllegalArgumentException if the project group is not found.
  *
  * <p>
  *
  * @param project
  * @param member
  */
 public void addUserToProjectGroup(Project project, ProjectTeam member) {
   byte[] groupId = UsersGroups.getGroupID(project.getName());
   HdfsGroups hdfsGroup = hdfsGroupsFacade.findHdfsGroup(groupId);
   if (hdfsGroup == null) {
     throw new IllegalArgumentException("No group found for project in HDFS.");
   }
   String hdfsUsername;
   HdfsUsers memberHdfsUser;
   byte[] memberUserId;
   Users newMember = userFacade.findByEmail(member.getProjectTeamPK().getTeamMember());
   hdfsUsername = getHdfsUserName(project, newMember);
   memberUserId = UsersGroups.getUserID(hdfsUsername);
   memberHdfsUser = hdfsUsersFacade.findHdfsUser(memberUserId);
   if (memberHdfsUser == null) {
     memberHdfsUser = new HdfsUsers(memberUserId, hdfsUsername);
     hdfsUsersFacade.persist(memberHdfsUser);
   }
   if (memberHdfsUser.getHdfsGroupsCollection() == null) {
     memberHdfsUser.setHdfsGroupsCollection(new ArrayList<HdfsGroups>());
   }
   // add only data_owners to project group
   if (member.getTeamRole().equals(AllowedRoles.DATA_OWNER)) {
     if (!memberHdfsUser.getHdfsGroupsCollection().contains(hdfsGroup)) {
       memberHdfsUser.getHdfsGroupsCollection().add(hdfsGroup);
     }
   }
 }
 /**
  * Adds a new member to the project. This will create a new user in HDFS with the name <code>
  * projectName</code>__<code>username</code> and adds it to the group <code>projectName</code>.
  * throws IllegalArgumentException if the project group is not found.
  *
  * <p>
  *
  * @param project
  * @param member
  * @throws java.io.IOException
  */
 public void addNewProjectMember(Project project, ProjectTeam member) throws IOException {
   byte[] groupId = UsersGroups.getGroupID(project.getName());
   HdfsGroups hdfsGroup = hdfsGroupsFacade.findHdfsGroup(groupId);
   if (hdfsGroup == null) {
     throw new IllegalArgumentException("No group found for project in HDFS.");
   }
   String hdfsUsername;
   HdfsUsers memberHdfsUser;
   byte[] memberUserId;
   Users newMember = userFacade.findByEmail(member.getProjectTeamPK().getTeamMember());
   hdfsUsername = getHdfsUserName(project, newMember);
   memberUserId = UsersGroups.getUserID(hdfsUsername);
   memberHdfsUser = hdfsUsersFacade.findHdfsUser(memberUserId);
   if (memberHdfsUser == null) {
     memberHdfsUser = new HdfsUsers(memberUserId, hdfsUsername);
     hdfsUsersFacade.persist(memberHdfsUser);
   }
   if (memberHdfsUser.getHdfsGroupsCollection() == null) {
     memberHdfsUser.setHdfsGroupsCollection(new ArrayList<HdfsGroups>());
   }
   // add only data_owners to project group
   if (member.getTeamRole().equals(AllowedRoles.DATA_OWNER)) {
     if (!memberHdfsUser.getHdfsGroupsCollection().contains(hdfsGroup)) {
       memberHdfsUser.getHdfsGroupsCollection().add(hdfsGroup);
     }
   }
   byte[] dsGroupId;
   String dsGroups;
   HdfsGroups hdfsDsGroup;
   // add the member to all dataset groups in the project.
   List<Dataset> dsInProject = datasetFacade.findByProject(project);
   for (Dataset ds : dsInProject) {
     dsGroups = getHdfsGroupName(ds);
     dsGroupId = UsersGroups.getGroupID(dsGroups);
     hdfsDsGroup = hdfsGroupsFacade.findHdfsGroup(dsGroupId);
     if (hdfsDsGroup != null) {
       if (!memberHdfsUser.getHdfsGroupsCollection().contains(hdfsDsGroup)) {
         memberHdfsUser.getHdfsGroupsCollection().add(hdfsDsGroup);
       }
     }
   }
   hdfsUsersFacade.merge(memberHdfsUser);
 }