private static Kenai.Status getKenaiStatus() {
   Kenai.Status s = Kenai.Status.OFFLINE;
   for (Kenai k : KenaiManager.getDefault().getKenais()) {
     if (k.getStatus() == Kenai.Status.ONLINE) return Kenai.Status.ONLINE;
     else if (k.getStatus() == Kenai.Status.LOGGED_IN) {
       s = Kenai.Status.LOGGED_IN;
     }
   }
   return s;
 }
  public synchronized void init() {
    if (inited) {
      return;
    }
    KenaiManager.getDefault()
        .addPropertyChangeListener(
            new PropertyChangeListener() {

              public void propertyChange(PropertyChangeEvent evt) {
                setStatus(getKenaiStatus());
              }
            });
    inited = true;
  }
    @Override
    public void mouseClicked(MouseEvent event) {
      Kenai.Status s = getKenaiStatus();
      if (event.getClickCount() == 2) {
        if (s == Kenai.Status.ONLINE) {
          ChatTopComponent.openAction(ChatTopComponent.findInstance(), "", "", false)
              .actionPerformed(new ActionEvent(event, event.getID(), "")); // NOI18N
        }
      } else {
        if (s != Kenai.Status.OFFLINE) {
          JPopupMenu menu = new JPopupMenu();
          final JMenuItem contactListMenu =
              new JMenuItem(NbBundle.getMessage(PresenceIndicator.class, "CTL_WhoIsOnlineAction"));
          menu.add(contactListMenu);
          contactListMenu.setEnabled(s == Kenai.Status.ONLINE);
          final JCheckBoxMenuItem onlineCheckBox =
              new JCheckBoxMenuItem(
                  NbBundle.getMessage(PresenceIndicator.class, "CTL_OnlineCheckboxMenuItem"),
                  s == Kenai.Status.ONLINE); // NOI18N
          menu.add(onlineCheckBox);

          for (final Kenai k : KenaiManager.getDefault().getKenais()) {
            if (k.getStatus() == Kenai.Status.OFFLINE) continue;
            JMenu m = new JMenu(k.getName());
            final JCheckBoxMenuItem onlineCheckBoxForKenai =
                new JCheckBoxMenuItem(
                    NbBundle.getMessage(PresenceIndicator.class, "CTL_OnlineCheckboxMenuItem"),
                    k.getStatus() == Kenai.Status.ONLINE); // NOI18N
            m.add(onlineCheckBoxForKenai);
            final JMenuItem logoutItem =
                new JMenuItem(
                    NbBundle.getMessage(PresenceIndicator.class, "CTL_LogoutMenuItem")); // NOI18N
            m.add(logoutItem);
            menu.add(m);

            onlineCheckBoxForKenai.setEnabled(Utilities.isChatSupported(k));
            onlineCheckBoxForKenai.addActionListener(
                new ActionListener() {

                  @Override
                  public void actionPerformed(ActionEvent e) {
                    try {
                      PasswordAuthentication passwordAuthentication = k.getPasswordAuthentication();
                      if (passwordAuthentication != null) {
                        k.login(
                            passwordAuthentication.getUserName(),
                            passwordAuthentication.getPassword(),
                            onlineCheckBoxForKenai.isSelected());
                      }
                    } catch (KenaiException ex) {
                      Exceptions.printStackTrace(ex);
                    }
                  }
                });

            logoutItem.addActionListener(
                new ActionListener() {

                  public void actionPerformed(ActionEvent e) {
                    RequestProcessor.getDefault()
                        .post(
                            new Runnable() {

                              @Override
                              public void run() {
                                k.logout();
                              }
                            });
                  }
                });
          }
          final JMenuItem logoutItem =
              new JMenuItem(
                  NbBundle.getMessage(PresenceIndicator.class, "CTL_LogoutMenuItem")); // NOI18N
          menu.add(logoutItem);
          onlineCheckBox.addActionListener(
              new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                  RequestProcessor.getDefault()
                      .post(
                          new Runnable() {

                            public void run() {
                              try {
                                for (Kenai kenai : KenaiManager.getDefault().getKenais()) {
                                  PasswordAuthentication passwordAuthentication =
                                      kenai.getPasswordAuthentication();
                                  if (passwordAuthentication != null
                                      && Utilities.isChatSupported(kenai)) {
                                    kenai.login(
                                        passwordAuthentication.getUserName(),
                                        passwordAuthentication.getPassword(),
                                        onlineCheckBox.isSelected());
                                  }
                                }
                              } catch (KenaiException ex) {
                                Exceptions.printStackTrace(ex);
                              }
                            }
                          });
                }
              });
          logoutItem.addActionListener(
              new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                  Actions.forID("Team", "org.netbeans.modules.team.ui.LogoutAction")
                      .actionPerformed(e);
                }
              });

          contactListMenu.addActionListener(new WhoIsOnlineAction());
          menu.show(label, event.getPoint().x, event.getPoint().y);
        }
      }
    }