public UserBrowserModel() {
   UserBrowsingManager manager = new UserBrowsingManager();
   pUser = manager.getUser();
 }
  public UserBrowsing() {

    setTitle(MessageBundle.getMessage("angal.menu.usersbrowser"));
    myFrame = this;

    // addWindowListener(this);

    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    Toolkit kit = Toolkit.getDefaultToolkit();
    Dimension screensize = kit.getScreenSize();
    pfrmWidth = screensize.width / 2 + 100;
    pfrmHeight = screensize.height / 2;
    setBounds(screensize.width / 4, screensize.height / 4, pfrmWidth, pfrmHeight);

    model = new UserBrowserModel();
    table = new JTable(model);
    table.getColumnModel().getColumn(0).setPreferredWidth(pColumwidth[0]);
    table.getColumnModel().getColumn(1).setPreferredWidth(pColumwidth[1]);
    table.getColumnModel().getColumn(2).setPreferredWidth(pColumwidth[2]);
    // table.getColumnModel().getColumn(3).setPreferredWidth(pColumwidth[3]);

    scrollPane = new JScrollPane(table);
    add(scrollPane, BorderLayout.CENTER);

    JPanel buttonPanel = new JPanel();

    selectlabel = new JLabel(MessageBundle.getMessage("angal.menu.selectgroup"));
    buttonPanel.add(selectlabel);

    pbox = new JComboBox();
    pbox.addItem(MessageBundle.getMessage("angal.menu.all"));
    ArrayList<UserGroup> group = manager.getUserGroup();
    for (UserGroup elem : group) {
      pbox.addItem(elem);
    }
    pbox.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent event) {
            pSelection = pbox.getSelectedItem().toString();
            if (pSelection.compareTo("ALL") == 0) model = new UserBrowserModel();
            else model = new UserBrowserModel(pSelection);
            model.fireTableDataChanged();
            table.updateUI();
          }
        });
    buttonPanel.add(pbox);

    JButton buttonNew = new JButton(MessageBundle.getMessage("angal.common.new"));
    buttonNew.setMnemonic(KeyEvent.VK_N);
    buttonNew.addActionListener(
        new ActionListener() {

          public void actionPerformed(ActionEvent event) {
            user = new User("", "", "", "");
            new UserEdit(myFrame, user, true);
          }
        });
    buttonPanel.add(buttonNew);

    JButton buttonEdit = new JButton(MessageBundle.getMessage("angal.common.edit"));
    buttonEdit.setMnemonic(KeyEvent.VK_E);
    buttonEdit.addActionListener(
        new ActionListener() {

          public void actionPerformed(ActionEvent event) {
            if (table.getSelectedRow() < 0) {
              JOptionPane.showMessageDialog(
                  null,
                  MessageBundle.getMessage("angal.common.pleaseselectarow"),
                  MessageBundle.getMessage("angal.hospital"),
                  JOptionPane.PLAIN_MESSAGE);
              return;
            } else {
              selectedrow = table.getSelectedRow();
              user = (User) (((UserBrowserModel) model).getValueAt(table.getSelectedRow(), -1));
              new UserEdit(myFrame, user, false);
            }
          }
        });
    buttonPanel.add(buttonEdit);

    JButton buttonResetPassword = new JButton(MessageBundle.getMessage("angal.menu.resetpassword"));
    buttonResetPassword.setMnemonic(KeyEvent.VK_R);
    buttonResetPassword.addActionListener(
        new ActionListener() {

          public void actionPerformed(ActionEvent event) {
            if (table.getSelectedRow() < 0) {
              JOptionPane.showMessageDialog(
                  null,
                  MessageBundle.getMessage("angal.common.pleaseselectarow"),
                  MessageBundle.getMessage("angal.hospital"),
                  JOptionPane.PLAIN_MESSAGE);
              return;
            } else {
              selectedrow = table.getSelectedRow();
              user = (User) (((UserBrowserModel) model).getValueAt(table.getSelectedRow(), -1));

              // 1. Insert new password
              JPasswordField pwd = new JPasswordField(10);
              pwd.addAncestorListener(
                  new AncestorListener() {

                    public void ancestorRemoved(AncestorEvent event) {}

                    public void ancestorMoved(AncestorEvent event) {}

                    public void ancestorAdded(AncestorEvent event) {
                      event.getComponent().requestFocusInWindow();
                    }
                  });
              String newPassword = "";
              while (newPassword.equals("")) {
                int action =
                    JOptionPane.showConfirmDialog(
                        UserBrowsing.this,
                        pwd,
                        MessageBundle.getMessage(
                            "angal.menu.onepleaseinsertnewpassowrdminsixdigits"),
                        JOptionPane.OK_CANCEL_OPTION);
                if (action == JOptionPane.CANCEL_OPTION) return;
                newPassword = new String(pwd.getPassword());
                if (newPassword == null || newPassword.equals("") || newPassword.length() < 6) {
                  JOptionPane.showMessageDialog(
                      UserBrowsing.this,
                      MessageBundle.getMessage(
                          "angal.menu.pleaseinsertavalidpasswordminsixdigits"));
                  newPassword = "";
                  pwd.setText("");
                }
              }

              // 2. Retype new password
              pwd.setText("");
              int action =
                  JOptionPane.showConfirmDialog(
                      UserBrowsing.this,
                      pwd,
                      MessageBundle.getMessage("angal.menu.twopleaserepeatpassword"),
                      JOptionPane.OK_CANCEL_OPTION);
              if (action == JOptionPane.CANCEL_OPTION) return;
              String newPassword2 = new String(pwd.getPassword());

              // 3. Check & Save
              if (!newPassword.equals(newPassword2)) {
                JOptionPane.showMessageDialog(
                    UserBrowsing.this,
                    MessageBundle.getMessage("angal.menu.retypeerrorpleaseretry"));
                return;
              }
              if (newPassword != null && !newPassword.equals("") && newPassword.length() >= 6) {
                String hashed = BCrypt.hashpw(new String(newPassword), BCrypt.gensalt());
                user.setPasswd(hashed);
                if (manager.updatePassword(user))
                  JOptionPane.showMessageDialog(
                      UserBrowsing.this,
                      MessageBundle.getMessage("angal.menu.thepasswordhasbeenchanged"));
              } else {
                JOptionPane.showMessageDialog(
                    UserBrowsing.this,
                    MessageBundle.getMessage("angal.menu.pleaseinsertavalidpasswordminsixdigits"));
              }
            }
          }
        });
    buttonPanel.add(buttonResetPassword);

    JButton buttonDelete = new JButton(MessageBundle.getMessage("angal.common.delete"));
    buttonDelete.setMnemonic(KeyEvent.VK_D);
    buttonDelete.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent event) {
            if (table.getSelectedRow() < 0) {
              JOptionPane.showMessageDialog(
                  null,
                  MessageBundle.getMessage("angal.common.pleaseselectarow"),
                  MessageBundle.getMessage("angal.hospital"),
                  JOptionPane.PLAIN_MESSAGE);
              return;
            } else {
              UserBrowsingManager manager = new UserBrowsingManager();
              User m = (User) (((UserBrowserModel) model).getValueAt(table.getSelectedRow(), -1));
              int n =
                  JOptionPane.showConfirmDialog(
                      null,
                      MessageBundle.getMessage("angal.menu.deleteuser")
                          + " \""
                          + m.getUserName()
                          + "\" ?",
                      MessageBundle.getMessage("angal.hospital"),
                      JOptionPane.YES_NO_OPTION);

              if ((n == JOptionPane.YES_OPTION) && (manager.deleteUser(m))) {
                pUser.remove(table.getSelectedRow());
                model.fireTableDataChanged();
                table.updateUI();
              }
            }
          }
        });
    buttonPanel.add(buttonDelete);

    JButton buttonClose = new JButton(MessageBundle.getMessage("angal.common.close"));
    buttonClose.setMnemonic(KeyEvent.VK_C);
    buttonClose.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent event) {
            dispose();
          }
        });
    buttonPanel.add(buttonClose);

    add(buttonPanel, BorderLayout.SOUTH);
    setVisible(true);
  }