/*
 * HamletMainGUI.java
 *
 * Created on July 17, 2008, 5:24 PM
 */

package main_interface;

import hamlet.user.GlobalUser;
import hamlet.classification.*;
import hamlet.parsing.generated.GraphXml.Vertices.Vertice.Attribute;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
import com.Ostermiller.Syntax.HighlightedDocument;
import com.touchgraph.graphlayout.GLPanel;
import error_windows.ErrorWindowSetup;
import hamlet.dataset.DatasetHandler;
import hamlet.user.User;
import java.io.File;
import javax.swing.JFileChooser;
import plots.ArrangePlotValues;
import plots.PlotPyramid;
import plots.ArrangePlotValues;
import plots.PlotPyramid;
import user_creation.CreateUserWindow;


/**
 *
 * @author  Adam
 */

public class HamletGUI extends javax.swing.JFrame {
    
    
    /** Creates new form HamletMainGUI */
    public HamletGUI() 
    {
         initComponents();
         addLanguageBar();
         setSourceViewString();
         setUserLabel();
         setStatusLabelToDefault();
         disableQueryButton();
    }
    
    /** 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.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        _guiMainPanel = new javax.swing.JPanel();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel6 = new javax.swing.JPanel();
        _queryPanel1 = new javax.swing.JPanel();
        jScrollPane8 = new javax.swing.JScrollPane();
        //creates a highlighted document from the language selection class

        LanguageSelection sel = new LanguageSelection();
        HighlightedDocument document = sel.getDocument();
        _sourcePane = new javax.swing.JTextPane(document);
        jPanel3 = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        _numResultsField = new javax.swing.JTextField();
        _queryButton = new javax.swing.JButton();
        jPanel7 = new javax.swing.JPanel();
        user_panel_panel = new javax.swing.JPanel();
        _staticUserLabel = new javax.swing.JLabel();
        _dynamicUserLabel = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        _likeList = new java.awt.List();
        jPanel2 = new javax.swing.JPanel();
        _dislikeList = new java.awt.List();
        _moveToNeutralButton = new javax.swing.JButton();
        _moveToDislikeButton = new javax.swing.JButton();
        _moveToLikeButton = new javax.swing.JButton();
        jPanel8 = new javax.swing.JPanel();
        attribute_panel_main = new javax.swing.JPanel();
        _attributePanel1 = new javax.swing.JPanel();
        _attributeList = new java.awt.List();
        _attributePanel2 = new javax.swing.JPanel();
        jScrollPane5 = new javax.swing.JScrollPane();
        _attributeTextPane = new javax.swing.JTextPane();
        _attributePanel3 = new javax.swing.JPanel();
        _whatElseList = new java.awt.List();
        _attributePanel4 = new javax.swing.JPanel();
        _whatNotList = new java.awt.List();
        jScrollPane3 = new javax.swing.JScrollPane();
        _graphScrollPane = new javax.swing.JScrollPane();
        jScrollPane4 = new javax.swing.JScrollPane();
        _plotScrollPane = new javax.swing.JScrollPane();
        jPanel4 = new javax.swing.JPanel();
        _unitDataPanel = new javax.swing.JPanel();
        _unitList = new java.awt.List();
        _userRatingPanel = new javax.swing.JPanel();
        _likeButton = new javax.swing.JButton();
        _dislikeButton = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        _refreshGraphAndPlotButton = new javax.swing.JButton();
        _staticStatusLabel = new javax.swing.JLabel();
        _dynamicStatusLabel = new javax.swing.JLabel();
        _distances_panel = new javax.swing.JPanel();
        _distanceList = new java.awt.List();
        jPanel9 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        menu_bar = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        _saveUserMenuItem = new javax.swing.JMenuItem();
        _newUserMenuItem = new javax.swing.JMenuItem();
        _loadUserMenuItem = new javax.swing.JMenuItem();
        _loadDatasetMenuItem = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JSeparator();
        _exitMenuItem = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        _toolsMenuItem = new javax.swing.JMenu();
        _showCloseCheckBox = new javax.swing.JCheckBoxMenuItem();
        _showOtherCheckBox = new javax.swing.JCheckBoxMenuItem();
        _showQueryCheckBox = new javax.swing.JCheckBoxMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Hamlet - To do or not to do"); // NOI18N
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setName("hamlet_gui"); // NOI18N

        _queryPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Source"));

        sel.setTextPane(_sourcePane);
        jScrollPane8.setViewportView(_sourcePane);

        javax.swing.GroupLayout _queryPanel1Layout = new javax.swing.GroupLayout(_queryPanel1);
        _queryPanel1.setLayout(_queryPanel1Layout);
        _queryPanel1Layout.setHorizontalGroup(
            _queryPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane8, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 642, Short.MAX_VALUE)
        );
        _queryPanel1Layout.setVerticalGroup(
            _queryPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane8, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
        );

        jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel5.setText("Number of Results:"); // NOI18N

        _numResultsField.setText("50"); // NOI18N

        _queryButton.setText("Query"); // NOI18N
        _queryButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                _queryButtonMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                _queryButtonMouseEntered(evt);
            }
        });
        _queryButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _queryButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(_numResultsField, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(_queryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(_queryButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel5)
                    .addComponent(_numResultsField))
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(_queryPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(_queryPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(27, 27, 27))
        );

        jTabbedPane1.addTab("Query", jPanel6);

        _staticUserLabel.setText("User: "); // NOI18N

        _dynamicUserLabel.setText(" "); // NOI18N

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Likes"));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(_likeList, javax.swing.GroupLayout.DEFAULT_SIZE, 301, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(_likeList, javax.swing.GroupLayout.DEFAULT_SIZE, 550, Short.MAX_VALUE)
                .addContainerGap())
        );

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Dislikes"));

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(_dislikeList, javax.swing.GroupLayout.DEFAULT_SIZE, 302, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(_dislikeList, javax.swing.GroupLayout.DEFAULT_SIZE, 550, Short.MAX_VALUE)
                .addContainerGap())
        );

        _moveToNeutralButton.setText("Move to \"Neutral\""); // NOI18N

        _moveToDislikeButton.setText("Move to \"Dislikes\""); // NOI18N

        _moveToLikeButton.setText("Move to \"Likes\""); // NOI18N
        _moveToLikeButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _moveToLikeButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout user_panel_panelLayout = new javax.swing.GroupLayout(user_panel_panel);
        user_panel_panel.setLayout(user_panel_panelLayout);
        user_panel_panelLayout.setHorizontalGroup(
            user_panel_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(user_panel_panelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(user_panel_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(user_panel_panelLayout.createSequentialGroup()
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, user_panel_panelLayout.createSequentialGroup()
                        .addComponent(_moveToLikeButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(_moveToDislikeButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(_moveToNeutralButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
                    .addGroup(user_panel_panelLayout.createSequentialGroup()
                        .addComponent(_staticUserLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(_dynamicUserLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        user_panel_panelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {_moveToDislikeButton, _moveToLikeButton, _moveToNeutralButton});

        user_panel_panelLayout.setVerticalGroup(
            user_panel_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(user_panel_panelLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(user_panel_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(_staticUserLabel)
                    .addComponent(_dynamicUserLabel))
                .addGap(18, 18, 18)
                .addGroup(user_panel_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(6, 6, 6)
                .addGroup(user_panel_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(_moveToLikeButton)
                    .addComponent(_moveToDislikeButton)
                    .addComponent(_moveToNeutralButton)))
        );

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 684, Short.MAX_VALUE)
            .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel7Layout.createSequentialGroup()
                    .addGap(9, 9, 9)
                    .addComponent(user_panel_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(18, Short.MAX_VALUE)))
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 682, Short.MAX_VALUE)
            .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(user_panel_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(22, 22, 22)))
        );

        jTabbedPane1.addTab("User Panel", jPanel7);

        _attributePanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Attributes"));

        _attributeList.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                _attributeListMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout _attributePanel1Layout = new javax.swing.GroupLayout(_attributePanel1);
        _attributePanel1.setLayout(_attributePanel1Layout);
        _attributePanel1Layout.setHorizontalGroup(
            _attributePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(_attributeList, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
        );
        _attributePanel1Layout.setVerticalGroup(
            _attributePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(_attributeList, javax.swing.GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE)
        );

        _attributePanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Text"));

        jScrollPane5.setViewportView(_attributeTextPane);

        javax.swing.GroupLayout _attributePanel2Layout = new javax.swing.GroupLayout(_attributePanel2);
        _attributePanel2.setLayout(_attributePanel2Layout);
        _attributePanel2Layout.setHorizontalGroup(
            _attributePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane5, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
        );
        _attributePanel2Layout.setVerticalGroup(
            _attributePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE)
        );

        _attributePanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "What Else?"));

        javax.swing.GroupLayout _attributePanel3Layout = new javax.swing.GroupLayout(_attributePanel3);
        _attributePanel3.setLayout(_attributePanel3Layout);
        _attributePanel3Layout.setHorizontalGroup(
            _attributePanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_attributePanel3Layout.createSequentialGroup()
                .addComponent(_whatElseList, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        _attributePanel3Layout.setVerticalGroup(
            _attributePanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_attributePanel3Layout.createSequentialGroup()
                .addComponent(_whatElseList, javax.swing.GroupLayout.PREFERRED_SIZE, 286, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(39, Short.MAX_VALUE))
        );

        _attributePanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "What Not?"));

        javax.swing.GroupLayout _attributePanel4Layout = new javax.swing.GroupLayout(_attributePanel4);
        _attributePanel4.setLayout(_attributePanel4Layout);
        _attributePanel4Layout.setHorizontalGroup(
            _attributePanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_attributePanel4Layout.createSequentialGroup()
                .addComponent(_whatNotList, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(11, Short.MAX_VALUE))
        );
        _attributePanel4Layout.setVerticalGroup(
            _attributePanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_attributePanel4Layout.createSequentialGroup()
                .addComponent(_whatNotList, javax.swing.GroupLayout.PREFERRED_SIZE, 284, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(41, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout attribute_panel_mainLayout = new javax.swing.GroupLayout(attribute_panel_main);
        attribute_panel_main.setLayout(attribute_panel_mainLayout);
        attribute_panel_mainLayout.setHorizontalGroup(
            attribute_panel_mainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(attribute_panel_mainLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(attribute_panel_mainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(attribute_panel_mainLayout.createSequentialGroup()
                        .addComponent(_attributePanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(_attributePanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(_attributePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(_attributePanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        attribute_panel_mainLayout.setVerticalGroup(
            attribute_panel_mainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, attribute_panel_mainLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(attribute_panel_mainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(_attributePanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(attribute_panel_mainLayout.createSequentialGroup()
                        .addComponent(_attributePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(attribute_panel_mainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(_attributePanel3, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(_attributePanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addGap(46, 46, 46))
        );

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 684, Short.MAX_VALUE)
            .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel8Layout.createSequentialGroup()
                    .addGap(0, 3, Short.MAX_VALUE)
                    .addComponent(attribute_panel_main, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 4, Short.MAX_VALUE)))
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 742, Short.MAX_VALUE)
            .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel8Layout.createSequentialGroup()
                    .addGap(0, 0, Short.MAX_VALUE)
                    .addComponent(attribute_panel_main, javax.swing.GroupLayout.PREFERRED_SIZE, 742, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 0, Short.MAX_VALUE)))
        );

        jTabbedPane1.addTab("Attributes", jPanel8);

        jScrollPane3.setViewportView(_graphScrollPane);

        jTabbedPane1.addTab("2-D Graph", jScrollPane3);

        jScrollPane4.setViewportView(_plotScrollPane);

        jTabbedPane1.addTab("3-D Plot", jScrollPane4);

        _unitDataPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Units"));

        _unitList.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                _unitListMouseClicked(evt);
            }
        });
        _unitList.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _unitListActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout _unitDataPanelLayout = new javax.swing.GroupLayout(_unitDataPanel);
        _unitDataPanel.setLayout(_unitDataPanelLayout);
        _unitDataPanelLayout.setHorizontalGroup(
            _unitDataPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_unitDataPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(_unitList, javax.swing.GroupLayout.DEFAULT_SIZE, 142, Short.MAX_VALUE)
                .addContainerGap())
        );
        _unitDataPanelLayout.setVerticalGroup(
            _unitDataPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(_unitList, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
        );

        _userRatingPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), "Ratings"));

        _likeButton.setText("Like "); // NOI18N
        _likeButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _likeButtonActionPerformed(evt);
            }
        });

        _dislikeButton.setText("Dislike"); // NOI18N
        _dislikeButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _dislikeButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout _userRatingPanelLayout = new javax.swing.GroupLayout(_userRatingPanel);
        _userRatingPanel.setLayout(_userRatingPanelLayout);
        _userRatingPanelLayout.setHorizontalGroup(
            _userRatingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, _userRatingPanelLayout.createSequentialGroup()
                .addComponent(_likeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 155, Short.MAX_VALUE)
                .addComponent(_dislikeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        _userRatingPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {_dislikeButton, _likeButton});

        _userRatingPanelLayout.setVerticalGroup(
            _userRatingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_userRatingPanelLayout.createSequentialGroup()
                .addGroup(_userRatingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(_dislikeButton)
                    .addComponent(_likeButton))
                .addContainerGap(61, Short.MAX_VALUE))
        );

        _refreshGraphAndPlotButton.setText("Refresh Graph and Plot"); // NOI18N
        _refreshGraphAndPlotButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _refreshGraphAndPlotButtonActionPerformed(evt);
            }
        });

        _staticStatusLabel.setText("Status:"); // NOI18N

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(_refreshGraphAndPlotButton, javax.swing.GroupLayout.DEFAULT_SIZE, 401, Short.MAX_VALUE)
                    .addGroup(jPanel5Layout.createSequentialGroup()
                        .addComponent(_staticStatusLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(_dynamicStatusLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(_refreshGraphAndPlotButton)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(_staticStatusLabel)
                    .addComponent(_dynamicStatusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        _distances_panel.setBorder(javax.swing.BorderFactory.createTitledBorder("Distances"));

        _distanceList.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                _distanceListMouseClicked(evt);
            }
        });
        _distanceList.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _distanceListActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout _distances_panelLayout = new javax.swing.GroupLayout(_distances_panel);
        _distances_panel.setLayout(_distances_panelLayout);
        _distances_panelLayout.setHorizontalGroup(
            _distances_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_distances_panelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(_distanceList, javax.swing.GroupLayout.DEFAULT_SIZE, 149, Short.MAX_VALUE)
                .addContainerGap())
        );
        _distances_panelLayout.setVerticalGroup(
            _distances_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_distances_panelLayout.createSequentialGroup()
                .addComponent(_distanceList, javax.swing.GroupLayout.DEFAULT_SIZE, 392, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(_userRatingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(_unitDataPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(_distances_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(_distances_panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(_unitDataPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(26, 26, 26)
                .addComponent(_userRatingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(127, Short.MAX_VALUE))
        );

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/wvu.png"))); // NOI18N

        javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
        jPanel9.setLayout(jPanel9Layout);
        jPanel9Layout.setHorizontalGroup(
            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel9Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel9Layout.setVerticalGroup(
            jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel9Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout _guiMainPanelLayout = new javax.swing.GroupLayout(_guiMainPanel);
        _guiMainPanel.setLayout(_guiMainPanelLayout);
        _guiMainPanelLayout.setHorizontalGroup(
            _guiMainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(_guiMainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(_guiMainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, 405, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jTabbedPane1)
                .addContainerGap())
        );
        _guiMainPanelLayout.setVerticalGroup(
            _guiMainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, _guiMainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(_guiMainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(_guiMainPanelLayout.createSequentialGroup()
                        .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 673, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, _guiMainPanelLayout.createSequentialGroup()
                        .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
        );

        jMenu1.setText("File"); // NOI18N

        _saveUserMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        _saveUserMenuItem.setText("Save User Preferences"); // NOI18N
        _saveUserMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _saveUserMenuItemActionPerformed(evt);
            }
        });
        jMenu1.add(_saveUserMenuItem);

        _newUserMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
        _newUserMenuItem.setText("New User"); // NOI18N
        _newUserMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _newUserMenuItemActionPerformed(evt);
            }
        });
        jMenu1.add(_newUserMenuItem);

        _loadUserMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L, java.awt.event.InputEvent.CTRL_MASK));
        _loadUserMenuItem.setText("Load User"); // NOI18N
        _loadUserMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _loadUserMenuItemActionPerformed(evt);
            }
        });
        jMenu1.add(_loadUserMenuItem);

        _loadDatasetMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_D, java.awt.event.InputEvent.CTRL_MASK));
        _loadDatasetMenuItem.setText("Load Dataset"); // NOI18N
        _loadDatasetMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _loadDatasetMenuItemActionPerformed(evt);
            }
        });
        jMenu1.add(_loadDatasetMenuItem);
        jMenu1.add(jSeparator1);

        _exitMenuItem.setText("Exit"); // NOI18N
        _exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _exitMenuItemActionPerformed(evt);
            }
        });
        jMenu1.add(_exitMenuItem);

        menu_bar.add(jMenu1);

        jMenu2.setText("About"); // NOI18N
        menu_bar.add(jMenu2);

        _toolsMenuItem.setText("Tools");

        _showCloseCheckBox.setSelected(true);
        _showCloseCheckBox.setText("Show Close");
        _showCloseCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _showCloseCheckBoxActionPerformed(evt);
            }
        });
        _toolsMenuItem.add(_showCloseCheckBox);

        _showOtherCheckBox.setSelected(true);
        _showOtherCheckBox.setText("Show Other");
        _showOtherCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _showOtherCheckBoxActionPerformed(evt);
            }
        });
        _toolsMenuItem.add(_showOtherCheckBox);

        _showQueryCheckBox.setSelected(true);
        _showQueryCheckBox.setText("Show Query");
        _showQueryCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _showQueryCheckBoxActionPerformed(evt);
            }
        });
        _toolsMenuItem.add(_showQueryCheckBox);

        menu_bar.add(_toolsMenuItem);

        setJMenuBar(menu_bar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(_guiMainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(_guiMainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 671, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(27, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void _moveToLikeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__moveToLikeButtonActionPerformed
        _selectedDoc = _queryResult.getVertsAndDists().get(_unitList.getSelectedIndex()).getVertId();
          String[] termList = _datasetHandler.GetTerms();
          _globalUser.getUser().rateDocument(_selectedDoc,1,termList);
          displayLikesAndDislikes();
}//GEN-LAST:event__moveToLikeButtonActionPerformed

    
    private void _likeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__likeButtonActionPerformed
       
        //scores a document that is selected from the unit list
          _selectedDoc = _queryResult.getVertsAndDists().get(_unitList.getSelectedIndex()).getVertId();
          String[] termList = _datasetHandler.GetTerms();
          _globalUser.getUser().rateDocument(_selectedDoc,1,termList);
          displayLikesAndDislikes();
}//GEN-LAST:event__likeButtonActionPerformed

    private void _queryButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event__queryButtonMouseClicked
    
}//GEN-LAST:event__queryButtonMouseClicked

    private void _queryButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event__queryButtonMouseEntered
        // TODO add your handling code here:
}//GEN-LAST:event__queryButtonMouseEntered

    private void _queryButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__queryButtonActionPerformed
      
        clearListsPriorToQuery();
        
      try
      {
          changeQueryNum(Integer.parseInt(_numResultsField.getText()));
      }
      catch(Exception ex)
      {
          System.out.println("Invalid values in NumResults field.  Using 50 by default");
          defaultQueryNum();
          _numResultsField.setText(_queryNum + "");
      }  
        
        
    _queryResult = _datasetHandler.RunQuery(_sourcePane.getText(), _queryNum, _globalUser.getUser());       
    
    ArrayList<VertQueryInfo> verts;
    verts = _queryResult.getVertsAndDists();
    addVertToUnitList(verts);
    addDistancesToDistList(verts);
    
      //do 2d and 3d stuff here            
    plot();
}//GEN-LAST:event__queryButtonActionPerformed

    private void setUserLabel()
    {
        String userName = _globalUser.getUser().getUserName();
        
        if(userName != null)
            _dynamicUserLabel.setText(_globalUser.getUser().getUserName());
    }
       
    private void setStatusLabelToDefault()
    {
        _dynamicStatusLabel.removeAll();
        _dynamicStatusLabel.setText("Dataset not loaded. Query cannot be performed.");
              
    }
    
    private void enableQueryButton()
    {
        _queryButton.setEnabled(true);
    }
    
    private void setStatusLabelToLoaded()
    {
        _dynamicStatusLabel.removeAll();
        _dynamicStatusLabel.setText("Dataset loaded and ready.");
    }
    private void disableQueryButton()
    {
        _queryButton.setEnabled(false);
    }
    private void addLanguageBar()
    {
        LanguageSelection sel = new LanguageSelection();
        menu_bar.add(sel.createStyleMenu());
    }
    
    private void setSourceViewString()
    {
        _sourceViewText = _sourcePane.getText();
    }
    
    private void _exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__exitMenuItemActionPerformed
        //saves the user before we close
        _globalUser.getUser().saveProfile();
        System.exit(0);
}//GEN-LAST:event__exitMenuItemActionPerformed

    
    private void plot()
    {
        ArrayList<double[]> plotList = new ArrayList<double[]>();
        //ArrayList<VertQueryInfo> verts = _queryResult.getVertsAndDists();
       
        System.out.println("SHOWCLOSE = " + _showClose + " SHOWQUERY: " + _showQuery);
        
        if(_showClose == 1)                
            plotList.add(_queryResult.getFastMappedClosestCentriod());
        
        System.out.println("FastMappedClosestCentroid length: " + _queryResult.getFastMappedClosestCentriod().length);
                
        if(_showQuery == 1)                 
            plotList.add(_queryResult.getFastmappedQuery());
        
         System.out.println("FastMappedQuery: " + _queryResult.getFastmappedQuery().length);
        
        /*
        for(VertQueryInfo vqi : verts)
        {
           plotList.add(vqi.getVertFastmapped());      
           //System.out.println("in vqi");           
        }
         */
        
        ArrangePlotValues arrPlotVals = new ArrangePlotValues(plotList, _showClose, _showQuery);
        PlotPyramid pyramid = arrPlotVals.getPlotPyramidInstance();
        displayPlot(pyramid);
    }

    
    private void displayPlot(PlotPyramid plotPyramid)
    {
        _plotScrollPane.getViewport().add(plotPyramid);
    }
     
    
    private void _unitListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__unitListActionPerformed
        
}//GEN-LAST:event__unitListActionPerformed

    private void _unitListMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event__unitListMouseClicked
      
        VertQueryInfo vertQueryInfo = null;
        
        try
        {                       
            if(_unitList.getItemCount() > -1)
            {
                //select the distance list index that reflects the selected unit
                _distanceList.select(_unitList.getSelectedIndex());
                
                _attributeList.removeAll();
                
                if(_loadedAttributes == null) { _loadedAttributes = new ArrayList<Attribute>() ; }
                _loadedAttributes.clear();
                
                 vertQueryInfo = _queryResult.getVertsAndDists().get(_unitList.getSelectedIndex());
                 ArrayList<Attribute> attrs = _datasetHandler.GetAttributes(vertQueryInfo.getVertId());
                 for(Attribute attr : attrs)
                 {
                     _loadedAttributes.add(attr);
                     _attributeList.add(attr.getName());
                 }
                     //set attribute pane text
            }
            
            clearWhatElseWhatNotLists(); //clear lists
            
            addToWhatElseList(vertQueryInfo);
            addToWhatNotList(vertQueryInfo);
            
        } 
        catch(Exception e)
        {
            e.printStackTrace();
        }        
}//GEN-LAST:event__unitListMouseClicked

    private void setUpGraph()
    {
        _glPanel = new GLPanel();
        _graphScrollPane.getViewport().add(_glPanel);
    }
    private void _refreshGraphAndPlotButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__refreshGraphAndPlotButtonActionPerformed
       //just another query
        
        _queryButtonActionPerformed(evt);
        
}//GEN-LAST:event__refreshGraphAndPlotButtonActionPerformed

    private void _loadDatasetMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__loadDatasetMenuItemActionPerformed
        
        File file = produceFileChooser();
        
        disableQueryButton();
        setStatusLabelToDefault();
  
        if(file != null)
        {        
            //load Dataset here
            if(_datasetHandler == null)
            {
                _datasetHandler =  new DatasetHandler();
            }
            
            try
            {
                _datasetHandler.LoadDataset(file);
            }catch(Exception e)
            {
                e.printStackTrace();
                //ErrorWindowSetup errWinSetup = new ErrorWindowSetup();
                //errWinSetup.createAndDisplayWindow(e.getMessage());
            }
        
            _globalUser.getUser().loadDataset(file.getParent());
            displayLikesAndDislikes();
            
            if(_glPanel == null) { setUpGraph();}
            
            _glPanel.initialize(_datasetHandler.getGraph());
            setStatusLabelToLoaded();
            enableQueryButton();
        }
}//GEN-LAST:event__loadDatasetMenuItemActionPerformed

    private void _attributeListMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event__attributeListMouseClicked
        
        _attributeTextPane.removeAll();
       Attribute att = _loadedAttributes.get(_attributeList.getSelectedIndex());
       _attributeTextPane.setText(_datasetHandler.GetAttributeSourceText(att));
        
}//GEN-LAST:event__attributeListMouseClicked

    private void _saveUserMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__saveUserMenuItemActionPerformed
        
       _globalUser.getUser().saveProfile();
        
        
}//GEN-LAST:event__saveUserMenuItemActionPerformed

    private void _dislikeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__dislikeButtonActionPerformed
      
        //scores a document that is selected from the unit list
          _selectedDoc = _queryResult.getVertsAndDists().get(_unitList.getSelectedIndex()).getVertId();
          String[] termList = _datasetHandler.GetTerms();
          _globalUser.getUser().rateDocument(_selectedDoc,-1,termList);
          displayLikesAndDislikes();
    }//GEN-LAST:event__dislikeButtonActionPerformed

private void _newUserMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__newUserMenuItemActionPerformed
    this.dispose();

    CreateUserWindow cuwin = new CreateUserWindow();
    cuwin.setLocationRelativeTo(null);
    cuwin.setVisible(true);
}//GEN-LAST:event__newUserMenuItemActionPerformed

private void _loadUserMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__loadUserMenuItemActionPerformed
    _globalUser.getUser().saveProfile();
    
    this.dispose();
    
    JFileChooser chooser = new JFileChooser();
    chooser.setLocation(this.getX(), this.getY());
    chooser.showOpenDialog(_dynamicUserLabel);

    if (chooser.getSelectedFile() != null) {
        File file = chooser.getSelectedFile();
        loadUser(file);
        this.dispose();

        loadHamletGui();
    }
}//GEN-LAST:event__loadUserMenuItemActionPerformed

private void _showCloseCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__showCloseCheckBoxActionPerformed
          
     //boolean closeSelected = _showCloseCheckBox.isSelected();
      
        if (_showClose == 0)
        {
                   _showClose = 1;
        }else{
                   _showClose = 0;
        }       
}//GEN-LAST:event__showCloseCheckBoxActionPerformed

private void _showOtherCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__showOtherCheckBoxActionPerformed

     //boolean otherSelected = _showOtherCheckBox.isSelected();         
        if (_showOther == 0)
        {
                   _showOther = 1;
        }else{
                   _showOther = 0;
        }    
}//GEN-LAST:event__showOtherCheckBoxActionPerformed

private void _showQueryCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__showQueryCheckBoxActionPerformed
    
    //boolean querySelected = _showQueryCheckBox.isSelected();                     
             
        if (_showQuery == 0)
        {
                   _showQuery = 1;
        }else{
                   _showQuery = 0;
        }    
}//GEN-LAST:event__showQueryCheckBoxActionPerformed

private void _distanceListActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__distanceListActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event__distanceListActionPerformed

private void _distanceListMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event__distanceListMouseClicked
    
    if(_distanceList.getItemCount() > -1)
    {
        _unitList.select(_distanceList.getSelectedIndex());
    }
}//GEN-LAST:event__distanceListMouseClicked

private void loadHamletGui()
    {
         HamletGUI hamGui = new HamletGUI();
         //hamGui.setExtendedState(JFrame.MAXIMIZED_BOTH);  <-- maximizes window
         hamGui.setLocationRelativeTo(null);
         hamGui.setVisible(true);
    }

 private void loadUser(File file)
    {
        if(file.getPath().endsWith(".csv"))
        {
        _currentUser = new User();
       _currentUser.loadUser(file.getPath());
       
       GlobalUser guser = new GlobalUser();
       guser.setUser(_currentUser);
       
        } else 
        {
            ErrorWindowSetup errsetup = new ErrorWindowSetup();
            errsetup.createAndDisplayWindow("The file selected is not a valid .csv user file.");
        }
    }

    private void addToWhatElseList(VertQueryInfo vertQueryInfo)
    {
                ArrayList<String> whatElse = vertQueryInfo.getWhatElse();
                Object[] scores = _globalUser.getUser().getSortedMap(_globalUser.getUser().getTermTotals()).keySet().toArray();
                ArrayList<String> sorted = new ArrayList<String>();
                
                for(int i=0;i<scores.length;i++) {
                    if(whatElse.contains(scores[i])) {
                        sorted.add(whatElse.get(whatElse.indexOf(scores[i])));
                        whatElse.remove(whatElse.indexOf(scores[i]));
                    }
                }
                while(!whatElse.isEmpty()){
                    sorted.add(whatElse.get(0));
                    whatElse.remove(0);
                }
                
                 for(String we : sorted)
                {
                    _whatElseList.add(we);
                }
    }
    
     private void addToWhatNotList(VertQueryInfo vertQueryInfo)
    {
         ArrayList<String> whatNot = vertQueryInfo.getWhatNot();
         Object[] scores = _globalUser.getUser().getSortedMap(_globalUser.getUser().getTermTotals()).keySet().toArray();
         ArrayList<String> sorted = new ArrayList<String>();
                
         for(int i=0;i<scores.length;i++) {
               if(whatNot.contains(scores[i])) {
                   sorted.add(whatNot.get(whatNot.indexOf(scores[i])));
                   whatNot.remove(whatNot.indexOf(scores[i]));
               }
          }
          while(!whatNot.isEmpty()){
               sorted.add(whatNot.get(0));
                whatNot.remove(0);
          }
                
          for(String we : sorted)
          {
               _whatNotList.add(we);
          }
    }
     
    private void clearWhatElseWhatNotLists()
    {
        _whatElseList.removeAll();
        _whatNotList.removeAll();
    }
    
    private File produceFileChooser()
    {
        JFileChooser chooser = new JFileChooser();
        chooser.setLocation(this.getX(), this.getY());
        chooser.showOpenDialog(jLabel5);
        return chooser.getSelectedFile();
    }
    /**
     * @param args the command line arguments
     *
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                HamletGUI hamGui = new HamletGUI();
                hamGui.setExtendedState(JFrame.MAXIMIZED_BOTH);
                hamGui.setVisible(true);
            }
        });
    }
     * */
    
    private void clearListsPriorToQuery()
    {
        _unitList.removeAll();
        _likeList.removeAll();
        _dislikeList.removeAll();
    }
    
    private void changeQueryNum(int results)
    {
        _queryNum = results;
    }
    
    private void defaultQueryNum()
    {
        _queryNum = 50;
    }
    
    private void setNumResultsField(int numResults)
    {
        Integer res = numResults;
        _numResultsField.setText(res.toString());
    }
    
    private void addDistancesToDistList(ArrayList<VertQueryInfo> verts)
    {
        _distanceList.removeAll();
        
        for(VertQueryInfo vqi: verts)
        {
            _distanceList.add(Double.toString(vqi.getDistance()));
        }
    }
    private void addVertToUnitList(ArrayList<VertQueryInfo> verts)
    {
        ArrayList<String> liked = _globalUser.getUser().getLiked();
        ArrayList<String> disliked = _globalUser.getUser().getDisliked();
        int l=0;
        int d=0;
        
        for(VertQueryInfo vqi: verts)
        {
            if(liked.contains(vqi.getVertId())){
                _unitList.add(_datasetHandler.GetVertice(vqi.getVertId()).getName()+" (+)");
                l++;
            }
            else if(disliked.contains(vqi.getVertId())){
                _unitList.add(_datasetHandler.GetVertice(vqi.getVertId()).getName()+" (-)");
                d++;
            }
            else{
                _unitList.add(_datasetHandler.GetVertice(vqi.getVertId()).getName());
            }
        }
        _unitList.add("Total: "+new Integer(verts.size()).toString()+" ("+l+","+d+")");
    }
    
    private void displayLikesAndDislikes()
    {
         //this fills the likes and dislikes lists
        _likeList.removeAll();
        _dislikeList.removeAll();
        
        //fill like list
        
        for(String liked : _globalUser.getUser().getLiked())
        {
            _likeList.add(_datasetHandler.GetVertice(liked).getName()+"("+liked+")");
          
        }
        
        //file dislike list
        for(String dislike : _globalUser.getUser().getDisliked())
        {
            _dislikeList.add(_datasetHandler.GetVertice(dislike).getName()+"("+dislike+")");
        }
        
              
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private java.awt.List _attributeList;
    private javax.swing.JPanel _attributePanel1;
    private javax.swing.JPanel _attributePanel2;
    private javax.swing.JPanel _attributePanel3;
    private javax.swing.JPanel _attributePanel4;
    private javax.swing.JTextPane _attributeTextPane;
    private javax.swing.JButton _dislikeButton;
    private java.awt.List _dislikeList;
    private java.awt.List _distanceList;
    private javax.swing.JPanel _distances_panel;
    private javax.swing.JLabel _dynamicStatusLabel;
    private javax.swing.JLabel _dynamicUserLabel;
    private javax.swing.JMenuItem _exitMenuItem;
    private javax.swing.JScrollPane _graphScrollPane;
    private javax.swing.JPanel _guiMainPanel;
    private javax.swing.JButton _likeButton;
    private java.awt.List _likeList;
    private javax.swing.JMenuItem _loadDatasetMenuItem;
    private javax.swing.JMenuItem _loadUserMenuItem;
    private javax.swing.JButton _moveToDislikeButton;
    private javax.swing.JButton _moveToLikeButton;
    private javax.swing.JButton _moveToNeutralButton;
    private javax.swing.JMenuItem _newUserMenuItem;
    private javax.swing.JTextField _numResultsField;
    private javax.swing.JScrollPane _plotScrollPane;
    private javax.swing.JButton _queryButton;
    private javax.swing.JPanel _queryPanel1;
    private javax.swing.JButton _refreshGraphAndPlotButton;
    private javax.swing.JMenuItem _saveUserMenuItem;
    private javax.swing.JCheckBoxMenuItem _showCloseCheckBox;
    private javax.swing.JCheckBoxMenuItem _showOtherCheckBox;
    private javax.swing.JCheckBoxMenuItem _showQueryCheckBox;
    private javax.swing.JTextPane _sourcePane;
    private javax.swing.JLabel _staticStatusLabel;
    private javax.swing.JLabel _staticUserLabel;
    private javax.swing.JMenu _toolsMenuItem;
    private javax.swing.JPanel _unitDataPanel;
    private java.awt.List _unitList;
    private javax.swing.JPanel _userRatingPanel;
    private java.awt.List _whatElseList;
    private java.awt.List _whatNotList;
    private javax.swing.JPanel attribute_panel_main;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JMenuBar menu_bar;
    private javax.swing.JPanel user_panel_panel;
    // End of variables declaration//GEN-END:variables
    private int _queryNum;
    public QueryResult _queryResult = null;
    private String _sourceViewText;
    private String _selectedDoc;
    private DatasetHandler _datasetHandler = null;
    private ArrayList<Attribute>  _loadedAttributes = null;
    private User _currentUser = null;
    private GlobalUser _globalUser = null;
    private GLPanel _glPanel = null;
    private int _dislikeRatingVal = -1;
    private int _likeRatingVal = 1;
    private int _noTermFoundInDocVal = -2;
    private int _showClose = 1;
    private int _showOther = 1;
    private int _showQuery = 1;

    
  
}
