gt:                 VariableName x = pair.getXVariable();
context: /*
   * Copyright (c) 2012 Patrick Meyer
   *
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation, either version 3 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
  
  package com.itemanalysis.jmetrik.stats.irt.linking;
  
  import java.awt.*;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.sql.Connection;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Statement;
  
  import com.itemanalysis.jmetrik.model.VariableNameListModel;
  import com.itemanalysis.jmetrik.sql.DataTableName;
  import com.itemanalysis.psychometrics.data.VariableName;
  import com.itemanalysis.squiggle.base.SelectQuery;
  import com.itemanalysis.squiggle.base.Table;
  import org.apache.log4j.Logger;
  
  import javax.swing.*;
  
  public class IrtLinkingItemPairDialog extends JDialog{
  
      private Connection conn = null;
  
      static Logger logger = Logger.getLogger("jmetrik-logger");
  
      private DataTableName tableX = null;
  
      private DataTableName tableY = null;
  
      private VariableNameListModel xListModel = null;
  
      private VariableNameListModel yListModel = null;
  
      private DefaultListModel xyListModel = null;
  
      private boolean canRun = false;
  
      // Variables declaration - do not modify
      private JPanel bottomPanel;
      private JPanel buttonPanel;
      private JButton cancelButton;
      private JPanel jPanel1;
      private JPanel jPanel2;
      private JPanel jPanel3;
      private JScrollPane jScrollPane1;
      private JScrollPane jScrollPane2;
      private JScrollPane jScrollPane3;
      private JButton okButton;
      private JButton selectButton;
      private JButton unselectAllButton;
      private JButton unselectButton;
      private JList xList;
      private JList xyList;
      private JList yList;
      // End of variables declaration
  
      /** Creates new form IrtEquatingItemPairDialog */
      public IrtLinkingItemPairDialog(JDialog parent, Connection conn, DataTableName tableX, DataTableName tableY) {
          super(parent, "X-Y Item Pairs", true);
          this.conn = conn;
          this.tableX = tableX;
          this.tableY = tableY;
          initComponents();
  
          xListModel = new VariableNameListModel();
          xList.setModel(xListModel);
          populateList(tableX, xListModel);
  
          yListModel = new VariableNameListModel();
          yList.setModel(yListModel);
          populateList(tableY, yListModel);
  
          xyListModel = new DefaultListModel();
          xyList.setModel(xyListModel);
  
          setResizable(false);
          setLocationRelativeTo(parent);
          setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
          setLocationRelativeTo(parent);
      }
  
      public boolean canRun(){
          return canRun;
      }
  
      public int numberOfPairs(){
          return xyListModel.getSize();
      }
  
      public Object[] getSelectedPairs(){
          return xyListModel.toArray();
      }
  
      private void populateList(DataTableName table, VariableNameListModel listModel){
          try{
              Table sqlTable = new Table(table.getNameForDatabase());
              SelectQuery query = new SelectQuery();
              VariableName name = new VariableName("name");//must be in item parameter table
              query.addColumn(sqlTable, name.nameForDatabase());
              Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
              ResultSet rs = stmt.executeQuery(query.toString());
  
              VariableName tempName = null;
              int index = 0;
              while(rs.next()){
                  tempName = new VariableName(rs.getString(name.nameForDatabase()));
                  tempName.setIndex(index);
                  index++;
                  listModel.addElement(tempName);
              }
              rs.close();
              stmt.close();
          }catch(SQLException ex){
              logger.fatal(ex.getMessage(), ex);
              JOptionPane.showMessageDialog(IrtLinkingItemPairDialog.this,
                      "Problem reading database.",
                      "SQException",
                      JOptionPane.ERROR_MESSAGE);
          }
  
      }
  
      /** This method is called from within the constructor to
       * initialize the form.
       * WARNING: Do NOT modify this code. The content of this method is
       * always regenerated by the Form Editor.
       */
      @SuppressWarnings("unchecked")
      // <editor-fold defaultstate="collapsed" desc="Generated Code">
      private void initComponents() {
          GridBagConstraints gridBagConstraints;
  
          jPanel1 = new JPanel();
          jScrollPane1 = new JScrollPane();
          xList = new JList();
          jPanel2 = new JPanel();
          jScrollPane2 = new JScrollPane();
          yList = new JList();
          jPanel3 = new JPanel();
          jScrollPane3 = new JScrollPane();
          xyList = new JList();
          buttonPanel = new JPanel();
          selectButton = new JButton();
          unselectButton = new JButton();
          unselectAllButton = new JButton();
          bottomPanel = new JPanel();
          okButton = new JButton();
          cancelButton = new JButton();
  
          setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
          getContentPane().setLayout(new GridBagLayout());
  
          jPanel1.setBorder(BorderFactory.createTitledBorder("Form X Items"));
          jPanel1.setPreferredSize(new Dimension(125, 350));
          jPanel1.setLayout(new GridLayout(1, 0));
  
          xList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
          jScrollPane1.setViewportView(xList);
  
          jPanel1.add(jScrollPane1);
  
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 0;
          gridBagConstraints.gridy = 0;
          gridBagConstraints.gridheight = 20;
          gridBagConstraints.fill = GridBagConstraints.VERTICAL;
          gridBagConstraints.insets = new Insets(5, 5, 5, 5);
          getContentPane().add(jPanel1, gridBagConstraints);
  
          jPanel2.setBorder(BorderFactory.createTitledBorder("Form Y Items"));
          jPanel2.setPreferredSize(new Dimension(125, 350));
          jPanel2.setLayout(new GridLayout(1, 0));
  
          yList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
          jScrollPane2.setViewportView(yList);
  
          jPanel2.add(jScrollPane2);
  
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 1;
          gridBagConstraints.gridheight = 20;
          gridBagConstraints.fill = GridBagConstraints.VERTICAL;
          gridBagConstraints.insets = new Insets(5, 0, 5, 5);
          getContentPane().add(jPanel2, gridBagConstraints);
  
          jPanel3.setBorder(BorderFactory.createTitledBorder("X-Y Item Pairs"));
          jPanel3.setPreferredSize(new Dimension(150, 350));
          jPanel3.setLayout(new GridLayout(1, 0));
  
          xyList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
          jScrollPane3.setViewportView(xyList);
  
          jPanel3.add(jScrollPane3);
  
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 3;
          gridBagConstraints.gridy = 0;
          gridBagConstraints.gridheight = 20;
          gridBagConstraints.fill = GridBagConstraints.VERTICAL;
          gridBagConstraints.insets = new Insets(5, 0, 5, 5);
          getContentPane().add(jPanel3, gridBagConstraints);
  
          buttonPanel.setPreferredSize(new Dimension(55, 350));
          buttonPanel.setLayout(new GridBagLayout());
  
          selectButton.setText(">");
          selectButton.setMaximumSize(new Dimension(52, 28));
          selectButton.setMinimumSize(new Dimension(50, 28));
          selectButton.setPreferredSize(new Dimension(50, 28));
          selectButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                  selectButtonActionPerformed(evt);
              }
          });
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.insets = new Insets(0, 0, 5, 5);
          buttonPanel.add(selectButton, gridBagConstraints);
  
          unselectButton.setText("<");
          unselectButton.setMaximumSize(new Dimension(52, 28));
          unselectButton.setMinimumSize(new Dimension(50, 28));
          unselectButton.setPreferredSize(new Dimension(50, 28));
          unselectButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                  unselectButtonActionPerformed(evt);
              }
          });
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 0;
          gridBagConstraints.gridy = 1;
          gridBagConstraints.insets = new Insets(0, 0, 5, 5);
          buttonPanel.add(unselectButton, gridBagConstraints);
  
          unselectAllButton.setText("<<");
          unselectAllButton.setMaximumSize(new Dimension(52, 28));
          unselectAllButton.setMinimumSize(new Dimension(50, 28));
          unselectAllButton.setPreferredSize(new Dimension(50, 28));
          unselectAllButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                  unselectAllButtonActionPerformed(evt);
              }
          });
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 0;
          gridBagConstraints.gridy = 2;
          gridBagConstraints.insets = new Insets(0, 0, 5, 5);
          buttonPanel.add(unselectAllButton, gridBagConstraints);
  
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 2;
          gridBagConstraints.gridy = 0;
          gridBagConstraints.gridheight = 20;
          gridBagConstraints.fill = GridBagConstraints.VERTICAL;
          gridBagConstraints.insets = new Insets(5, 0, 5, 5);
          getContentPane().add(buttonPanel, gridBagConstraints);
  
          bottomPanel.setLayout(new GridBagLayout());
  
          okButton.setText("OK");
          okButton.setToolTipText("OK");
          okButton.setMaximumSize(new Dimension(65, 28));
          okButton.setMinimumSize(new Dimension(65, 28));
          okButton.setPreferredSize(new Dimension(65, 28));
          okButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                  okButtonActionPerformed(evt);
              }
          });
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 0;
          gridBagConstraints.gridy = 0;
          gridBagConstraints.insets = new Insets(5, 5, 5, 5);
          bottomPanel.add(okButton, gridBagConstraints);
  
          cancelButton.setText("Cancel");
          cancelButton.setToolTipText("Cancel");
          cancelButton.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                  cancelButtonActionPerformed(evt);
              }
          });
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 1;
          gridBagConstraints.gridy = 0;
          gridBagConstraints.insets = new Insets(5, 0, 5, 5);
          bottomPanel.add(cancelButton, gridBagConstraints);
  
          gridBagConstraints = new GridBagConstraints();
          gridBagConstraints.gridx = 0;
          gridBagConstraints.gridy = 20;
          gridBagConstraints.gridwidth = 4;
          gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
          gridBagConstraints.insets = new Insets(5, 5, 5, 5);
          getContentPane().add(bottomPanel, gridBagConstraints);
  
          pack();
      }// </editor-fold>
  
      private void selectButtonActionPerformed(ActionEvent evt) {
          int selectedX = xList.getSelectedIndex();
          int selectedY = yList.getSelectedIndex();
          if(selectedX!=-1 && selectedY!=-1){
              VariableName xName = (VariableName)xListModel.getElementAt(selectedX);
              VariableName yName = (VariableName)yListModel.getElementAt(selectedY);
              LinkingItemPair pair = new LinkingItemPair(xName, yName);
              xyListModel.addElement(pair);
              xListModel.removeElement((VariableName)xListModel.getElementAt(selectedX));
              yListModel.removeElement((VariableName)yListModel.getElementAt(selectedY));
          }
  
      }
  
      private void unselectButtonActionPerformed(ActionEvent evt) {
          int selected = xyList.getSelectedIndex();
          if(selected!=-1){
              LinkingItemPair pair = (LinkingItemPair)xyListModel.getElementAt(selected);
              VariableName x = pair.getXVariable();
              VariableName y = pair.getYVariable();
              xListModel.addElement(x);
              yListModel.addElement(y);
              xyListModel.remove(selected);
          }
      }
  
      private void unselectAllButtonActionPerformed(ActionEvent evt) {
          int size = xyList.getModel().getSize();
          LinkingItemPair pair = null;
          if(size>0){
              for(int i=0;i<size;i++){
                  pair = (LinkingItemPair)xyListModel.getElementAt(i);
  