mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jochen Raymaekers
15.54.2013 34a14fab9a9ee17bb87b841306a3eef715d727d8
Cleaned up code and updated interface
2 files modified
612 ■■■■ changed files
opendj3/opendj-virtual/src/test/java/org/forgerock/opendj/virtual/GUI.java 128 ●●●●● patch | view | raw | blame | history
opendj3/opendj-virtual/src/test/java/org/forgerock/opendj/virtual/GUIMap.java 484 ●●●● patch | view | raw | blame | history
opendj3/opendj-virtual/src/test/java/org/forgerock/opendj/virtual/GUI.java
@@ -27,11 +27,14 @@
package org.forgerock.opendj.virtual;
import java.awt.Font;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import org.forgerock.opendj.ldap.Connection;
import org.forgerock.opendj.ldap.ErrorResultException;
@@ -44,9 +47,10 @@
  static JFrame frame = new JFrame("Login Screen");
  
  private JPanel totalGUI;
  private JLabel label, label_1, label_2, label_3, label_4,label_5, label_6, lblBasedn, label_8, label_9;
  private JLabel label, label_1, label_2, label_3, label_4, label_5, label_6, lblBasedn, label_8, label_9, lblDirectory, lblDatabase;
  private JPanel buttonPane;
  private JButton btnLogin, btnCancel;
  private Border loweredetched;
  
  //login pane Normal
  private JPanel loginPane;
@@ -61,129 +65,140 @@
  public JPanel createContentPane (){
    totalGUI = new JPanel();
    totalGUI.setLayout(null);
    loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
    buttonPane = new JPanel();
    buttonPane.setLayout(null);
    buttonPane.setBounds(143, 143, 291, 30);
    buttonPane.setBounds(295, 221, 284, 30);
    totalGUI.add(buttonPane);
    btnLogin = new JButton("Login");
    btnLogin.setBounds(0, 0, 145, 30);
    btnLogin.setBounds(14, 0, 120, 30);
    btnLogin.addActionListener(this);
    buttonPane.add(btnLogin);
    btnCancel = new JButton("Cancel");
    btnCancel.setBounds(145, 1, 147, 29);
    btnCancel.setBounds(148, 0, 120, 30);
    btnCancel.addActionListener(this);
    buttonPane.add(btnCancel);
    loginPane = new JPanel();
    loginPane.setLayout(null);
    loginPane.setBounds(6, 6, 274, 125);
    loginPane.setBounds(6, 6, 285, 203);
    loginPane.setBorder(loweredetched);
    totalGUI.add(loginPane);
    label = new JLabel("Host");
    label.setHorizontalAlignment(SwingConstants.TRAILING);
    label.setBounds(0, 2, 112, 23);
    label.setBounds(11, 43, 99, 30);
    loginPane.add(label);
    txtHost = new JTextField();
    txtHost.setColumns(10);
    txtHost.setBounds(124, 2, 146, 23);
    txtHost.setBounds(114, 43, 165, 30);
    loginPane.add(txtHost);
    label_1 = new JLabel("Port");
    label_1.setHorizontalAlignment(SwingConstants.TRAILING);
    label_1.setBounds(0, 25, 112, 23);
    label_1.setBounds(11, 74, 99, 30);
    loginPane.add(label_1);
    txtPort = new JTextField();
    txtPort.setColumns(10);
    txtPort.setBounds(124, 25, 146, 23);
    txtPort.setBounds(114, 73, 165, 30);
    loginPane.add(txtPort);
    label_2 = new JLabel("DatabaseName");
    label_2.setHorizontalAlignment(SwingConstants.TRAILING);
    label_2.setBounds(0, 48, 112, 23);
    label_2.setBounds(11, 104, 99, 30);
    loginPane.add(label_2);
    txtDatabaseName = new JTextField();
    txtDatabaseName.setColumns(10);
    txtDatabaseName.setBounds(124, 48, 146, 23);
    txtDatabaseName.setBounds(114, 103, 165, 30);
    loginPane.add(txtDatabaseName);
    label_3 = new JLabel("Username");
    label_3.setHorizontalAlignment(SwingConstants.TRAILING);
    label_3.setBounds(0, 71, 112, 23);
    label_3.setBounds(11, 135, 99, 30);
    loginPane.add(label_3);
    txtUsername = new JTextField();
    txtUsername.setColumns(10);
    txtUsername.setBounds(124, 71, 146, 23);
    txtUsername.setBounds(114, 133, 165, 30);
    loginPane.add(txtUsername);
    label_4 = new JLabel("Password");
    label_4.setHorizontalAlignment(SwingConstants.TRAILING);
    label_4.setBounds(0, 94, 112, 23);
    label_4.setBounds(11, 166, 99, 30);
    loginPane.add(label_4);
    txtPassword = new JPasswordField();
    txtPassword.setBounds(124, 94, 146, 23);
    txtPassword.setBounds(114, 163, 165, 30);
    loginPane.add(txtPassword);
    loginPaneLdap = new JPanel();
    loginPaneLdap.setLayout(null);
    loginPaneLdap.setBounds(292, 6, 274, 125);
    loginPaneLdap.setBounds(295, 6, 285, 203);
    loginPaneLdap.setBorder(loweredetched);
    totalGUI.add(loginPaneLdap);
    label_5 = new JLabel("Host");
    label_5.setHorizontalAlignment(SwingConstants.TRAILING);
    label_5.setBounds(0, 2, 112, 23);
    label_5.setHorizontalAlignment(SwingConstants.LEFT);
    label_5.setBounds(11, 43, 90, 30);
    loginPaneLdap.add(label_5);
    txtHostLdap = new JTextField();
    txtHostLdap.setColumns(10);
    txtHostLdap.setBounds(124, 2, 146, 23);
    txtHostLdap.setBounds(114, 43, 165, 30);
    loginPaneLdap.add(txtHostLdap);
    label_6 = new JLabel("Port");
    label_6.setHorizontalAlignment(SwingConstants.TRAILING);
    label_6.setBounds(0, 25, 112, 23);
    label_6.setHorizontalAlignment(SwingConstants.LEFT);
    label_6.setBounds(11, 74, 90, 30);
    loginPaneLdap.add(label_6);
    txtPortLdap = new JTextField();
    txtPortLdap.setColumns(10);
    txtPortLdap.setBounds(124, 25, 146, 23);
    txtPortLdap.setBounds(114, 73, 165, 30);
    loginPaneLdap.add(txtPortLdap);
    lblBasedn = new JLabel("BaseDN");
    lblBasedn.setHorizontalAlignment(SwingConstants.TRAILING);
    lblBasedn.setBounds(0, 48, 112, 23);
    lblBasedn.setHorizontalAlignment(SwingConstants.LEFT);
    lblBasedn.setBounds(11, 104, 90, 30);
    loginPaneLdap.add(lblBasedn);
    txtBaseDN = new JTextField();
    txtBaseDN.setColumns(10);
    txtBaseDN.setBounds(124, 48, 146, 23);
    txtBaseDN.setBounds(114, 103, 165, 30);
    loginPaneLdap.add(txtBaseDN);
    label_8 = new JLabel("Username");
    label_8.setHorizontalAlignment(SwingConstants.TRAILING);
    label_8.setBounds(0, 71, 112, 23);
    label_8.setHorizontalAlignment(SwingConstants.LEFT);
    label_8.setBounds(11, 135, 90, 30);
    loginPaneLdap.add(label_8);
    txtUsernameLdap = new JTextField();
    txtUsernameLdap.setColumns(10);
    txtUsernameLdap.setBounds(124, 71, 146, 23);
    txtUsernameLdap.setBounds(114, 133, 165, 30);
    loginPaneLdap.add(txtUsernameLdap);
    label_9 = new JLabel("Password");
    label_9.setHorizontalAlignment(SwingConstants.TRAILING);
    label_9.setBounds(0, 94, 112, 23);
    label_9.setHorizontalAlignment(SwingConstants.LEFT);
    label_9.setBounds(11, 166, 90, 30);
    loginPaneLdap.add(label_9);
    txtPasswordLdap = new JPasswordField();
    txtPasswordLdap.setBounds(124, 94, 146, 23);
    txtPasswordLdap.setBounds(114, 163, 165, 30);
    loginPaneLdap.add(txtPasswordLdap);
    lblDatabase = new JLabel("Database");
    lblDatabase.setHorizontalAlignment(SwingConstants.CENTER);
    lblDatabase.setFont(lblDatabase.getFont().deriveFont(lblDatabase.getFont().getStyle() | Font.BOLD, lblDatabase.getFont().getSize() + 2f));
    lblDatabase.setBounds(1, 6, 270, 16);
    loginPane.add(lblDatabase);
    lblDirectory = new JLabel("Directory");
    lblDirectory.setHorizontalAlignment(SwingConstants.CENTER);
    lblDirectory.setFont(lblDirectory.getFont().deriveFont(lblDirectory.getFont().getStyle() | Font.BOLD, lblDirectory.getFont().getSize() + 2f));
    lblDirectory.setBounds(1, 6, 270, 16);
    loginPaneLdap.add(lblDirectory);
    txtHost.setText("localhost");
    txtPort.setText("3306");
@@ -239,26 +254,26 @@
            
            JDBC = new JDBCConnectionFactory(aHost, intaPort, aDatabase);
            final Connection jdbcconnection = JDBC.getConnection(); 
            jdbcconnection.bind(aUsername, txtPassword.getPassword());
            LDAP = new LDAPConnectionFactory(lHost, intlPort);
            final Connection ldapconnection = LDAP.getConnection();
            ldapconnection.bind(lUsername, txtPasswordLdap.getPassword());
                    jdbcconnection.bind(aUsername, txtPassword.getPassword());
                    LDAP = new LDAPConnectionFactory(lHost, intlPort);
                final Connection ldapconnection = LDAP.getConnection();
                ldapconnection.bind(lUsername, txtPasswordLdap.getPassword());
            //TODO aanpassen connection failed
            frame.dispose();
            new GUIMap(JDBC, LDAP);
          } catch (NumberFormatException ex){
            JOptionPane.showMessageDialog(frame, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
          } catch (ErrorResultException e1) {
            e1.printStackTrace();
        } catch (ErrorResultIOException e1) {
            e1.printStackTrace();
        } catch (SearchResultReferenceIOException e1) {
            e1.printStackTrace();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
                        e1.printStackTrace();
                } catch (ErrorResultIOException e1) {
                        e1.printStackTrace();
                } catch (SearchResultReferenceIOException e1) {
                        e1.printStackTrace();
                } catch (SQLException e1) {
                        e1.printStackTrace();
                }
        }
      }
      catch (IllegalArgumentException x)   {   // catch the error
@@ -278,21 +293,24 @@
        //System.out.println(info.getName());
        if ("Nimbus".equals(info.getName())) {
          UIManager.setLookAndFeel(info.getClassName());
          //System.out.println("Used = " + info.getName());
          break;
        }
       } else {
         UIManager.setLookAndFeel(info.getClassName());
         }
      }
    } catch (Exception e) {
      // If Nimbus is not available, you can set the GUI to another look and feel.
      //System.out.println(e.toString());
    }
    //Create and set up the content pane.
    GUI gui = new GUI();
    frame.setContentPane(gui.createContentPane());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 225);
    frame.setSize(585, 281);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setResizable(false);  
    frame.setEnabled(true);
    frame.setLocationRelativeTo(null);
  }
  public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
opendj3/opendj-virtual/src/test/java/org/forgerock/opendj/virtual/GUIMap.java
@@ -25,8 +25,6 @@
 *      Portions copyright 2011 ForgeRock AS
 */
package org.forgerock.opendj.virtual;
import java.awt.event.*;
@@ -34,6 +32,8 @@
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.table.*;
import org.forgerock.opendj.ldap.ErrorResultException;
@@ -48,40 +48,40 @@
@SuppressWarnings("serial")
class MyTable extends AbstractTableModel {
    public MyTable(){}
      private String[] columnNames = {"Columns",
        "Attributes"
      };
      public Object[][] data = {};
      public int getColumnCount() {
        return columnNames.length;
      }
      public int getRowCount() {
        return data.length;
      }
      public String getColumnName(int col) {
        return columnNames[col];
      }
      public Object getValueAt(int row, int col) {
        return data[row][col];
      }
      public boolean isCellEditable(int row, int col) {
        if (col == 1) {
          return true;
        } else {
          return false;
        }
      }
      public void setValueAt(Object value, int row, int col) {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
      }
  public MyTable(){}
  private String[] columnNames = {"Columns",
    "Attributes"
  };
  public Object[][] data = {};
  public int getColumnCount() {
    return columnNames.length;
  }
  public int getRowCount() {
    return data.length;
  }
  public String getColumnName(int col) {
    return columnNames[col];
  }
  public Object getValueAt(int row, int col) {
    return data[row][col];
  }
  public boolean isCellEditable(int row, int col) {
    if (col == 1) {
      return true;
    } else {
      return false;
    }
  }
  public void setValueAt(Object value, int row, int col) {
    data[row][col] = value;
    fireTableCellUpdated(row, col);
  }
}
@SuppressWarnings("serial")
@@ -91,7 +91,7 @@
  private JPanel totalGUI, inputPane, dataPane,btnPane;
  private JComboBox<Object> tableList, directoryOUList;
  private JButton btnSetMap, btnResetMap, btnSave, btnQuitConnection;
  private JLabel lblDatabaseTables, lblSelectOu;
  private JLabel lblDatabaseTables, lblSelectOu, lblEditDataSource;
  private JDBCMapper JDBCM;
  private JTable table; 
  private JScrollPane scrollPane;
@@ -99,232 +99,228 @@
  static DefaultTableModel model;
  static String[] tableNameList;
  static String[] OUNameList;
  private Border loweredetched;
  public GUIMap(JDBCConnectionFactory jdbc, LDAPConnectionFactory ldap) throws ErrorResultException, ErrorResultIOException, SearchResultReferenceIOException, SQLException
  {
    JDBCM = new JDBCMapper(jdbc.getConnection(), ldap.getConnection());
    JDBCM.fillMaps();
    List<String> tableStringList = JDBCM.getTables();
    List<String> OUStringList = JDBCM.getOrganizationalUnits();
    tableNameList = new String[tableStringList.size()];
    OUNameList = new String[OUStringList.size()];
    mcm = new MappingConfigurationManager(JDBCM);
    JDBCM.loadMappingConfig(mcm.loadMapping());
    for (int i = 0; i < tableStringList.size(); i++){
        tableNameList[i] = tableStringList.get(i);
    }
    for (int i = 0; i < OUStringList.size(); i++){
        OUNameList[i] = OUStringList.get(i);
    }
    try{
      //JFrame.setDefaultLookAndFeelDecorated(true);
      for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        //System.out.println(info.getName());
        if ("Nimbus".equals(info.getName())) {
          UIManager.setLookAndFeel(info.getClassName());
          break;
        }
      }
    } catch (Exception e) {
      // If Nimbus is not available, you can set the GUI to another look and feel.
    JDBCM = new JDBCMapper(jdbc.getConnection(), ldap.getConnection());
    JDBCM.fillMaps();
    List<String> tableStringList = JDBCM.getTables();
    List<String> OUStringList = JDBCM.getOrganizationalUnits();
    tableNameList = new String[tableStringList.size()];
    OUNameList = new String[OUStringList.size()];
    mcm = new MappingConfigurationManager(JDBCM);
    JDBCM.loadMappingConfig(mcm.loadMapping());
    for (int i = 0; i < tableStringList.size(); i++){
      tableNameList[i] = tableStringList.get(i);
    }
    for (int i = 0; i < OUStringList.size(); i++){
      OUNameList[i] = OUStringList.get(i);
    }
    frame.setResizable(false);
    frame.setContentPane(createContentPane());    
    frame.setEnabled(true);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setSize(523, 487);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(524, 513);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true); 
}
  }
  /**
   * @return
 * @throws SQLException
   * @throws SQLException
   */
  public JPanel createContentPane () throws SQLException{
    totalGUI = new JPanel();
    totalGUI.setLayout(null);
   public JPanel createContentPane () throws SQLException{
     totalGUI = new JPanel();
     totalGUI.setLayout(null);
     loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
    inputPane = new JPanel();
    inputPane.setBounds(6, 5, 507, 61);
    totalGUI.add(inputPane);
    inputPane.setLayout(null);
     lblEditDataSource = new JLabel("Edit data source");
     lblEditDataSource.setFont(lblEditDataSource.getFont().deriveFont(lblEditDataSource.getFont().getStyle() | Font.BOLD, lblEditDataSource.getFont().getSize() + 2f));
     lblEditDataSource.setBounds(16, 6, 134, 16);
     totalGUI.add(lblEditDataSource);
    tableList = new JComboBox<Object>(tableNameList);
    tableList.setToolTipText("Click to change table");
    tableList.setMaximumRowCount(4);
    tableList.setBounds(6,35,230,27);
    tableList.addActionListener(this);
    inputPane.add(tableList);
     inputPane = new JPanel();
     inputPane.setBounds(6, 26, 507, 61);
     inputPane.setBorder(loweredetched);
     totalGUI.add(inputPane);
     inputPane.setLayout(null);
    directoryOUList = new JComboBox<Object>(OUNameList);
    directoryOUList.setToolTipText("Click to change OU");
    directoryOUList.setMaximumRowCount(4);
    directoryOUList.setBounds(271, 35, 230, 27);
    inputPane.add(directoryOUList);
     tableList = new JComboBox<Object>(tableNameList);
     tableList.setToolTipText("Click to change table");
     tableList.setMaximumRowCount(4);
     tableList.setBounds(6,29,230,27);
     tableList.addActionListener(this);
     inputPane.add(tableList);
    lblDatabaseTables = new JLabel("Select table");
    lblDatabaseTables.setBounds(75, 15, 128, 16);
    inputPane.add(lblDatabaseTables);
     directoryOUList = new JComboBox<Object>(OUNameList);
     directoryOUList.setToolTipText("Click to change OU");
     directoryOUList.setMaximumRowCount(4);
     directoryOUList.setBounds(271, 29, 230, 27);
     inputPane.add(directoryOUList);
    lblSelectOu = new JLabel("Select OU\n");
    lblSelectOu.setBounds(350, 15, 128, 16);
    inputPane.add(lblSelectOu);
    directoryOUList.addActionListener(this);
     lblDatabaseTables = new JLabel("Select table");
     lblDatabaseTables.setBounds(11, 6, 128, 16);
     inputPane.add(lblDatabaseTables);
    dataPane = new JPanel();
    dataPane.setBounds(6, 75, 511, 308);
    totalGUI.add(dataPane);
    dataPane.setLayout(new GridLayout(0, 1, 0, 0));
    //Create the scroll pane and add the table to it.
    scrollPane = new JScrollPane();
    fillTable();
    UpdateTable();
    dataPane.add(scrollPane);
     lblSelectOu = new JLabel("Select OU\n");
     lblSelectOu.setBounds(276, 6, 128, 16);
     inputPane.add(lblSelectOu);
     directoryOUList.addActionListener(this);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);
    table.getTableHeader().setReorderingAllowed(false);
    table.getTableHeader().setResizingAllowed(false);
    btnPane = new JPanel();
    btnPane.setLayout(null);
    btnPane.setBounds(100, 390, 500, 60);
    totalGUI.add(btnPane);
     dataPane = new JPanel();
     dataPane.setBounds(6, 99, 511, 308);
     totalGUI.add(dataPane);
     dataPane.setLayout(new GridLayout(0, 1, 0, 0));
    btnSetMap = new JButton("Save current mapping");
    btnSetMap.setBounds(0, 0, 175, 30);
    btnSetMap.addActionListener(this);
    btnPane.add(btnSetMap);
    btnResetMap = new JButton("Reset current mapping");
    btnResetMap.setBounds(180, 0, 175, 30);
    btnResetMap.addActionListener(this);
    btnPane.add(btnResetMap);
    btnSave = new JButton("Save to file");
    btnSave.setBounds(30, 30, 145, 30);
    btnSave.addActionListener(this);
    btnPane.add(btnSave);
     //Create the scroll pane and add the table to it.
     scrollPane = new JScrollPane();
     fillTable();
     UpdateTable();
     dataPane.add(scrollPane);
    btnQuitConnection = new JButton("Close");
    btnQuitConnection.setBounds(180, 30, 145, 30);
    btnQuitConnection.addActionListener(this);
    btnPane.add(btnQuitConnection);
     table.setPreferredScrollableViewportSize(new Dimension(500, 70));
     table.setFillsViewportHeight(true);
     table.getTableHeader().setReorderingAllowed(false);
     table.getTableHeader().setResizingAllowed(false);
    return totalGUI;
  }
  private void fillTable() throws SQLException {
      String tableName = tableList.getSelectedItem().toString();
      ArrayList<String> columnsList = JDBCM.getTableColumns(tableName);
      Object[][] rowData = new Object[columnsList.size()][2];
      for(int i = 0; i < columnsList.size(); i++){
          String columnName = columnsList.get(i);
          if(!JDBCM.getTableColumnNullable(tableName, columnName)){
              columnName = columnName.concat("(*)");
          }
          rowData[i][0] = columnName;
          rowData[i][1] = "----";
      }
      MyTable myTable = new MyTable();
      myTable.data = rowData;
      table = new JTable(myTable);
      scrollPane.setViewportView(table);
      createTableComboBoxList();
}
  private void createTableComboBoxList(){
      JComboBox<String> comboBox = new JComboBox<String>();
      ArrayList<String> attributesList = JDBCM.getOrganizationalUnitAttributes(directoryOUList.getSelectedItem().toString());
      for(int i = 0; i < attributesList.size(); i++){
          comboBox.addItem(attributesList.get(i));
      }
      TableColumn directoryColumn = table.getColumnModel().getColumn(1);
      directoryColumn.setCellEditor(new DefaultCellEditor(comboBox));
      DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
      directoryColumn.setCellRenderer(renderer);
  }
  public void UpdateTable(){
        String tableName = tableList.getSelectedItem().toString();
        Map<String, String> currentMap = JDBCM.loadCurrentMapFromMapping(tableName);
        if(!currentMap.isEmpty()){
            String mappingKey, mappingValue;
            MyTable mt = (MyTable) table.getModel();
            for(int i = 0; i < mt.data.length; i++){
                mappingKey = tableName + ":" + mt.data[i][0].toString();
                mappingKey = mappingKey.replace("(*)", "");
                mappingValue = currentMap.get(mappingKey);
                String[] stringSplitter = mappingValue.split((":"));
                mt.data[i][1] = stringSplitter[1];
            }
        }
  }
  public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if((source == tableList) || (source == directoryOUList))
    {
        try {
            fillTable();
            createTableComboBoxList();
            if(source == tableList){
                UpdateTable();
            }
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
    else if(source == btnSetMap){
        MyTable mt = (MyTable) table.getModel();
        String tableName = tableList.getSelectedItem().toString();
        String OUName = directoryOUList.getSelectedItem().toString();
        String [] columnStrings = new String[mt.data.length], attributeStrings = new String[mt.data.length];
        boolean success = true;
        String columnName, attributeName;
        for(int i = 0; i < mt.data.length; i++){
            columnName = mt.data[i][0].toString();
            attributeName = mt.data[i][1].toString();
            if(columnName.contains("(*)") && attributeName.equals("----")){
                success = false;
                JOptionPane.showMessageDialog(frame, "Map all the required fields!", "Error", JOptionPane.ERROR_MESSAGE);
                break;
            }
            columnStrings[i] = columnName.replace("(*)", "");
            attributeStrings[i] = attributeName;
        }
        if(success) JDBCM.addCurrentMapToMapping(tableName, columnStrings, OUName, attributeStrings);
    }
    else if(source == btnSave){
        mcm.saveMapping(JDBCM.getMapping());
    }
    else if(source == btnResetMap){
        try {
            fillTable();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }
    else if(source == btnQuitConnection){
        try {
            JDBCM.closeConnections();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
        System.exit(0);
    }
  }
}
     btnPane = new JPanel();
     btnPane.setLayout(null);
     btnPane.setBounds(6, 420, 507, 61);
     totalGUI.add(btnPane);
     btnSetMap = new JButton("Save current mapping");
     btnSetMap.setBounds(87, 3, 175, 30);
     btnSetMap.addActionListener(this);
     btnPane.add(btnSetMap);
     btnResetMap = new JButton("Reset current mapping");
     btnResetMap.setBounds(254, 3, 175, 30);
     btnResetMap.addActionListener(this);
     btnPane.add(btnResetMap);
     btnSave = new JButton("Save to file");
     btnSave.setBounds(117, 28, 145, 30);
     btnSave.addActionListener(this);
     btnPane.add(btnSave);
     btnQuitConnection = new JButton("Close");
     btnQuitConnection.setBounds(254, 28, 145, 30);
     btnQuitConnection.addActionListener(this);
     btnPane.add(btnQuitConnection);
     return totalGUI;
   }
   private void fillTable() throws SQLException {
     String tableName = tableList.getSelectedItem().toString();
     ArrayList<String> columnsList = JDBCM.getTableColumns(tableName);
     Object[][] rowData = new Object[columnsList.size()][2];
     for(int i = 0; i < columnsList.size(); i++){
       String columnName = columnsList.get(i);
       if(!JDBCM.getTableColumnNullable(tableName, columnName)){
         columnName = columnName.concat("(*)");
       }
       rowData[i][0] = columnName;
       rowData[i][1] = "----";
     }
     MyTable myTable = new MyTable();
     myTable.data = rowData;
     table = new JTable(myTable);
     scrollPane.setViewportView(table);
     createTableComboBoxList();
   }
   private void createTableComboBoxList(){
     JComboBox<String> comboBox = new JComboBox<String>();
     ArrayList<String> attributesList = JDBCM.getOrganizationalUnitAttributes(directoryOUList.getSelectedItem().toString());
     for(int i = 0; i < attributesList.size(); i++){
       comboBox.addItem(attributesList.get(i));
     }
     TableColumn directoryColumn = table.getColumnModel().getColumn(1);
     directoryColumn.setCellEditor(new DefaultCellEditor(comboBox));
     DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
     directoryColumn.setCellRenderer(renderer);
   }
   public void UpdateTable(){
     String tableName = tableList.getSelectedItem().toString();
     Map<String, String> currentMap = JDBCM.loadCurrentMapFromMapping(tableName);
     if(!currentMap.isEmpty()){
       String mappingKey, mappingValue;
       MyTable mt = (MyTable) table.getModel();
       for(int i = 0; i < mt.data.length; i++){
         mappingKey = tableName + ":" + mt.data[i][0].toString();
         mappingKey = mappingKey.replace("(*)", "");
         mappingValue = currentMap.get(mappingKey);
         String[] stringSplitter = mappingValue.split((":"));
         mt.data[i][1] = stringSplitter[1];
       }
     }
   }
   public void actionPerformed(ActionEvent e) {
     Object source = e.getSource();
     if((source == tableList) || (source == directoryOUList))
     {
       try {
         fillTable();
         createTableComboBoxList();
         if(source == tableList){
           UpdateTable();
         }
       } catch (SQLException e1) {
         e1.printStackTrace();
       }
     }
     else if(source == btnSetMap){
       MyTable mt = (MyTable) table.getModel();
       String tableName = tableList.getSelectedItem().toString();
       String OUName = directoryOUList.getSelectedItem().toString();
       String [] columnStrings = new String[mt.data.length], attributeStrings = new String[mt.data.length];
       boolean success = true;
       String columnName, attributeName;
       for(int i = 0; i < mt.data.length; i++){
         columnName = mt.data[i][0].toString();
         attributeName = mt.data[i][1].toString();
         if(columnName.contains("(*)") && attributeName.equals("----")){
           success = false;
           JOptionPane.showMessageDialog(frame, "Map all the required fields!", "Error", JOptionPane.ERROR_MESSAGE);
           break;
         }
         columnStrings[i] = columnName.replace("(*)", "");
         attributeStrings[i] = attributeName;
       }
       if(success) JDBCM.addCurrentMapToMapping(tableName, columnStrings, OUName, attributeStrings);
     }
     else if(source == btnSave){
       mcm.saveMapping(JDBCM.getMapping());
     }
     else if(source == btnResetMap){
       try {
         fillTable();
       } catch (SQLException e1) {
         e1.printStackTrace();
       }
     }
     else if(source == btnQuitConnection){
       try {
         JDBCM.closeConnections();
       } catch (SQLException e1) {
         e1.printStackTrace();
       }
       System.exit(0);
     }
   }
}