package edu.ncsu.dlf.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.egit.github.core.User;
import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.service.OrganizationService;
import org.eclipse.egit.github.core.service.UserService;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class ReviewerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String login = req.getParameter("login");
GitHubClient client = new GitHubClient();
client.setOAuth2Token(req.getParameter("access_token"));
UserService userService = new UserService(client);
User user = userService.getUser(login);
boolean isOrg = "Organization".equals(user.getType());
List<User> reviewers = new ArrayList<>();
User loggedInUser = userService.getUser();
reviewers.add(loggedInUser); //adds myself
if(!isOrg) {
List<User> followers = userService.getFollowers();
List<User> following = userService.getFollowing();
List<User> both = new ArrayList<>();
both.addAll(followers);
both.addAll(following);
u1: for(User u : both) {
//avoid duplicates
for(User u2 : reviewers) {
//compare by login because object equality can't be trusted
if(u2.getLogin().equals(u.getLogin())) {
continue u1;
}
}
reviewers.add(u);
}
}
else {
OrganizationService orgService = new OrganizationService(client);
List<User> users = orgService.getMembers(user.getLogin());
reviewers.addAll(users);
}
JSONArray json = new JSONArray();
try {
for(User u : reviewers) {
//required to fill out email
u = userService.getUser(u.getLogin());
JSONObject uJson = new JSONObject();
uJson.put("login", u.getLogin());
String name = u.getName();
name = name == null? "" : name;
if (loggedInUser.getLogin().equals(u.getLogin())) {
uJson.put("name", name + " (Myself)");
} else {
uJson.put("name", name);
}
uJson.put("email", u.getEmail());
json.put(uJson);
}
resp.setContentType("application/json");
resp.getWriter().write(json.toString(2));
} catch(JSONException e) {}
}
}