content: package ciscoroutertool.gui;
  
  import ciscoroutertool.utils.Host;
  
  import javax.swing.*;
  import java.net.InetAddress;
  import java.net.UnknownHostException;
  
  /**
   * Allows a user to add a new device
   * @version 0.01ALPHA
   * @author Andrew Johnston
   */
  public class NewDeviceDialog extends javax.swing.JFrame {
  
      /**
       * The parent window of the device dialog which will receive the input.
       */
      private MainGUI parent;
      
      /**
       * Creates new form NewDeviceDialog
       */
      public NewDeviceDialog(MainGUI p) {
          parent = p;
          initComponents();
      }
  
      /**
       * 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">//GEN-BEGIN:initComponents
      private void initComponents() {
  
          jButton1 = new javax.swing.JButton();
          jLabel1 = new javax.swing.JLabel();
          jLabel2 = new javax.swing.JLabel();
          fieldIPAddr = new javax.swing.JTextField();
          jLabel3 = new javax.swing.JLabel();
          btnCloseButton = new javax.swing.JButton();
          btnAddDevice = new javax.swing.JButton();
          jLabel4 = new javax.swing.JLabel();
          jLabel5 = new javax.swing.JLabel();
          sshUsername = new javax.swing.JTextField();
          sshPassword = new javax.swing.JPasswordField();
          checkNeedsEnable = new javax.swing.JCheckBox();
          jLabel6 = new javax.swing.JLabel();
          enablePassword = new javax.swing.JPasswordField();
  
          jButton1.setText("jButton1");
  
          setTitle("Add a New Device");
  
          jLabel1.setText("Please enter in the following information to add the device to the scan: ");
  
          jLabel2.setText("IP Address: ");
  
          jLabel3.setText("Connection Details: ");
  
          btnCloseButton.setText("Close");
          btnCloseButton.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  btnCloseButtonActionPerformed(evt);
              }
          });
  
          btnAddDevice.setText("Add Device");
          btnAddDevice.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  btnAddDeviceActionPerformed(evt);
              }
          });
  
          jLabel4.setText("SSH Username: ");
  
          jLabel5.setText("SSH Password: ");
  
          sshPassword.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  sshPasswordActionPerformed(evt);
              }
          });
  
          checkNeedsEnable.setText("This router requires superuser privileges");
          checkNeedsEnable.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  checkNeedsEnableActionPerformed(evt);
              }
          });
  
          jLabel6.setText("Superuser password: ");
  
          enablePassword.setEnabled(false);
  
          javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
          getContentPane().setLayout(layout);
          layout.setHorizontalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                  .addComponent(btnAddDevice)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                  .addComponent(btnCloseButton)
                  .addContainerGap())
              .addGroup(layout.createSequentialGroup()
                  .addContainerGap()
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                      .addComponent(jLabel1)
                      .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE)
                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                          .addGroup(layout.createSequentialGroup()
                              .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                              .addComponent(fieldIPAddr, javax.swing.GroupLayout.PREFERRED_SIZE, 366, javax.swing.GroupLayout.PREFERRED_SIZE))
                          .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                              .addGap(10, 10, 10)
                              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                  .addComponent(checkNeedsEnable)
                                  .addGroup(layout.createSequentialGroup()
                                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                          .addComponent(jLabel5)
                                          .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE))
                                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                          .addComponent(sshUsername, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE)
                                          .addComponent(sshPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                  .addGroup(layout.createSequentialGroup()
                                      .addComponent(jLabel6)
                                      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                      .addComponent(enablePassword, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE))))))
                  .addContainerGap(30, Short.MAX_VALUE))
          );
          layout.setVerticalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
                  .addContainerGap()
                  .addComponent(jLabel1)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(jLabel2)
                      .addComponent(fieldIPAddr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                  .addComponent(jLabel3)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(jLabel4)
                      .addComponent(sshUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(jLabel5)
                      .addComponent(sshPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addComponent(checkNeedsEnable)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(jLabel6)
                      .addComponent(enablePassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                      .addComponent(btnCloseButton)
                      .addComponent(btnAddDevice))
                  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
          );
  
          pack();
      }// </editor-fold>//GEN-END:initComponents
  
      /**
       * Closes the window.
       * @param evt The ActionEvent object with relevant data
       */
      private void btnCloseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCloseButtonActionPerformed
          this.dispose();
      }//GEN-LAST:event_btnCloseButtonActionPerformed
  
  
      private void sshPasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sshPasswordActionPerformed
          //FIX ME: Not used
      }//GEN-LAST:event_sshPasswordActionPerformed
  
      /**
       * Adds the device to the current scanning configuration.
       * @param evt The ActionEvent object with relevant data
       */
      private void btnAddDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddDeviceActionPerformed
          InetAddress hostname = null;
          String host = fieldIPAddr.getText().trim();
          try {
              hostname = InetAddress.getByName(host);
          } catch (UnknownHostException ex) {
              JOptionPane.showMessageDialog(this, "Unknown Host", "Please reenter the host",
                      JOptionPane.ERROR_MESSAGE);
          }
          String username = sshUsername.getText();
          String password = new String(sshPassword.getPassword());
          Host newHost = new Host(hostname, username, password);
          if (checkNeedsEnable.isSelected()) {
              newHost.setEnable(true);
              newHost.setEnablePass(new String(enablePassword.getPassword()));
          }
          parent.updateTable(newHost);
          this.dispose();
      }//GEN-LAST:event_btnAddDeviceActionPerformed
  
      /**
       * Handles the click of the "Needs superuser privileges" box
       * @param evt 
       */
      private void checkNeedsEnableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkNeedsEnableActionPerformed
          enablePassword.setEnabled(checkNeedsEnable.isSelected());
      }//GEN-LAST:event_checkNeedsEnableActionPerformed
  
  
      // Variables declaration - do not modify//GEN-BEGIN:variables
      private javax.swing.JButton btnAddDevice;
      private javax.swing.JButton btnCloseButton;
      private javax.swing.JCheckBox checkNeedsEnable;
      private javax.swing.JPasswordField enablePassword;
      private javax.swing.JTextField fieldIPAddr;
      private javax.swing.JButton jButton1;
      private javax.swing.JLabel jLabel1;
      private javax.swing.JLabel jLabel2;
      private javax.swing.JLabel jLabel3;
      private javax.swing.JLabel jLabel4;
      private javax.swing.JLabel jLabel5;
      private javax.swing.JLabel jLabel6;
      private javax.swing.JPasswordField sshPassword;
      private javax.swing.JTextField sshUsername;
      // End of variables declaration//GEN-END:variables
  }
  