| UserGroupEditor |

    1   /*  UserGroupEditor.java
    2    *
    3    *  Copyright (c) 1998-2001, The University of Sheffield.
    4    *
    5    *  This file is part of GATE (see http://gate.ac.uk/), and is free
    6    *  software, licenced under the GNU Library General Public License,
    7    *  Version 2, June 1991 (in the distribution as file licence.html,
    8    *  and also available at http://gate.ac.uk/gate/licence.html).
    9    *
    10   *  Kalina Bontcheva,  03/October/2001
    11   *
    12   *  $Id: UserGroupEditor.java,v 1.13 2001/11/24 17:29:38 kalina Exp $
    13   *
    14   */
    15
    16
    17  package gate.gui;
    18
    19  import javax.swing.*;
    20  import javax.swing.event.*;
    21  import java.awt.*;
    22  import java.awt.event.*;
    23  import java.io.*;
    24  import java.util.*;
    25
    26  import junit.framework.*;
    27
    28  import gate.security.*;
    29  import gate.*;
    30  import gate.util.*;
    31
    32
    33  public class UserGroupEditor extends JComponent {
    34    protected JPanel jPanel1 = new JPanel();
    35    protected JPanel jPanel2 = new JPanel();
    36    protected JList firstList = new JList();
    37    protected JList secondList = new JList();
    38    protected CardLayout cardLayout1 = new CardLayout();
    39    protected JRadioButton displayUsersFirst = new JRadioButton();
    40    protected JRadioButton displayGroupsFirst = new JRadioButton();
    41
    42    protected Session session;
    43    protected AccessController controller;
    44
    45    protected boolean usersFirst = true;
    46    protected JButton exitButton = new JButton();
    47    protected JPopupMenu userMenu = new JPopupMenu();
    48    protected JPopupMenu groupMenu = new JPopupMenu();
    49
    50    public UserGroupEditor(AccessController ac, Session theSession) {
    51      try {
    52        jbInit();
    53      }
    54      catch(Exception e) {
    55        e.printStackTrace();
    56      }
    57
    58      this.session = theSession;
    59      this.controller = ac;
    60
    61      showUsersFirst();
    62
    63    }
    64
    65    public static void main(String[] args) throws Exception {
    66      Gate.init();
    67
    68      JFrame frame = new JFrame();
    69
    70      java.util.List dbPaths = new ArrayList();
    71      DataStoreRegister reg = Gate.getDataStoreRegister();
    72      Iterator keyIter = reg.getConfigData().keySet().iterator();
    73      while (keyIter.hasNext()) {
    74        String keyName = (String) keyIter.next();
    75        if (keyName.startsWith("url"))
    76          dbPaths.add(reg.getConfigData().get(keyName));
    77      }
    78      if (dbPaths.isEmpty())
    79        throw new
    80          GateRuntimeException("Oracle URL not configured in gate.xml");
    81      //by default make it the first
    82      String storageURL = (String)dbPaths.get(0);
    83      if (dbPaths.size() > 1) {
    84        Object[] paths = dbPaths.toArray();
    85        Object answer = JOptionPane.showInputDialog(
    86                            frame,
    87                            "Select a database",
    88                            "Gate", JOptionPane.QUESTION_MESSAGE,
    89                            null, paths,
    90                            paths[0]);
    91        if (answer != null)
    92          storageURL = (String) answer;
    93        else
    94          return;
    95      }
    96
    97  //    AccessController ac = new AccessControllerImpl(urlString);
    98      AccessController ac = Factory.createAccessController(storageURL);
    99      Assert.assertNotNull(ac);
    100     ac.open();
    101
    102     Session mySession = null;
    103
    104     try {
    105       mySession = login(ac, frame.getContentPane());
    106     } catch (gate.security.SecurityException ex) {
    107         JOptionPane.showMessageDialog(
    108           frame,
    109           "To use this tool you must login as a user "
    110             + "with administrative rights!",
    111           "Login error",
    112           JOptionPane.ERROR_MESSAGE
    113           );
    114       ac.close();
    115       System.exit(-1);
    116     }
    117
    118     if (! ac.isValidSession(mySession)){
    119       JOptionPane.showMessageDialog(
    120         frame,
    121         "Incorrect session obtained. "
    122           + "Probably there is a problem with the database!",
    123         "Login error",
    124         JOptionPane.ERROR_MESSAGE
    125         );
    126       ac.close();
    127       System.exit(-1);
    128     }
    129
    130     if (!mySession.isPrivilegedSession()) {
    131         JOptionPane.showMessageDialog(
    132           frame,
    133           "Insufficient priviliges to edit/view groups and users!",
    134           "Login error",
    135           JOptionPane.ERROR_MESSAGE
    136           );
    137       ac.close();
    138       System.exit(-1);
    139     }
    140
    141     //INITIALISE THE FRAME, ETC.
    142     frame.setEnabled(true);
    143     frame.setTitle("GATE User/Group Administration Tool");
    144     frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    145
    146
    147     UserGroupEditor userGroupEditor1 = new UserGroupEditor(ac, mySession);
    148
    149     //Put the bean in a scroll pane.
    150     frame.getContentPane().add(userGroupEditor1, BorderLayout.CENTER);
    151
    152     //DISPLAY FRAME
    153     frame.pack();
    154     frame.setSize(800, 600);
    155     frame.show();
    156
    157   }
    158
    159   public static Session login(AccessController ac, Component parent)
    160                           throws  gate.persist.PersistenceException,
    161                                   gate.security.SecurityException {
    162     String userName = "";
    163     String userPass = "";
    164     String group = "";
    165
    166     JPanel listPanel = new JPanel();
    167     listPanel.setLayout(new BoxLayout(listPanel,BoxLayout.X_AXIS));
    168
    169     JPanel panel1 = new JPanel();
    170     panel1.setLayout(new BoxLayout(panel1,BoxLayout.Y_AXIS));
    171     panel1.add(new JLabel("User name: "));
    172     panel1.add(new JLabel("Password: "));
    173     panel1.add(new JLabel("Group: "));
    174
    175     JPanel panel2 = new JPanel();
    176     panel2.setLayout(new BoxLayout(panel2,BoxLayout.Y_AXIS));
    177     JTextField usrField = new JTextField(30);
    178     panel2.add(usrField);
    179     JPasswordField pwdField = new JPasswordField(30);
    180     panel2.add(pwdField);
    181     JTextField grpField = new JTextField(30);
    182     panel2.add(grpField);
    183
    184     listPanel.add(panel1);
    185     listPanel.add(Box.createHorizontalStrut(20));
    186     listPanel.add(panel2);
    187
    188     if(OkCancelDialog.showDialog( parent,
    189                                   listPanel,
    190                                   "Please enter login details")){
    191       userName = usrField.getText();
    192       userPass = new String(pwdField.getPassword());
    193       group = grpField.getText();
    194       if (userName.equals("") || userPass.equals("") || group.equals("")) {
    195         JOptionPane.showMessageDialog(
    196           parent,
    197           "You must provide non-empty user name, password and group!",
    198           "Login error",
    199           JOptionPane.ERROR_MESSAGE
    200           );
    201         System.exit(-1);
    202       }
    203     }
    204
    205     return ac.login(userName, userPass, ac.findGroup(group).getID());
    206   }
    207
    208
    209   private void jbInit() throws Exception {
    210     this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
    211 //    jPanel2.setLayout(new BorderLayout(40, 40));
    212     jPanel2.setLayout(new BoxLayout(jPanel2,BoxLayout.X_AXIS));
    213
    214
    215 //    jPanel1.setSize(800, 100);
    216 //    jPanel2.setSize(800, 500);
    217
    218     displayUsersFirst.setText("Show all users");
    219     displayUsersFirst.setToolTipText("");
    220     displayUsersFirst.setActionCommand("usersFirst");
    221     displayUsersFirst.setSelected(true);
    222     displayUsersFirst.addItemListener(new java.awt.event.ItemListener() {
    223       public void itemStateChanged(ItemEvent e) {
    224         displayUsersFirst_itemStateChanged(e);
    225       }
    226     });
    227     displayGroupsFirst.setText("Show all groups");
    228     displayGroupsFirst.setActionCommand("groupsFirst");
    229
    230     this.add(jPanel1, null);
    231     ButtonGroup group = new ButtonGroup();
    232     group.add(displayUsersFirst);
    233     group.add(displayGroupsFirst);
    234     this.add(jPanel1);
    235     jPanel1.add(displayUsersFirst);
    236     jPanel1.add(Box.createHorizontalStrut(50));
    237     jPanel1.add(displayGroupsFirst);
    238
    239     this.add(jPanel2, null);
    240     jPanel2.add(new JScrollPane(firstList), BorderLayout.WEST);
    241     jPanel2.add(Box.createHorizontalStrut(50));
    242     jPanel2.add(new JScrollPane(secondList), BorderLayout.EAST);
    243     firstList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    244     firstList.setModel(new DefaultListModel());
    245     firstList.addMouseListener(new MouseAdapter() {
    246       public void mouseClicked(MouseEvent e) {
    247         listRightMouseClick(e);
    248       }//mouse clicked
    249     });
    250     firstList.getSelectionModel().addListSelectionListener(
    251       new ListSelectionListener() {
    252         public void valueChanged(ListSelectionEvent e) {
    253           firstListItemSelected(e);
    254         }//
    255       }//the selection listener
    256     );
    257     secondList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    258     secondList.setModel(new DefaultListModel());
    259     secondList.addMouseListener(new MouseAdapter() {
    260       public void mouseClicked(MouseEvent e) {
    261         listRightMouseClick(e);
    262       }//mouse clicked
    263     });
    264
    265     this.add(Box.createVerticalGlue());
    266
    267     this.add(exitButton);
    268     exitButton.setText("Exit");
    269     exitButton.addActionListener(new ActionListener() {
    270       public void actionPerformed(ActionEvent e) {
    271         try {
    272           controller.close();
    273         } catch (gate.persist.PersistenceException ex) {
    274           Out.prln(ex.getMessage());
    275         }
    276         System.exit(0);
    277       } //actionPerformed
    278     });
    279     this.add(Box.createVerticalStrut(50));
    280
    281   }
    282
    283   private void showUsersFirst() {
    284     DefaultListModel firstListData = (DefaultListModel) firstList.getModel();
    285     DefaultListModel secondListData = (DefaultListModel) secondList.getModel();
    286     firstListData.clear();
    287     secondListData.clear();
    288
    289     readUsers(firstListData, firstList);
    290   }
    291
    292   private void readUsers(DefaultListModel listModel, JList list) {
    293     //get the names of all users
    294     try {
    295       java.util.List users = controller.listUsers();
    296       for (int i = 0; i < users.size(); i++)
    297         listModel.addElement(users.get(i));
    298       list.setModel(listModel);
    299     } catch (gate.persist.PersistenceException ex) {
    300       throw new gate.util.GateRuntimeException("Cannot read users!");
    301     }
    302
    303   }//readUsers
    304
    305   private void showGroupsFirst() {
    306     DefaultListModel firstListData = (DefaultListModel) firstList.getModel();
    307     DefaultListModel secondListData = (DefaultListModel) secondList.getModel();
    308     firstListData.clear();
    309     secondListData.clear();
    310
    311     readGroups(firstListData, firstList);
    312   }
    313
    314   private void readGroups(DefaultListModel listModel, JList list) {
    315     //get the names of all groups
    316     try {
    317       java.util.List groups = controller.listGroups();
    318       for (int i = 0; i < groups.size(); i++)
    319         listModel.addElement(groups.get(i));
    320       list.setModel(listModel);
    321     } catch (gate.persist.PersistenceException ex) {
    322       throw new gate.util.GateRuntimeException("Cannot read groups!");
    323     }
    324
    325   }//readGroups
    326
    327   void displayUsersFirst_itemStateChanged(ItemEvent e) {
    328     if (e.getStateChange() == e.DESELECTED) {
    329       if (!usersFirst)
    330         return;
    331       displayGroupsFirst.setSelected(true);
    332       if (usersFirst)  //if it used to be users first, we need to change
    333         showGroupsFirst();
    334       usersFirst = false;
    335     } else {
    336       if (usersFirst)
    337         return;
    338       displayGroupsFirst.setSelected(false);
    339       if (! usersFirst)
    340         showUsersFirst();
    341       usersFirst = true;
    342     }
    343   } //display users first (de-)selected
    344
    345   void listRightMouseClick(MouseEvent e) {
    346         //if it's not a right click, then return
    347         //coz we're not interested
    348         if (! SwingUtilities.isRightMouseButton(e))
    349           return;
    350
    351         JList theList = (JList) e.getSource();
    352         //check if we have a selection and if not, try to force it
    353         if (theList.getSelectedIndex() == -1) {
    354           int index = theList.locationToIndex(e.getPoint());
    355           if (index == -1)
    356             return;
    357           else
    358             theList.setSelectedIndex(index);
    359         } else
    360             //if the right click is outside the currently selected item return
    361             if ( theList.locationToIndex(e.getPoint())
    362                  !=  theList.getSelectedIndex())
    363               return;
    364
    365
    366         if (theList.equals(firstList)) {
    367           if (usersFirst)
    368             showUsersMenu(theList,
    369                           (int) e.getPoint().getX(),
    370                           (int) e.getPoint().getY());
    371           else
    372             showGroupsMenu(theList,
    373                           (int) e.getPoint().getX(),
    374                           (int) e.getPoint().getY());
    375
    376         } else {
    377           if (usersFirst)
    378             showGroupsMenu(theList,
    379                           (int) e.getPoint().getX(),
    380                           (int) e.getPoint().getY());
    381           else
    382             showUsersMenu(theList,
    383                           (int) e.getPoint().getX(),
    384                           (int) e.getPoint().getY());
    385
    386         }
    387
    388   }
    389
    390   private void showUsersMenu(JList source, int x, int y) {
    391     //create the menu items first
    392     userMenu.removeAll();
    393     userMenu.add(new CreateUserAction(source));
    394     userMenu.add(new DeleteUserAction(source));
    395     userMenu.addSeparator();
    396     userMenu.add(new Add2GroupAction(source));
    397     userMenu.add(new RemoveFromGroupAction(source));
    398     userMenu.addSeparator();
    399     userMenu.add(new ChangePasswordAction(source));
    400     userMenu.add(new RenameUserAction(source));
    401
    402     userMenu.show(source, x, y);
    403
    404   }//create and show the menu for user manipulation
    405
    406   private void showGroupsMenu(JList source, int x, int y) {
    407     //create the menu items first
    408     groupMenu.removeAll();
    409     groupMenu.add(new AddGroupAction(source));
    410     groupMenu.add(new DeleteGroupAction(source));
    411     groupMenu.addSeparator();
    412     groupMenu.add(new AddUserAction(source));
    413     groupMenu.add(new RemoveUserAction(source));
    414     groupMenu.addSeparator();
    415     groupMenu.add(new RenameGroupAction(source));
    416
    417     groupMenu.show(source, x, y);
    418
    419   }
    420
    421   //called when the selection changes in the first list
    422   void firstListItemSelected(ListSelectionEvent e) {
    423     int i = firstList.getSelectedIndex();
    424     String name = (String) firstList.getModel().getElementAt(i);
    425
    426     if (usersFirst)
    427       showGroupsForUser(name);
    428     else
    429       showUsersForGroup(name);
    430   } //firstListItemSelected
    431
    432   protected void showGroupsForUser(String name) {
    433     User user = null;
    434     try {
    435       user = controller.findUser(name);
    436     } catch (gate.persist.PersistenceException ex) {
    437       throw new gate.util.GateRuntimeException(
    438                   "Cannot locate the user with name: " + name
    439                 );
    440     } catch (gate.security.SecurityException ex1) {
    441       throw new gate.util.GateRuntimeException(
    442                   ex1.getMessage()
    443                 );
    444     }
    445     if (user == null)
    446       return;
    447     java.util.List myGroups = user.getGroups();
    448     if (myGroups == null)
    449       return;
    450
    451       DefaultListModel secondListData = new DefaultListModel();
    452
    453       for (int j = 0; j< myGroups.size(); j++) {
    454         try {
    455           Group myGroup = //controller.findGroup((Long) myGroups.get(j));
    456             (Group)myGroups.get(j);
    457           secondListData.addElement(myGroup.getName());
    458         } catch (Exception ex) {
    459           throw new gate.util.GateRuntimeException(
    460                   ex.getMessage()
    461                 );
    462         }//catch
    463       }//for loop
    464       secondList.setModel(secondListData);
    465
    466   }//showGroupsForUser
    467
    468
    469   protected void showUsersForGroup(String name) {
    470     Group group = null;
    471     try {
    472       group = controller.findGroup(name);
    473     } catch (gate.persist.PersistenceException ex) {
    474       throw new gate.util.GateRuntimeException(
    475                   "Cannot locate the group with name: " + name
    476                 );
    477     } catch (gate.security.SecurityException ex1) {
    478       throw new gate.util.GateRuntimeException(
    479                   ex1.getMessage()
    480                 );
    481     }
    482     if (group == null)
    483       return;
    484     java.util.List myUsers = group.getUsers();
    485     if (myUsers == null)
    486       return;
    487
    488       DefaultListModel secondListData = new DefaultListModel();
    489
    490       for (int j = 0; j< myUsers.size(); j++) {
    491         try {
    492           User myUser = //controller.findUser((Long) myUsers.get(j));
    493             (User)myUsers.get(j);
    494           secondListData.addElement(myUser.getName());
    495         } catch (Exception ex) {
    496           throw new gate.util.GateRuntimeException(
    497                   ex.getMessage()
    498                 );
    499         }//catch
    500       }//for loop
    501       secondList.setModel(secondListData);
    502
    503   }//showGroupsForUser
    504
    505
    506   protected class CreateUserAction extends AbstractAction{
    507     private JList source;
    508
    509     public CreateUserAction(JList source){
    510       super("Create new user");
    511       this.source = source;
    512     }
    513
    514     public void actionPerformed(ActionEvent e){
    515       String userName= "", userPass = "";
    516
    517       UserPasswordDialog pwdDlg = new UserPasswordDialog();
    518       boolean isOK = pwdDlg.showPasswordDialog(
    519                         "Please enter user name and password",
    520                         UserGroupEditor.this
    521                         );
    522
    523       if (! isOK)
    524         return;
    525
    526       try {
    527         controller.createUser(pwdDlg.getUserName(),
    528                               pwdDlg.getPassword(),
    529                               session);
    530       } catch (gate.persist.PersistenceException ex) {
    531         throw new gate.util.GateRuntimeException(ex.getMessage());
    532       } catch (gate.security.SecurityException ex1) {
    533         throw new gate.util.GateRuntimeException(ex1.getMessage());
    534       }
    535       DefaultListModel model = (DefaultListModel) source.getModel();
    536       model.clear();
    537       readUsers(model, source);
    538     }//public void actionPerformed(ActionEvent e)
    539   } //CreateUserAction
    540
    541   protected class DeleteUserAction extends AbstractAction{
    542     private JList source;
    543
    544     public DeleteUserAction(JList source){
    545       super("Delete user");
    546       this.source = source;
    547     }
    548
    549     public void actionPerformed(ActionEvent e){
    550       //first get the index of the selection
    551       int index = source.getSelectedIndex();
    552       if (index == -1) //return if no selection
    553         return;
    554       DefaultListModel model = (DefaultListModel) source.getModel();
    555       try {
    556       User user = controller.findUser((String) model.get(index) );
    557       controller.deleteUser(user, session);
    558       model.remove(index);
    559       } catch (gate.persist.PersistenceException ex) {
    560         throw new gate.util.GateRuntimeException(ex.getMessage());
    561       } catch (gate.security.SecurityException ex1) {
    562         throw new gate.util.GateRuntimeException(ex1.getMessage());
    563       }
    564     }//public void actionPerformed(ActionEvent e)
    565   } //DeleteUserAction
    566
    567   protected class Add2GroupAction extends AbstractAction{
    568     private JList source;
    569
    570     public Add2GroupAction(JList source){
    571       super("Add to group");
    572       this.source = source;
    573     }
    574
    575     public void actionPerformed(ActionEvent e){
    576       int index = source.getSelectedIndex();
    577       if (index == -1) //return if no selection
    578         return;
    579       DefaultListModel model = (DefaultListModel) source.getModel();
    580
    581       JList groupList = new JList();
    582       groupList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    583
    584       DefaultListModel grListModel = new DefaultListModel();
    585       readGroups( grListModel, groupList);
    586       if(OkCancelDialog.showDialog( UserGroupEditor.this,
    587                                     new JScrollPane(groupList),
    588                                     "Choose a new group")){
    589         String groupName = (String) groupList.getSelectedValue();
    590
    591         try {
    592           User user = controller.findUser((String) model.get(index) );
    593           Group group = controller.findGroup(groupName);
    594           group.addUser(user, session);
    595
    596           //finally update the original lists
    597           if (usersFirst)
    598             showGroupsForUser(user.getName());
    599         } catch (gate.persist.PersistenceException ex) {
    600           throw new gate.util.GateRuntimeException(ex.getMessage());
    601         } catch (gate.security.SecurityException ex1) {
    602           JOptionPane.showMessageDialog(UserGroupEditor.this,
    603                                         ex1.getMessage(),
    604                                         "Error adding user to group!",
    605                                         JOptionPane.ERROR_MESSAGE
    606                                        );
    607
    608         }
    609
    610       } //ok selected
    611
    612
    613     }//public void actionPerformed(ActionEvent e)
    614   } //Add2GroupAction
    615
    616   protected class RemoveFromGroupAction extends AbstractAction{
    617     private JList source;
    618
    619     public RemoveFromGroupAction(JList source){
    620       super("Remove from group");
    621       this.source = source;
    622     }//
    623
    624     public void actionPerformed(ActionEvent e){
    625       int index = source.getSelectedIndex();
    626       if (index == -1) //return if no selection
    627         return;
    628       DefaultListModel model = (DefaultListModel) source.getModel();
    629
    630       JList groupList = new JList();
    631       groupList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    632
    633       DefaultListModel grListModel = new DefaultListModel();
    634       readGroups( grListModel, groupList);
    635       if(OkCancelDialog.showDialog(
    636                           UserGroupEditor.this,
    637                           new JScrollPane(groupList),
    638                           "Choose the group from which to remove the user")
    639         ){
    640
    641         String groupName = (String) groupList.getSelectedValue();
    642
    643         try {
    644           User user = controller.findUser((String) model.get(index) );
    645           Group group = controller.findGroup(groupName);
    646           group.removeUser(user, session);
    647
    648           //finally update the original lists
    649           if (usersFirst)
    650             showGroupsForUser(user.getName());
    651         } catch (gate.persist.PersistenceException ex) {
    652           throw new gate.util.GateRuntimeException(ex.getMessage());
    653         } catch (gate.security.SecurityException ex1) {
    654           JOptionPane.showMessageDialog(UserGroupEditor.this,
    655                                         ex1.getMessage(),
    656                                         "Error removing user from group!",
    657                                         JOptionPane.ERROR_MESSAGE
    658                                        );
    659
    660         }
    661
    662       } //ok selected
    663
    664     }//public void actionPerformed(ActionEvent e)
    665   } //RemoveFromGroupAction
    666
    667
    668   protected class ChangePasswordAction extends AbstractAction{
    669     private JList source;
    670
    671     public ChangePasswordAction(JList source){
    672       super("Change password");
    673       this.source = source;
    674     }//
    675
    676     public void actionPerformed(ActionEvent e){
    677       int index = source.getSelectedIndex();
    678       if (index == -1) //return if no selection
    679         return;
    680       DefaultListModel model = (DefaultListModel) source.getModel();
    681
    682       JPanel listPanel = new JPanel();
    683       listPanel.setLayout(new BoxLayout(listPanel,BoxLayout.X_AXIS));
    684
    685       JPanel panel1 = new JPanel();
    686       panel1.setLayout(new BoxLayout(panel1,BoxLayout.Y_AXIS));
    687       panel1.add(new JLabel("Please enter new password: "));
    688       panel1.add(new JLabel("Please re-enter new password: "));
    689
    690
    691       JPanel panel2 = new JPanel();
    692       panel2.setLayout(new BoxLayout(panel2,BoxLayout.Y_AXIS));
    693       JPasswordField pwd1 = new JPasswordField(30);
    694       panel2.add(pwd1);
    695       JPasswordField pwd2 = new JPasswordField(30);
    696       panel2.add(pwd2);
    697
    698       listPanel.add(panel1);
    699       listPanel.add(Box.createHorizontalStrut(20));
    700       listPanel.add(panel2);
    701
    702       if(OkCancelDialog.showDialog( UserGroupEditor.this,
    703                                     listPanel,
    704                                     "Choose a new password")){
    705         String pass1 = new String(pwd1.getPassword());
    706         String pass2 = new String(pwd2.getPassword());
    707         if (!pass1.equals(pass2)) {
    708           JOptionPane.showMessageDialog(
    709                         UserGroupEditor.this,
    710                         "Cannot change password because you entered "
    711                           + "two different values for new password",
    712                         "Error changing user password!",
    713                         JOptionPane.ERROR_MESSAGE
    714                         );
    715
    716           return;
    717         }
    718
    719
    720         try {
    721           User user = controller.findUser((String) model.get(index) );
    722           user.setPassword(pass1, session);
    723
    724         } catch (gate.persist.PersistenceException ex) {
    725           throw new gate.util.GateRuntimeException(ex.getMessage());
    726         } catch (gate.security.SecurityException ex1) {
    727           JOptionPane.showMessageDialog(UserGroupEditor.this,
    728                                         ex1.getMessage(),
    729                                         "Error adding user to group!",
    730                                         JOptionPane.ERROR_MESSAGE
    731                                        );
    732
    733         }
    734
    735       } //ok selected
    736
    737     }//public void actionPerformed(ActionEvent e)
    738   } //ChangePasswordAction
    739
    740
    741   protected class RenameUserAction extends AbstractAction{
    742     private JList source;
    743
    744     public RenameUserAction(JList source){
    745       super("Rename user");
    746       this.source = source;
    747     }//
    748
    749     public void actionPerformed(ActionEvent e){
    750       int index = source.getSelectedIndex();
    751       if (index == -1) //return if no selection
    752         return;
    753
    754       String newName = JOptionPane.showInputDialog(
    755                                      UserGroupEditor.this,
    756                                     "Please enter the user's new name");
    757
    758       //don't change if nothing selected
    759       if (newName == null || newName.equals(""))
    760         return;
    761
    762       DefaultListModel model = (DefaultListModel) source.getModel();
    763
    764       try {
    765         User user = controller.findUser((String) model.get(index) );
    766         user.setName(newName, session);
    767         model.setElementAt(newName, index);
    768
    769         //finally update the original lists
    770         source.setSelectedIndex(index);
    771       } catch (gate.persist.PersistenceException ex) {
    772         throw new gate.util.GateRuntimeException(ex.getMessage());
    773       } catch (gate.security.SecurityException ex1) {
    774         JOptionPane.showMessageDialog(UserGroupEditor.this,
    775                                       ex1.getMessage(),
    776                                       "Error renaming user!",
    777                                       JOptionPane.ERROR_MESSAGE
    778                                      );
    779
    780       }
    781
    782     }//public void actionPerformed(ActionEvent e)
    783   } //RenameUserAction
    784
    785
    786   protected class AddGroupAction extends AbstractAction{
    787     private JList source;
    788
    789     public AddGroupAction(JList source){
    790       super("Create new group");
    791       this.source = source;
    792     }//
    793
    794     public void actionPerformed(ActionEvent e){
    795       int index = source.getSelectedIndex();
    796       if (index == -1) //return if no selection
    797         return;
    798
    799       String groupName = JOptionPane.showInputDialog(
    800                                      UserGroupEditor.this,
    801                                     "Please enter the name of the new group");
    802
    803       //don't change if nothing selected
    804       if (groupName == null || groupName.equals(""))
    805         return;
    806
    807       try {
    808         controller.createGroup(groupName, session);
    809       } catch (gate.persist.PersistenceException ex) {
    810         throw new gate.util.GateRuntimeException(ex.getMessage());
    811       } catch (gate.security.SecurityException ex1) {
    812         throw new gate.util.GateRuntimeException(ex1.getMessage());
    813       }
    814       //only update if we're showing the groups first. Otherwise the groups for
    815       //this user remain the same
    816       if (!usersFirst) {
    817         DefaultListModel model = (DefaultListModel) source.getModel();
    818         model.clear();
    819         readGroups(model, source);
    820       }
    821
    822     }//public void actionPerformed(ActionEvent e)
    823   } //AddGroupAction
    824
    825
    826   protected class DeleteGroupAction extends AbstractAction{
    827     private JList source;
    828
    829     public DeleteGroupAction(JList source){
    830       super("Delete group");
    831       this.source = source;
    832     }//
    833
    834     public void actionPerformed(ActionEvent e){
    835       //first get the index of the selection
    836       int index = source.getSelectedIndex();
    837       if (index == -1) //return if no selection
    838         return;
    839       DefaultListModel model = (DefaultListModel) source.getModel();
    840       try {
    841         Group group = controller.findGroup((String) model.get(index) );
    842         controller.deleteGroup(group, session);
    843         model.remove(index);
    844       } catch (gate.persist.PersistenceException ex) {
    845         throw new gate.util.GateRuntimeException(ex.getMessage());
    846       } catch (gate.security.SecurityException ex1) {
    847         throw new gate.util.GateRuntimeException(ex1.getMessage());
    848       }
    849     }//public void actionPerformed(ActionEvent e)
    850   } //DeleteGroupAction
    851
    852
    853   protected class AddUserAction extends AbstractAction{
    854     private JList source;
    855
    856     public AddUserAction(JList source){
    857       super("Add user");
    858       this.source = source;
    859     }//
    860
    861     public void actionPerformed(ActionEvent e){
    862       int index = source.getSelectedIndex();
    863       if (index == -1) //return if no selection
    864         return;
    865       DefaultListModel model = (DefaultListModel) source.getModel();
    866
    867       JList userList = new JList();
    868       userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    869
    870       DefaultListModel usrListModel = new DefaultListModel();
    871       readUsers( usrListModel, userList);
    872       if(OkCancelDialog.showDialog( UserGroupEditor.this,
    873                                     new JScrollPane(userList),
    874                                     "Choose a user to add")){
    875         String userName = (String) userList.getSelectedValue();
    876
    877         try {
    878           Group group = controller.findGroup((String) model.get(index) );
    879           User user = controller.findUser(userName);
    880           group.addUser(user, session);
    881
    882           //finally update the original lists
    883           if (!usersFirst)
    884             showUsersForGroup(group.getName());
    885         } catch (gate.persist.PersistenceException ex) {
    886           throw new gate.util.GateRuntimeException(ex.getMessage());
    887         } catch (gate.security.SecurityException ex1) {
    888           JOptionPane.showMessageDialog(UserGroupEditor.this,
    889                                         ex1.getMessage(),
    890                                         "Error adding user to group!",
    891                                         JOptionPane.ERROR_MESSAGE
    892                                        );
    893
    894         }
    895
    896       } //ok selected
    897
    898     }//public void actionPerformed(ActionEvent e)
    899   } //AddUserAction
    900
    901
    902   protected class RemoveUserAction extends AbstractAction{
    903     private JList source;
    904
    905     public RemoveUserAction(JList source){
    906       super("Remove user");
    907       this.source = source;
    908     }//
    909
    910     public void actionPerformed(ActionEvent e){
    911       int index = source.getSelectedIndex();
    912       if (index == -1) //return if no selection
    913         return;
    914       DefaultListModel model = (DefaultListModel) source.getModel();
    915       String groupName = (String) source.getSelectedValue();
    916
    917       JList userList = new JList();
    918       userList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    919
    920       DefaultListModel usrListModel = new DefaultListModel();
    921
    922       Group group = null;
    923       try {
    924         group = controller.findGroup(groupName);
    925       } catch (gate.persist.PersistenceException ex) {
    926         throw new gate.util.GateRuntimeException(
    927                     "Cannot locate group: " + groupName
    928                   );
    929       } catch (gate.security.SecurityException ex1) {
    930         throw new gate.util.GateRuntimeException(
    931                     ex1.getMessage()
    932                   );
    933       }
    934       if (group == null)
    935         return;
    936       java.util.List myUsers = group.getUsers();
    937       if (myUsers == null)
    938         return;
    939
    940       for (int j = 0; j< myUsers.size(); j++) {
    941         try {
    942           User myUser = (User)myUsers.get(j);
    943           usrListModel.addElement(myUser.getName());
    944         } catch (Exception ex) {
    945           throw new gate.util.GateRuntimeException(
    946                   ex.getMessage()
    947                 );
    948         }//catch
    949       }//for loop
    950       userList.setModel(usrListModel);
    951
    952       if(OkCancelDialog.showDialog(
    953                           UserGroupEditor.this,
    954                           new JScrollPane(userList),
    955                           "Choose the user you want removed from this group")
    956         ){
    957
    958
    959         try {
    960           User user = controller.findUser((String) userList.getSelectedValue());
    961           group.removeUser(user, session);
    962
    963           //finally update the original lists
    964           if (!usersFirst)
    965             showUsersForGroup(group.getName());
    966           else
    967             showGroupsForUser(user.getName());
    968         } catch (gate.persist.PersistenceException ex) {
    969           throw new gate.util.GateRuntimeException(ex.getMessage());
    970         } catch (gate.security.SecurityException ex1) {
    971           JOptionPane.showMessageDialog(UserGroupEditor.this,
    972                                         ex1.getMessage(),
    973                                         "Error removing user from group!",
    974                                         JOptionPane.ERROR_MESSAGE
    975                                        );
    976
    977         }
    978
    979       } //ok selected
    980
    981     }//public void actionPerformed(ActionEvent e)
    982   } //RemoveUserAction
    983
    984
    985   protected class RenameGroupAction extends AbstractAction{
    986     private JList source;
    987
    988     public RenameGroupAction(JList source){
    989       super("Rename group");
    990       this.source = source;
    991     }//
    992
    993     public void actionPerformed(ActionEvent e){
    994       int index = source.getSelectedIndex();
    995       if (index == -1) //return if no selection
    996         return;
    997       DefaultListModel model = (DefaultListModel) source.getModel();
    998
    999       String newName = JOptionPane.showInputDialog(
    1000                                     UserGroupEditor.this,
    1001                                    "Please enter the user's new name");
    1002
    1003      //don't change if nothing selected
    1004      if (newName == null || newName.equals(""))
    1005        return;
    1006
    1007      try {
    1008        Group group = controller.findGroup((String) model.get(index) );
    1009        group.setName(newName, session);
    1010
    1011        //finally update the original lists
    1012        if (!usersFirst)
    1013          showGroupsFirst();
    1014        else
    1015          showGroupsForUser((String) firstList.getSelectedValue());
    1016      } catch (gate.persist.PersistenceException ex) {
    1017        throw new gate.util.GateRuntimeException(ex.getMessage());
    1018      } catch (gate.security.SecurityException ex1) {
    1019        JOptionPane.showMessageDialog(UserGroupEditor.this,
    1020                                      ex1.getMessage(),
    1021                                      "Error renaming user!",
    1022                                      JOptionPane.ERROR_MESSAGE
    1023                                     );
    1024
    1025      }
    1026    }//public void actionPerformed(ActionEvent e)
    1027  } //RenameGroupAction
    1028
    1029} //UserGroupEditor
    1030
    1031

| UserGroupEditor |