@Override
 public List<Profile> getProfiles(String projectIdentifier, String query, int limit)
     throws NoSuchEntityException {
   com.tasktop.c2c.server.profile.domain.internal.Project project;
   try {
     project = profileService.getProjectByIdentifier(projectIdentifier);
   } catch (EntityNotFoundException e) {
     handle(e);
     throw new IllegalStateException();
   }
   List<Profile> profiles = new ArrayList<Profile>();
   for (ProjectProfile profile : project.getProjectProfiles()) {
     Profile copy = webServiceDomain.copy(profile.getProfile());
     if (matches(query, copy)) {
       profiles.add(copy);
     }
   }
   Collections.sort(profiles);
   if (limit > 0) {
     while (profiles.size() > limit) {
       profiles.remove(profiles.size() - 1);
     }
   }
   // don't leak email addresses
   for (Profile profile : profiles) {
     profile.setEmail(null);
   }
   return profiles;
 }
  @Override
  public Boolean updateTeamMemberRoles(String projectIdentifier, ProjectTeamMember member)
      throws NoSuchEntityException, ValidationFailedException {
    setTenancyContext(projectIdentifier);

    try {
      com.tasktop.c2c.server.profile.domain.internal.Project project =
          profileService.getProjectByIdentifier(projectIdentifier);

      ProjectProfile projectProfile =
          profileService.getProjectProfile(project.getId(), member.getProfile().getId());

      // Wire in our updated roles now.
      projectProfile.setOwner(member.getRoles().contains(ProjectRole.OWNER));
      projectProfile.setUser(member.getRoles().contains(ProjectRole.MEMBER));

      profileService.updateProjectProfile(projectProfile);
    } catch (EntityNotFoundException e) {
      handle(e);
    } catch (ValidationException e) {
      handle(e);
    }
    return true;
  }