public Component getRoot(final Project project) {
    dataModel = new IssueTableModel();
    statusFilter.setModel(new DefaultComboBoxModel(StatusFilter.values()));
    userFilter.setModel(new DefaultComboBoxModel(UserFilter.values()));

    table1.setModel(dataModel);
    update.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            IssueViewer.this.updateIssues(project);
          }
        });
    table1.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseClicked(MouseEvent e) {
            Point p = e.getPoint();
            int row = table1.rowAtPoint(p);
            if (e.getClickCount() == 2 && issues != null && 0 <= row && row < issues.size()) {
              Issue issue = issues.get(row);
              String resource_uri = issue.getResource_uri();
              // replace使うのはまずいけど面倒なので今はこれで対応
              String substring =
                  resource_uri
                      .substring("/1.0/repositories/".length(), resource_uri.length())
                      .replace("issues", "issue");
              try {
                Desktop.getDesktop().browse(new URL("https://bitbucket.org/" + substring).toURI());
              } catch (IOException e1) {
                e1.printStackTrace();
              } catch (URISyntaxException e1) {
                e1.printStackTrace();
              }
            }
          }
        });
    return panel1;
  }
 @Override
 public void onSuccess(VerificationResult verificationResult) {
   String email = verificationResult.getEmail();
   Person person = dao.getPersonByEmail(email);
   UserFilter.setPersonForSession(httpRequest, person);
 }