Example usage for javax.swing.border EtchedBorder LOWERED

List of usage examples for javax.swing.border EtchedBorder LOWERED

Introduction

In this page you can find the example usage for javax.swing.border EtchedBorder LOWERED.

Prototype

int LOWERED

To view the source code for javax.swing.border EtchedBorder LOWERED.

Click Source Link

Document

Lowered etched type.

Usage

From source file:eu.cassandra.training.gui.MainGUI.java

/**
 * Constructor of the Training Module GUI.
 * //  w w w. j  a  v a2s.  c o  m
 * @throws UnsupportedLookAndFeelException
 * @throws IllegalAccessException
 * @throws InstantiationException
 * @throws ClassNotFoundException
 * @throws FileNotFoundException
 */
public MainGUI() throws ClassNotFoundException, InstantiationException, IllegalAccessException,
        UnsupportedLookAndFeelException, FileNotFoundException {
    setForeground(new Color(0, 204, 51));

    // Enable the closing of the frame when pressing the x on the upper corner
    // of the window
    addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            Utils.cleanFiles();
            System.exit(0);
        }
    });

    // Cleaning temporary files from the temp folder when starting the GUI.
    // Utils.cleanFiles();

    // Change the platforms look and feel to Nimbus
    LookAndFeel lnf = new javax.swing.plaf.nimbus.NimbusLookAndFeel();
    UIManager.put("NimbusLookAndFeel", Color.GREEN);
    UIManager.setLookAndFeel(lnf);

    // Setting the basic attributes of the Training Module GUI
    setTitle("Training Module (BETA)");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1228, 799);

    // Creating the menu bar and adding the menu items
    JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);

    JMenu mnNewMenu = new JMenu("File");
    menuBar.add(mnNewMenu);

    JMenuItem mntmExit = new JMenuItem("Exit");
    mntmExit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Utils.cleanFiles();
            System.exit(0);
        }
    });
    mnNewMenu.add(mntmExit);

    JMenu mnExit = new JMenu("Help");
    menuBar.add(mnExit);

    JMenuItem mntmManual = new JMenuItem("Manual");
    mnExit.add(mntmManual);

    JMenuItem mntmAbout = new JMenuItem("About");
    mnExit.add(mntmAbout);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    // Adding the tabbed pane to the content pane
    final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addComponent(tabbedPane, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 1202, Short.MAX_VALUE));
    gl_contentPane.setVerticalGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_contentPane.createSequentialGroup()
                    .addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 736, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(47, Short.MAX_VALUE)));

    // TABS //

    final JPanel importTab = new JPanel();
    tabbedPane.addTab("Import Data", null, importTab, null);
    tabbedPane.setDisplayedMnemonicIndexAt(0, 0);
    tabbedPane.setEnabledAt(0, true);
    importTab.setLayout(null);

    final JPanel trainingTab = new JPanel();
    tabbedPane.addTab("Train Activity Models", null, trainingTab, null);
    tabbedPane.setDisplayedMnemonicIndexAt(1, 1);
    tabbedPane.setEnabledAt(1, false);
    trainingTab.setLayout(null);

    final JPanel createResponseTab = new JPanel();

    tabbedPane.addTab("Create Response Models", null, createResponseTab, null);
    tabbedPane.setEnabledAt(2, false);
    createResponseTab.setLayout(null);

    // RESPONSE MODEL TAB //

    final JPanel responseParametersPanel = new JPanel();
    responseParametersPanel.setLayout(null);
    responseParametersPanel.setBorder(
            new TitledBorder(null, "Response Parameters", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    responseParametersPanel.setBounds(6, 6, 394, 271);
    createResponseTab.add(responseParametersPanel);

    final JPanel activityModelSelectionPanel = new JPanel();
    activityModelSelectionPanel.setLayout(null);
    activityModelSelectionPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Activity Model Selection", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    activityModelSelectionPanel.setBounds(6, 516, 394, 192);
    createResponseTab.add(activityModelSelectionPanel);

    final JPanel responsePanel = new JPanel();
    responsePanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Activity Model Change Preview", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    responsePanel.setBounds(417, 6, 770, 385);
    createResponseTab.add(responsePanel);
    responsePanel.setLayout(new BorderLayout(0, 0));

    final JPanel pricingPreviewPanel = new JPanel();
    pricingPreviewPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Pricing Scheme Preview", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pricingPreviewPanel.setBounds(417, 438, 770, 259);
    createResponseTab.add(pricingPreviewPanel);
    pricingPreviewPanel.setLayout(new BorderLayout(0, 0));

    final JPanel pricingSchemePanel = new JPanel();
    pricingSchemePanel.setLayout(null);
    pricingSchemePanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Pricing Scheme Selection", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    pricingSchemePanel.setBounds(6, 274, 394, 243);
    createResponseTab.add(pricingSchemePanel);

    // /////////////////
    // RESPONSE TAB //
    // ////////////////

    // RESPONSE PARAMETERS //

    final JLabel lblSensitivity = new JLabel("Sensitivity");
    lblSensitivity.setBounds(10, 28, 78, 16);
    responseParametersPanel.add(lblSensitivity);

    final JSlider sensitivitySlider = new JSlider();
    sensitivitySlider.setPaintLabels(true);
    sensitivitySlider.setSnapToTicks(true);
    sensitivitySlider.setPaintTicks(true);
    sensitivitySlider.setMinorTickSpacing(10);
    sensitivitySlider.setMajorTickSpacing(10);
    sensitivitySlider.setBounds(111, 28, 214, 45);
    responseParametersPanel.add(sensitivitySlider);

    final JLabel lblAwareness = new JLabel("Awareness");
    lblAwareness.setBounds(10, 79, 78, 16);
    responseParametersPanel.add(lblAwareness);

    final JSlider awarenessSlider = new JSlider();
    awarenessSlider.setPaintLabels(true);
    awarenessSlider.setPaintTicks(true);
    awarenessSlider.setMajorTickSpacing(10);
    awarenessSlider.setMinorTickSpacing(10);
    awarenessSlider.setSnapToTicks(true);
    awarenessSlider.setBounds(111, 79, 214, 45);
    responseParametersPanel.add(awarenessSlider);

    final JLabel label_7 = new JLabel("Response Model");
    label_7.setBounds(10, 153, 103, 16);
    responseParametersPanel.add(label_7);

    final JRadioButton optimalCaseRadioButton = new JRadioButton("Optimal Case Scenario");
    responseModelButtonGroup.add(optimalCaseRadioButton);
    optimalCaseRadioButton.setBounds(111, 131, 170, 18);
    responseParametersPanel.add(optimalCaseRadioButton);

    final JRadioButton normalCaseRadioButton = new JRadioButton("Normal Case Scenario");
    normalCaseRadioButton.setSelected(true);
    responseModelButtonGroup.add(normalCaseRadioButton);
    normalCaseRadioButton.setBounds(111, 152, 170, 18);
    responseParametersPanel.add(normalCaseRadioButton);

    final JRadioButton discreteCaseRadioButton = new JRadioButton("Discrete Case Scenario");
    discreteCaseRadioButton.setSelected(true);
    responseModelButtonGroup.add(discreteCaseRadioButton);
    discreteCaseRadioButton.setBounds(111, 173, 170, 18);
    responseParametersPanel.add(discreteCaseRadioButton);

    final JButton previewResponseButton = new JButton("Preview Response Model");
    previewResponseButton.setEnabled(false);
    previewResponseButton.setBounds(24, 198, 157, 28);
    responseParametersPanel.add(previewResponseButton);

    final JButton createResponseButton = new JButton("Create Response Model");
    createResponseButton.setEnabled(false);
    createResponseButton.setBounds(191, 198, 162, 28);
    responseParametersPanel.add(createResponseButton);

    final JButton createResponseAllButton = new JButton("Create Response All");
    createResponseAllButton.setEnabled(false);
    createResponseAllButton.setBounds(111, 232, 157, 28);
    responseParametersPanel.add(createResponseAllButton);

    // SELECT ACTIVITY MODEL //

    final JLabel lblSelectedActivity = new JLabel("Selected Activity");
    lblSelectedActivity.setBounds(10, 21, 130, 16);
    activityModelSelectionPanel.add(lblSelectedActivity);

    JScrollPane activityListScrollPane = new JScrollPane();
    activityListScrollPane.setBounds(20, 39, 355, 143);
    activityModelSelectionPanel.add(activityListScrollPane);

    final JList<String> activitySelectList = new JList<String>();
    activityListScrollPane.setViewportView(activitySelectList);
    activitySelectList.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));

    final JButton commitButton = new JButton("Commit");
    commitButton.setEnabled(false);
    commitButton.setBounds(151, 209, 89, 23);
    pricingSchemePanel.add(commitButton);

    JLabel lblBasicSchema = new JLabel("Basic Schema (Start-End-Value)");
    lblBasicSchema.setBounds(10, 18, 182, 14);
    pricingSchemePanel.add(lblBasicSchema);

    JLabel lblNewSchemastart = new JLabel("New Schema (Start-End-Value)");
    lblNewSchemastart.setBounds(197, 18, 177, 14);
    pricingSchemePanel.add(lblNewSchemastart);

    JScrollPane basicPricingSchemeScrollPane = new JScrollPane();
    basicPricingSchemeScrollPane.setBounds(10, 43, 177, 161);
    pricingSchemePanel.add(basicPricingSchemeScrollPane);

    final JTextPane basicPricingSchemePane = new JTextPane();
    basicPricingSchemeScrollPane.setViewportView(basicPricingSchemePane);
    basicPricingSchemePane.setText("00:00-23:59-0.05");

    JScrollPane newPricingScrollPane = new JScrollPane();
    newPricingScrollPane.setBounds(197, 43, 177, 161);
    pricingSchemePanel.add(newPricingScrollPane);

    final JTextPane newPricingSchemePane = new JTextPane();

    newPricingScrollPane.setViewportView(newPricingSchemePane);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setBounds(682, 390, 265, 33);
    createResponseTab.add(buttonPanel);

    final JButton dailyResponseButton = new JButton("Daily Times");
    dailyResponseButton.setEnabled(false);
    buttonPanel.add(dailyResponseButton);

    final JButton startResponseButton = new JButton("Start Time");

    startResponseButton.setEnabled(false);
    buttonPanel.add(startResponseButton);

    final JPanel exportTab = new JPanel();
    tabbedPane.addTab("Export Models", null, exportTab, null);
    tabbedPane.setEnabledAt(3, false);
    exportTab.setLayout(null);

    // PANELS //

    // DATA IMPORT TAB //

    final JPanel dataFilePanel = new JPanel();
    dataFilePanel
            .setBorder(new TitledBorder(null, "Data File", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    dataFilePanel.setBounds(6, 6, 622, 284);
    importTab.add(dataFilePanel);
    dataFilePanel.setLayout(null);

    final JPanel disaggregationPanel = new JPanel();
    disaggregationPanel.setLayout(null);
    disaggregationPanel.setBorder(
            new TitledBorder(null, "Disaggregation", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    disaggregationPanel.setBounds(629, 6, 567, 284);
    importTab.add(disaggregationPanel);

    final JPanel dataReviewPanel = new JPanel();
    dataReviewPanel.setBorder(
            new TitledBorder(null, "Data Preview", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    dataReviewPanel.setBounds(6, 293, 622, 407);
    importTab.add(dataReviewPanel);
    dataReviewPanel.setLayout(new BorderLayout(0, 0));

    final JPanel consumptionModelPanel = new JPanel();
    consumptionModelPanel.setBounds(629, 293, 567, 407);
    importTab.add(consumptionModelPanel);
    consumptionModelPanel.setBorder(
            new TitledBorder(null, "Consumption Model", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    consumptionModelPanel.setLayout(new BorderLayout(0, 0));

    // TRAINING ACTIVITY TAB //

    final JPanel trainingParametersPanel = new JPanel();
    trainingParametersPanel.setLayout(null);
    trainingParametersPanel.setBorder(
            new TitledBorder(null, "Training Parameters", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    trainingParametersPanel.setBounds(6, 6, 621, 256);
    trainingTab.add(trainingParametersPanel);

    final JPanel applianceSelectionPanel = new JPanel();
    applianceSelectionPanel.setLayout(null);
    applianceSelectionPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Appliance/Activity Selection", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    applianceSelectionPanel.setBounds(630, 6, 557, 256);
    trainingTab.add(applianceSelectionPanel);

    final JPanel expectedPowerPanel = new JPanel();
    expectedPowerPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Expected Power Preview", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    expectedPowerPanel.setBounds(630, 261, 557, 447);
    trainingTab.add(expectedPowerPanel);
    expectedPowerPanel.setLayout(new BorderLayout(0, 0));
    contentPane.setLayout(gl_contentPane);

    // EXPORT TAB //

    JPanel modelExportPanel = new JPanel();
    modelExportPanel.setLayout(null);
    modelExportPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Model Export Selection", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    modelExportPanel.setBounds(10, 11, 596, 267);
    exportTab.add(modelExportPanel);

    final JPanel exportPreviewPanel = new JPanel();
    exportPreviewPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Export Model Preview", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    exportPreviewPanel.setBounds(10, 310, 1187, 387);
    exportTab.add(exportPreviewPanel);
    exportPreviewPanel.setLayout(new BorderLayout(0, 0));

    JPanel exportButtonsPanel = new JPanel();
    exportButtonsPanel.setBounds(322, 279, 536, 33);
    exportTab.add(exportButtonsPanel);

    JPanel connectionPanel = new JPanel();
    connectionPanel.setLayout(null);
    connectionPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Connection Properties", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    connectionPanel.setBounds(606, 11, 581, 267);
    exportTab.add(connectionPanel);

    // COMPONENTS //

    // IMPORT TAB //

    // DATA IMPORT //

    final JLabel lblSource = new JLabel("Data Source:");
    lblSource.setBounds(23, 47, 71, 16);
    dataFilePanel.add(lblSource);

    final JTextField pathField = new JTextField();
    pathField.setEditable(false);
    pathField.setBounds(99, 41, 405, 28);
    dataFilePanel.add(pathField);
    pathField.setColumns(10);

    final JButton dataBrowseButton = new JButton("Browse");
    dataBrowseButton.setBounds(516, 41, 87, 28);
    dataFilePanel.add(dataBrowseButton);

    final JButton resetButton = new JButton("Reset");
    resetButton.setBounds(516, 81, 87, 28);
    dataFilePanel.add(resetButton);

    final JLabel lblDataMeasurementsFrom = new JLabel("Data Measurements From:");
    lblDataMeasurementsFrom.setBounds(23, 90, 154, 16);
    dataFilePanel.add(lblDataMeasurementsFrom);

    final JRadioButton singleApplianceRadioButton = new JRadioButton("Single Appliance");
    singleApplianceRadioButton.setEnabled(false);
    dataMeasurementsButtonGroup.add(singleApplianceRadioButton);
    singleApplianceRadioButton.setBounds(242, 110, 115, 18);
    dataFilePanel.add(singleApplianceRadioButton);

    final JRadioButton installationRadioButton = new JRadioButton("Installation");
    installationRadioButton.setSelected(true);
    installationRadioButton.setEnabled(false);
    dataMeasurementsButtonGroup.add(installationRadioButton);
    installationRadioButton.setBounds(242, 89, 115, 18);
    dataFilePanel.add(installationRadioButton);

    final JLabel labelConsumptionModel = new JLabel("Consumption Model:");
    labelConsumptionModel.setBounds(23, 179, 120, 16);
    dataFilePanel.add(labelConsumptionModel);

    final JButton importDataButton = new JButton("Import Data");
    importDataButton.setEnabled(false);
    importDataButton.setBounds(23, 237, 126, 28);
    dataFilePanel.add(importDataButton);

    final JButton disaggregateButton = new JButton("Disaggregate");
    disaggregateButton.setEnabled(false);
    disaggregateButton.setBounds(216, 237, 147, 28);
    dataFilePanel.add(disaggregateButton);

    final JButton createEventsButton = new JButton("Create Events Dataset");
    createEventsButton.setEnabled(false);
    createEventsButton.setBounds(422, 237, 181, 28);
    dataFilePanel.add(createEventsButton);

    final JTextField consumptionPathField = new JTextField();
    consumptionPathField.setEnabled(false);
    consumptionPathField.setEditable(false);
    consumptionPathField.setColumns(10);
    consumptionPathField.setBounds(99, 197, 405, 28);
    dataFilePanel.add(consumptionPathField);

    final JButton consumptionBrowseButton = new JButton("Browse");
    consumptionBrowseButton.setEnabled(false);
    consumptionBrowseButton.setBounds(516, 197, 87, 28);
    dataFilePanel.add(consumptionBrowseButton);

    JLabel lblTypeOfMeasurements = new JLabel("Type of Measurements");
    lblTypeOfMeasurements.setBounds(23, 141, 154, 16);
    dataFilePanel.add(lblTypeOfMeasurements);

    final JRadioButton activePowerRadioButton = new JRadioButton("Active Power (P)");
    powerButtonGroup.add(activePowerRadioButton);
    activePowerRadioButton.setEnabled(false);
    activePowerRadioButton.setBounds(242, 140, 115, 18);
    dataFilePanel.add(activePowerRadioButton);

    final JRadioButton activeAndReactivePowerRadioButton = new JRadioButton("Active and Reactive Power (P, Q)");
    activeAndReactivePowerRadioButton.setSelected(true);
    powerButtonGroup.add(activeAndReactivePowerRadioButton);
    activeAndReactivePowerRadioButton.setEnabled(false);
    activeAndReactivePowerRadioButton.setBounds(242, 161, 262, 18);
    dataFilePanel.add(activeAndReactivePowerRadioButton);

    // //////////////////
    // DISAGGREGATION //
    // /////////////////

    final JLabel lblAppliancesDetected = new JLabel("Detected Appliances ");
    lblAppliancesDetected.setBounds(18, 33, 130, 16);
    disaggregationPanel.add(lblAppliancesDetected);

    JScrollPane scrollPane_2 = new JScrollPane();
    scrollPane_2.setBounds(145, 31, 396, 231);
    disaggregationPanel.add(scrollPane_2);

    final JList<String> detectedApplianceList = new JList<String>();
    scrollPane_2.setViewportView(detectedApplianceList);
    detectedApplianceList.setEnabled(false);
    detectedApplianceList.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));

    // ////////////////
    // TRAINING TAB //
    // ////////////////

    // TRAINING PARAMETERS //

    final JLabel label_1 = new JLabel("Times Per Day");
    label_1.setBounds(19, 40, 103, 16);
    trainingParametersPanel.add(label_1);

    final JRadioButton timesHistogramRadioButton = new JRadioButton("Histogram");
    timesHistogramRadioButton.setSelected(true);
    timesDailyButtonGroup.add(timesHistogramRadioButton);
    timesHistogramRadioButton.setBounds(160, 38, 87, 18);
    trainingParametersPanel.add(timesHistogramRadioButton);

    final JRadioButton timesNormalRadioButton = new JRadioButton("Normal Distribution");
    timesNormalRadioButton.setEnabled(false);
    timesDailyButtonGroup.add(timesNormalRadioButton);
    timesNormalRadioButton.setBounds(304, 40, 137, 18);
    trainingParametersPanel.add(timesNormalRadioButton);

    JRadioButton timesGaussianRadioButton = new JRadioButton("Gaussian Mixture");
    timesGaussianRadioButton.setEnabled(false);
    timesDailyButtonGroup.add(timesGaussianRadioButton);
    timesGaussianRadioButton.setBounds(478, 38, 137, 18);
    trainingParametersPanel.add(timesGaussianRadioButton);

    final JLabel label_2 = new JLabel("Start Time");
    label_2.setBounds(19, 133, 103, 16);
    trainingParametersPanel.add(label_2);

    final JRadioButton startHistogramRadioButton = new JRadioButton("Histogram");
    startHistogramRadioButton.setSelected(true);
    startTimeButtonGroup.add(startHistogramRadioButton);
    startHistogramRadioButton.setBounds(160, 131, 87, 18);
    trainingParametersPanel.add(startHistogramRadioButton);

    final JRadioButton startNormalRadioButton = new JRadioButton("Normal Distribution");
    // startNormalRadioButton.setEnabled(false);
    startTimeButtonGroup.add(startNormalRadioButton);
    startNormalRadioButton.setBounds(304, 133, 137, 18);
    trainingParametersPanel.add(startNormalRadioButton);

    final JRadioButton startGaussianRadioButton = new JRadioButton("Gaussian Mixture");
    startGaussianRadioButton.setSelected(true);
    startTimeButtonGroup.add(startGaussianRadioButton);
    startGaussianRadioButton.setBounds(478, 131, 137, 18);
    trainingParametersPanel.add(startGaussianRadioButton);

    final JLabel label_3 = new JLabel("Duration");
    label_3.setBounds(19, 86, 103, 16);
    trainingParametersPanel.add(label_3);

    final JRadioButton durationHistogramRadioButton = new JRadioButton("Histogram");
    durationHistogramRadioButton.setSelected(true);
    durationButtonGroup.add(durationHistogramRadioButton);
    durationHistogramRadioButton.setBounds(160, 84, 87, 18);
    trainingParametersPanel.add(durationHistogramRadioButton);

    final JRadioButton durationNormalRadioButton = new JRadioButton("Normal Distribution");
    durationNormalRadioButton.setSelected(true);
    durationButtonGroup.add(durationNormalRadioButton);
    durationNormalRadioButton.setBounds(304, 86, 137, 18);
    trainingParametersPanel.add(durationNormalRadioButton);

    final JRadioButton durationGaussianRadioButton = new JRadioButton("Gaussian Mixture");
    durationButtonGroup.add(durationGaussianRadioButton);
    durationGaussianRadioButton.setBounds(478, 84, 137, 18);
    trainingParametersPanel.add(durationGaussianRadioButton);

    final JButton trainingButton = new JButton("Train");
    trainingButton.setBounds(125, 194, 115, 28);
    trainingParametersPanel.add(trainingButton);

    final JButton trainAllButton = new JButton("Train All");
    trainAllButton.setBounds(366, 194, 115, 28);
    trainingParametersPanel.add(trainAllButton);

    // APPLIANCE SELECTION //

    final JLabel label_4 = new JLabel("Selected Appliance");
    label_4.setBounds(18, 33, 130, 16);
    applianceSelectionPanel.add(label_4);

    JScrollPane scrollPane_1 = new JScrollPane();
    scrollPane_1.setBounds(128, 29, 419, 216);
    applianceSelectionPanel.add(scrollPane_1);

    final JList<String> selectedApplianceList = new JList<String>();
    scrollPane_1.setViewportView(selectedApplianceList);
    selectedApplianceList.setEnabled(false);
    selectedApplianceList.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));

    // DISTRIBUTION SELECTION //

    JPanel distributionSelectionPanel = new JPanel();
    distributionSelectionPanel.setBounds(80, 261, 482, 33);
    trainingTab.add(distributionSelectionPanel);

    final JButton dailyTimesButton = new JButton("Daily Times");
    dailyTimesButton.setEnabled(false);
    distributionSelectionPanel.add(dailyTimesButton);

    final JButton durationButton = new JButton("Duration");
    durationButton.setEnabled(false);
    distributionSelectionPanel.add(durationButton);

    final JButton startTimeButton = new JButton("Start Time");
    startTimeButton.setEnabled(false);
    distributionSelectionPanel.add(startTimeButton);

    final JButton startTimeBinnedButton = new JButton("Start Time Binned");
    startTimeBinnedButton.setEnabled(false);
    distributionSelectionPanel.add(startTimeBinnedButton);

    final JPanel distributionPreviewPanel = new JPanel();
    distributionPreviewPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"),
            "Distribution Preview", TitledBorder.LEADING, TitledBorder.TOP, null, null));
    distributionPreviewPanel.setBounds(6, 299, 621, 409);
    trainingTab.add(distributionPreviewPanel);
    distributionPreviewPanel.setLayout(new BorderLayout(0, 0));

    // //////////////////
    // EXPORT TAB ///////
    // /////////////////

    JLabel exportModelLabel = new JLabel("Select Model");
    exportModelLabel.setBounds(10, 34, 151, 16);
    modelExportPanel.add(exportModelLabel);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(83, 32, 503, 212);
    modelExportPanel.add(scrollPane);

    final JList<String> exportModelList = new JList<String>();
    scrollPane.setViewportView(exportModelList);
    exportModelList.setEnabled(false);
    exportModelList.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));

    // EXPORT TAB //

    final JButton exportDailyButton = new JButton("Daily Times");
    exportDailyButton.setEnabled(false);
    exportButtonsPanel.add(exportDailyButton);

    final JButton exportDurationButton = new JButton("Duration");
    exportDurationButton.setEnabled(false);
    exportButtonsPanel.add(exportDurationButton);

    final JButton exportStartButton = new JButton("Start Time");
    exportStartButton.setEnabled(false);
    exportButtonsPanel.add(exportStartButton);

    final JButton exportStartBinnedButton = new JButton("Start Time Binned");
    exportStartBinnedButton.setEnabled(false);
    exportButtonsPanel.add(exportStartBinnedButton);

    final JButton exportExpectedPowerButton = new JButton("Expected Power");
    exportExpectedPowerButton.setEnabled(false);
    exportButtonsPanel.add(exportExpectedPowerButton);

    JLabel usernameLabel = new JLabel("Username:");
    usernameLabel.setBounds(46, 27, 71, 16);
    connectionPanel.add(usernameLabel);

    final JTextField usernameTextField;
    usernameTextField = new JTextField();
    usernameTextField.setText("user");
    usernameTextField.setColumns(10);
    usernameTextField.setBounds(122, 21, 405, 28);
    connectionPanel.add(usernameTextField);

    final JButton exportButton = new JButton("Export Entity");
    exportButton.setEnabled(false);
    exportButton.setBounds(46, 178, 147, 28);
    connectionPanel.add(exportButton);

    final JButton exportAllBaseButton = new JButton("Export All Base");
    exportAllBaseButton.setEnabled(false);
    exportAllBaseButton.setBounds(203, 178, 177, 28);
    connectionPanel.add(exportAllBaseButton);

    final JButton exportAllResponseButton = new JButton("Export All Response");
    exportAllResponseButton.setEnabled(false);
    exportAllResponseButton.setBounds(390, 178, 181, 28);
    connectionPanel.add(exportAllResponseButton);

    JLabel passwordLabel = new JLabel("Password:");
    passwordLabel.setBounds(46, 62, 71, 16);
    connectionPanel.add(passwordLabel);

    JLabel UrlLabel = new JLabel("URL:");
    UrlLabel.setBounds(46, 105, 71, 16);
    connectionPanel.add(UrlLabel);

    final JTextField urlTextField;
    urlTextField = new JTextField();
    urlTextField.setText("https://160.40.50.233:8443/cassandra/api");
    urlTextField.setColumns(10);
    urlTextField.setBounds(122, 99, 405, 28);
    connectionPanel.add(urlTextField);

    final JButton connectButton = new JButton("Connect");
    connectButton.setEnabled(false);
    connectButton.setBounds(217, 138, 147, 28);
    connectionPanel.add(connectButton);

    final JPasswordField passwordField;
    passwordField = new JPasswordField();
    passwordField.setBounds(122, 60, 405, 28);
    connectionPanel.add(passwordField);

    final JTextField householdNameTextField;
    householdNameTextField = new JTextField();
    householdNameTextField.setEnabled(false);
    householdNameTextField.setBounds(166, 225, 405, 31);
    connectionPanel.add(householdNameTextField);
    householdNameTextField.setColumns(10);

    final JLabel householdNameLabel = new JLabel("Export Household Name:");
    householdNameLabel.setBounds(24, 233, 147, 14);
    connectionPanel.add(householdNameLabel);

    JButton btnOpenPlatform = new JButton("Open Platform");
    btnOpenPlatform.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                Desktop.getDesktop()
                        .browse(new URL("https://cassandra.iti.gr:8443/cassandra/app.html").toURI());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    btnOpenPlatform.setBounds(401, 138, 147, 28);
    connectionPanel.add(btnOpenPlatform);

    // //////////////////
    // ACTIONS ///////
    // /////////////////

    // IMPORT TAB //

    // DATA IMPORT ////

    dataBrowseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the browse button to
         * input the data file on the Data File panel of the Import Data tab.
         * 
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            // Opens the browse panel to find the data set file
            JFileChooser fc = new JFileChooser("./");

            // Adds a filter to the type of files acceptable for selection
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fc.setFileFilter(new MyFilter2());

            int returnVal = fc.showOpenDialog(contentPane);

            // After choosing the file some of the options in the Data File panel
            // are unlocked
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();

                pathField.setText(file.getAbsolutePath());
                importDataButton.setEnabled(true);
                activePowerRadioButton.setEnabled(true);
                activeAndReactivePowerRadioButton.setEnabled(true);
                installationRadioButton.setEnabled(true);
                singleApplianceRadioButton.setEnabled(true);
            }

        }
    });

    consumptionBrowseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the browse button to
         * input the consumption model file on the Data File panel of the Import
         * Data tab.
         * 
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            // Opens the browse panel to find the consumption model file
            JFileChooser fc = new JFileChooser("./");

            // Adds a filter to the type of files acceptable for selection
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fc.setFileFilter(new MyFilter());

            int returnVal = fc.showOpenDialog(contentPane);

            // After choosing the file some of the options in the Data File panel
            // are unlocked
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();

                consumptionPathField.setText(file.getAbsolutePath());
                createEventsButton.setEnabled(true);
            }

        }
    });

    resetButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the reset button
         * on the Data File panel of the Import Data tab. All the imported and
         * created entities are removed and the Training Module goes back to its
         * initial state.
         * 
         */
        @Override
        public void actionPerformed(ActionEvent e) {

            // Cleaning the Import Data tab components
            pathField.setText("");
            consumptionPathField.setText("");
            importDataButton.setEnabled(false);
            disaggregateButton.setEnabled(false);
            createEventsButton.setEnabled(false);
            installation = new Installation();
            dataBrowseButton.setEnabled(true);
            consumptionBrowseButton.setEnabled(false);
            installationRadioButton.setEnabled(false);
            installationRadioButton.setSelected(true);
            singleApplianceRadioButton.setEnabled(false);
            activePowerRadioButton.setEnabled(false);
            activeAndReactivePowerRadioButton.setEnabled(false);
            activeAndReactivePowerRadioButton.setSelected(true);
            dataReviewPanel.removeAll();
            dataReviewPanel.updateUI();
            consumptionModelPanel.removeAll();
            consumptionModelPanel.updateUI();
            detectedApplianceList.setSelectedIndex(-1);
            detectedAppliances.clear();
            detectedApplianceList.setListData(new String[0]);
            detectedApplianceList.repaint();

            // Cleaning the Training Activity Models tab components
            distributionPreviewPanel.removeAll();
            distributionPreviewPanel.updateUI();
            expectedPowerPanel.removeAll();
            expectedPowerPanel.updateUI();
            selectedApplianceList.setSelectedIndex(-1);
            selectedAppliances.clear();
            selectedApplianceList.setListData(new String[0]);
            selectedApplianceList.repaint();
            timesHistogramRadioButton.setSelected(true);
            durationNormalRadioButton.setSelected(true);
            startGaussianRadioButton.setSelected(true);

            // Cleaning the Create Response Models tab components
            sensitivitySlider.setValue(50);
            awarenessSlider.setValue(50);
            normalCaseRadioButton.setSelected(true);
            previewResponseButton.setEnabled(false);
            createResponseButton.setEnabled(false);
            createResponseAllButton.setEnabled(false);
            pricingPreviewPanel.removeAll();
            pricingPreviewPanel.updateUI();
            responsePanel.removeAll();
            responsePanel.updateUI();
            activitySelectList.setSelectedIndex(-1);
            activityModels.clear();
            activitySelectList.setListData(new String[0]);
            activitySelectList.repaint();
            basicPricingSchemePane.setText("00:00-23:59-0.05");
            newPricingSchemePane.setText("");
            commitButton.setEnabled(false);
            dailyResponseButton.setEnabled(false);
            startResponseButton.setEnabled(false);

            // Cleaning the Export Models tab components
            exportModelList.setSelectedIndex(-1);
            exportModels.clear();
            exportModelList.setListData(new String[0]);
            exportModelList.repaint();
            exportPreviewPanel.removeAll();
            exportPreviewPanel.updateUI();
            exportDailyButton.setEnabled(false);
            exportDurationButton.setEnabled(false);
            exportStartButton.setEnabled(false);
            exportStartBinnedButton.setEnabled(false);
            exportExpectedPowerButton.setEnabled(false);
            exportButton.setEnabled(false);
            exportAllBaseButton.setEnabled(false);
            exportAllResponseButton.setEnabled(false);
            householdNameTextField.setEnabled(false);

            // Disabling the necessary tabs
            tabbedPane.setEnabledAt(1, false);
            tabbedPane.setEnabledAt(2, false);
            tabbedPane.setEnabledAt(3, false);

            // Clearing the arrayList in need
            tempAppliances.clear();
            tempActivities.clear();

            // Removing temporary files
            Utils.cleanFiles();
            trained = false;

        }
    });

    singleApplianceRadioButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Single Appliance
         * radio button on the Data File panel of the Import Data tab.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            consumptionPathField.setEnabled(false);
            consumptionBrowseButton.setEnabled(false);
            consumptionPathField.setText("");
        }
    });

    installationRadioButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Installation
         * radio button on the Data File panel of the Import Data tab.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            consumptionPathField.setEnabled(false);
            consumptionBrowseButton.setEnabled(false);
            consumptionPathField.setText("");
        }
    });

    importDataButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Import Data
         * button on the Data File panel of the Import Data tab.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                // Change the state of some components
                installationRadioButton.setEnabled(false);
                singleApplianceRadioButton.setEnabled(false);
                importDataButton.setEnabled(false);
                dataBrowseButton.setEnabled(false);
                activePowerRadioButton.setEnabled(false);
                activeAndReactivePowerRadioButton.setEnabled(false);

                // Check if both active and reactive activeOnly data set are available
                boolean power = activePowerRadioButton.isSelected();
                int parse = -1;

                // Parsing the measurements file
                try {
                    parse = Utils.parseMeasurementsFile(pathField.getText(), power);
                } catch (IOException e2) {
                    e2.printStackTrace();
                }

                // If everything is OK
                if (parse == -1) {
                    try {
                        // Creating new installation
                        installation = new Installation(pathField.getText(), power);
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }

                    // Show the measurements in the preview chart
                    ChartPanel chartPanel = null;
                    try {
                        chartPanel = installation.measurementsChart();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

                    dataReviewPanel.add(chartPanel, BorderLayout.CENTER);
                    dataReviewPanel.validate();

                    disaggregateButton.setEnabled(false);
                    createEventsButton.setEnabled(false);

                    // Enable the appropriate buttons given source of measurements
                    if (installationRadioButton.isSelected()) {
                        disaggregateButton.setEnabled(true);
                    } else if (singleApplianceRadioButton.isSelected()) {
                        consumptionPathField.setEnabled(true);
                        consumptionBrowseButton.setEnabled(true);

                    }

                    // Add installation to the export models list
                    exportModels.addElement(installation.toString());
                    exportModels.addElement(installation.getPerson().getName());
                    householdNameTextField.setText(installation.getName());

                    // Enable Export Models tab
                    exportModelList.setEnabled(true);
                    exportModelList.setModel(exportModels);
                    tabbedPane.setEnabledAt(3, true);

                }
                // In case of an error during the measurement parsing show the line of
                // error and reset settings.
                else {
                    JFrame error = new JFrame();

                    JOptionPane.showMessageDialog(error,
                            "Parsing measurements file failed. The problem seems to be in line " + parse
                                    + ".Check the selected buttons and the file provided and try again.",
                            "Inane error", JOptionPane.ERROR_MESSAGE);
                    resetButton.doClick();
                }
            } finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    disaggregateButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Disaggregate
         * button on the Data File panel of the Import Data tab in order to
         * automatically analyse the data set and extract the appliances and
         * activities within.
         */
        @Override
        public void actionPerformed(ActionEvent e) {

            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                // Get auxiliary files containing appliances and activities which are
                // the output of the disaggregation process.
                String filename = pathField.getText();

                File file = new File(filename);

                String folder = file.getParent() + "/";

                String fileNameWithExtension = file.getName();

                String fileName = file.getName().substring(0, file.getName().length() - 4);

                filename = pathField.getText().substring(0, pathField.getText().length() - 4);
                File appliancesFile = new File(Constants.resultFolder + fileName + "ApplianceList.csv");
                File activitiesFile = new File(Constants.resultFolder + fileName + "ActivityList.csv");

                if ((Constants.USE_FILES == false) || (!appliancesFile.exists() && !activitiesFile.exists())) {
                    try {
                        System.out.println("IN!!!");

                        Disaggregate dis = new Disaggregate(folder, fileNameWithExtension);

                        appliancesFile = new File(Constants.resultFolder + fileName + "ApplianceList.csv");
                        activitiesFile = new File(Constants.resultFolder + fileName + "ActivityList.csv");
                    } catch (Exception e2) {
                        System.out.println("Missing File");
                        e2.printStackTrace();
                    }
                }

                // If these exist, disaggregation was successful and the procedure can
                // continue
                if (appliancesFile.exists() && activitiesFile.exists()) {

                    // Read appliance file and start appliance parsing
                    Scanner input = null;
                    try {
                        input = new Scanner(appliancesFile);
                    } catch (FileNotFoundException e1) {
                        e1.printStackTrace();
                    }
                    String nextLine;
                    String[] line;

                    while (input.hasNext()) {
                        nextLine = input.nextLine();
                        line = nextLine.split(",");

                        String name = line[1] + " " + line[0];
                        // String activity = line[1];
                        String activity = name;
                        String[] temp = line[0].split(" ");

                        String type = "";

                        if (temp.length == 1)
                            type = temp[0];
                        else {
                            for (int i = 0; i < temp.length - 1; i++)
                                type += temp[i] + " ";
                            type = type.trim();

                        }

                        boolean refFlag = activity.contains("Refrigeration");
                        boolean wmFlag = name.contains("Washing");

                        double p = 0, q = 0;
                        int distance = 0, duration = 0;

                        if (refFlag) {
                            p = Double.parseDouble(line[2]);
                            q = Double.parseDouble(line[3]);
                            duration = Integer.parseInt(line[4]);
                            distance = Integer.parseInt(line[5]);
                            // For each appliance found in the file, an temporary Appliance
                            // Entity is created.

                            tempAppliances.add(new ApplianceTemp(name, installation.getName(), type, activity,
                                    p, q, duration, distance));
                        } else if (wmFlag) {
                            double[] pValues = new double[line.length / 2 - 1];
                            double[] qValues = new double[line.length / 2 - 1];
                            // For each appliance found in the file, an temporary Appliance
                            // Entity is created.

                            for (int i = 0; i < pValues.length; i++) {
                                pValues[i] = Double.parseDouble(line[2 + 2 * i]);
                                qValues[i] = Double.parseDouble(line[3 + 2 * i]);
                            }

                            tempAppliances.add(new ApplianceTemp(name, installation.getName(), type, activity,
                                    pValues, qValues));
                        } else {
                            p = Double.parseDouble(line[2]);
                            q = Double.parseDouble(line[3]);
                            // For each appliance found in the file, an temporary Appliance
                            // Entity is created.

                            tempAppliances
                                    .add(new ApplianceTemp(name, installation.getName(), type, activity, p, q));
                        }
                    }

                    System.out.println("Appliances:" + tempAppliances.size());

                    input.close();

                    // Read activity file and start activity parsing

                    try {
                        input = new Scanner(activitiesFile);
                    } catch (FileNotFoundException e1) {
                        System.out.println("Problem with activity file.");
                        e1.printStackTrace();
                    }

                    while (input.hasNext()) {
                        nextLine = input.nextLine();
                        line = nextLine.split(",");

                        // System.out.println(Arrays.toString(line));
                        // String name = line[0];
                        // String activity = line[1];
                        String activity = line[1] + " " + line[0];
                        String type = line[1];
                        int start = Integer.parseInt(line[2]);
                        int end = Integer.parseInt(line[3]);

                        // Search for existing activity
                        int activityIndex = findActivity(activity);

                        // if not found, create a new one
                        if (activityIndex == -1) {
                            // System.out.println("In!");
                            ActivityTemp newActivity = new ActivityTemp(activity, type);
                            newActivity.addEvent(start, end);
                            tempActivities.add(newActivity);
                            // System.out.println(tempActivities.toString());

                        }
                        // else add data to the found activity
                        else
                            tempActivities.get(activityIndex).addEvent(start, end);
                    }

                    // This is hard copied for now
                    ArrayList<ActivityTemp> activities = findAllActivity("Refrigeration");
                    for (ActivityTemp activityTemp : activities) {
                        tempActivities.remove(activityTemp);
                        System.out.println("Refrigeration Removed");
                    }

                    int index = findActivity("Standby");
                    if (index != -1) {
                        tempActivities.remove(index);
                        System.out.println("Standby Consumption Removed");
                    }
                    // TODO Add these lines in case we want to remove activities with
                    // small sampling number

                    // System.out.println(tempActivities.size());
                    // for (int i = tempActivities.size() - 1; i >= 0; i--)
                    // if (tempActivities.get(i).getEvents().size() < threshold)
                    // tempActivities.remove(i);

                    // Create an event file for each activity, in order to be able to
                    // use
                    // it for training the behaviour models if asked from the user
                    for (int i = 0; i < tempActivities.size(); i++) {
                        // tempActivities.get(i).status();
                        try {
                            tempActivities.get(i).createEventFile();
                        } catch (IOException e1) {
                            System.out.println("Problem with creating events file.");
                            e1.printStackTrace();
                        }
                    }

                    input.close();

                    // Add each found appliance (after converting temporary appliance to
                    // normal appliance) in the installation Entity, to the detected
                    // appliance and export models list
                    for (ApplianceTemp temp : tempAppliances) {

                        Appliance tempAppliance = temp.toAppliance();

                        installation.addAppliance(tempAppliance);
                        detectedAppliances.addElement(tempAppliance.toString());
                        exportModels.addElement(tempAppliance.toString());

                    }

                    // Add appliances corresponding to each activity, remove activities
                    // without appliances and add activities to the selected activities
                    // list.
                    for (int i = tempActivities.size() - 1; i >= 0; i--) {

                        tempActivities.get(i).setAppliances(findAppliances(tempActivities.get(i)));
                        if (tempActivities.get(i).getAppliances().size() == 0) {
                            tempActivities.remove(i);
                        } else
                            selectedAppliances.addElement(tempActivities.get(i).toString());

                    }

                }
                // In case of an error.
                else {

                    int temp = 8 + ((int) (Math.random() * 2));

                    for (int i = 0; i < temp; i++) {

                        String name = "Appliance " + i;
                        String powerModel = "";
                        String reactiveModel = "";
                        int tempIndex = i % 5;
                        switch (tempIndex) {
                        case 0:
                            powerModel = "{\"n\":1,\"params\":[{\"n\":1,\"values\":[{\"p\":1900,\"d\":1,\"s\":0}]},{\"n\":0,\"values\":[{\"p\":300,\"d\":1,\"s\":0}]}]}";
                            reactiveModel = "{\"n\":1,\"params\":[{\"n\":1,\"values\":[{\"q\":-40,\"d\":1,\"s\":0}]},{\"n\":0,\"values\":[{\"q\":-10,\"d\":1,\"s\":0}]}]}";
                            break;
                        case 1:
                            powerModel = "{ \"n\" : 0, \"params\" : [{ \"n\" : 1, \"values\" : [ {\"p\" : 140.0, \"d\" : 20, \"s\": 0.0}]}]}";
                            reactiveModel = "{ \"n\" : 0, \"params\" : [{ \"n\" : 1, \"values\" : [ {\"q\" : 120.0, \"d\" : 20, \"s\": 0.0}]}]}";
                            break;
                        case 2:
                            powerModel = "{ \"n\" : 0, \"params\" : [{ \"n\" : 1, \"values\" : [ {\"p\" : 95.0, \"d\" : 20, \"s\": 0.0}, {\"p\" :80.0, \"d\" : 18, \"s\": 0.0}, {\"p\" : 0.0, \"d\" : 73, \"s\": 0.0}]}]}]}";
                            reactiveModel = "{ \"n\" : 0, \"params\" : [{ \"n\" : 1, \"values\" : [ {\"q\" : 0.0, \"d\" : 20, \"s\": 0.0}, {\"q\" : 0.0, \"d\" : 18, \"s\": 0.0}, {\"q\" : 0.0, \"d\" : 73, \"s\": 0.0}]}]}]}";
                            break;
                        case 3:
                            powerModel = "{ \"n\" : 0, \"params\" : [{ \"n\" : 1, \"values\" : [ {\"p\" : 30.0, \"d\" : 20, \"s\": 0.0}]}]}";
                            reactiveModel = "{ \"n\" : 0, \"params\" : [{ \"n\" : 1, \"values\" : [ {\"q\" : -5.0, \"d\" : 20, \"s\": 0.0}]}]}";
                            break;
                        case 4:
                            powerModel = "{\"n\":1,\"params\":[{\"n\":1,\"values\":[{\"p\":150,\"d\":25,\"s\":0},{\"p\":2000,\"d\":13,\"s\":0},{\"p\":100,\"d\":62,\"s\":0}]}]}";
                            reactiveModel = "{\"n\":1,\"params\":[{\"n\":1,\"values\":[{\"q\":400,\"d\":25,\"s\":0},{\"q\":200,\"d\":13,\"s\":0},{\"q\":300,\"d\":62,\"s\":0}]}]}";
                            break;
                        }

                        Appliance tempAppliance = new Appliance(name, installation.getName(), powerModel,
                                reactiveModel, "Demo/eventsAll" + tempIndex + ".csv");

                        installation.addAppliance(tempAppliance);
                        detectedAppliances.addElement(tempAppliance.toString());
                        selectedAppliances.addElement(tempAppliance.toString());
                        exportModels.addElement(tempAppliance.toString());
                    }
                }

                // Enable all appliance/activity lists
                detectedApplianceList.setEnabled(true);
                detectedApplianceList.setModel(detectedAppliances);
                detectedApplianceList.setSelectedIndex(0);

                tabbedPane.setEnabledAt(1, true);
                selectedApplianceList.setEnabled(true);
                selectedApplianceList.setModel(selectedAppliances);

                // exportModelList.setEnabled(true);
                // exportModelList.setModel(exportModels);
                // tabbedPane.setEnabledAt(3, true);

                // Disable unnecessary buttons.
                disaggregateButton.setEnabled(false);
                createEventsButton.setEnabled(false);
            } finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    createEventsButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Create Events
         * button on the Data File panel of the Import Data tab. This button is
         * used when there is a single appliance with an known consumption model
         * so that the events can be extracted automatically from the data set.
         * Used for presentation purposes only since is depricated by the
         * disaggregation function.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                // Parse the consumption model file
                File file = new File(consumptionPathField.getText());
                String temp = file.getName();
                temp = temp.replace(".", " ");
                String name = temp.split(" ")[0];

                Appliance appliance = null;
                try {

                    int rand = (int) (Math.random() * 5);

                    appliance = new Appliance(name, consumptionPathField.getText(),
                            consumptionPathField.getText(), "Demo/eventsAll" + rand + ".csv", installation,
                            activePowerRadioButton.isSelected());
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                // Add appliance to the installation entity
                installation.addAppliance(appliance);

                // Enable all appliance/activity lists
                detectedAppliances.addElement(appliance.toString());
                selectedAppliances.addElement(appliance.toString());
                exportModels.addElement(appliance.toString());

                detectedApplianceList.setEnabled(true);
                detectedApplianceList.setModel(detectedAppliances);
                detectedApplianceList.setSelectedIndex(0);

                tabbedPane.setEnabledAt(1, true);
                selectedApplianceList.setEnabled(true);
                selectedApplianceList.setModel(selectedAppliances);

                // exportModelList.setEnabled(true);
                // exportModelList.setModel(exportModels);
                // tabbedPane.setEnabledAt(3, true);

                // Disable unnecessary buttons.
                disaggregateButton.setEnabled(false);
                createEventsButton.setEnabled(false);
            } finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    // APPLIANCE DETECTION //
    detectedApplianceList.addListSelectionListener(new ListSelectionListener() {
        /**
         * This function is called when the user selects an appliance from the
         * list of Detected Appliances on the Disaggregation panel of the Import
         * Data tab. Then the corresponding consumption model is presented in the
         * Consumption Model Preview panel.
         */
        @Override
        public void valueChanged(ListSelectionEvent e) {

            consumptionModelPanel.removeAll();
            consumptionModelPanel.updateUI();

            if (detectedAppliances.size() >= 1) {

                String selection = detectedApplianceList.getSelectedValue();

                Appliance current = installation.findAppliance(selection);

                ChartPanel chartPanel = current.consumptionGraph();

                consumptionModelPanel.add(chartPanel, BorderLayout.CENTER);
                consumptionModelPanel.validate();

            }
        }
    });

    // // TRAINING TAB //
    trainingTab.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentShown(ComponentEvent arg0) {
            selectedApplianceList.setSelectedIndex(0);
        }
    });

    trainingButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Train button on
         * the Training Parameters panel of the Train Activity Models tab. It
         * contains the procedure needed to create an activity model based on the
         * event set of the appliance or activity.
         */
        @Override
        public void actionPerformed(ActionEvent e) {

            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            responsePanel.removeAll();
            responsePanel.validate();
            pricingPreviewPanel.removeAll();
            pricingPreviewPanel.validate();
            previewResponseButton.setEnabled(false);
            createResponseButton.setEnabled(false);
            createResponseAllButton.setEnabled(false);
            dailyResponseButton.setEnabled(false);
            startResponseButton.setEnabled(false);

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                // Searching for existing activity or appliance.
                String selection = selectedApplianceList.getSelectedValue();
                ActivityTemp activity = null;

                if (tempActivities.size() > 0)
                    activity = tempActivities.get(findActivity(selection));

                Appliance current = installation.findAppliance(selection);

                String startTime, duration, dailyTimes;

                // Check for the selected distribution methods for training.
                if (timesHistogramRadioButton.isSelected())
                    dailyTimes = "Histogram";
                else if (timesNormalRadioButton.isSelected())
                    dailyTimes = "Normal";
                else
                    dailyTimes = "GMM";

                if (durationHistogramRadioButton.isSelected())
                    duration = "Histogram";
                else if (durationNormalRadioButton.isSelected())
                    duration = "Normal";
                else
                    duration = "GMM";

                if (startHistogramRadioButton.isSelected())
                    startTime = "Histogram";
                else if (startNormalRadioButton.isSelected())
                    startTime = "Normal";
                else
                    startTime = "GMM";

                String[] distributions = { dailyTimes, duration, startTime, "Histogram" };

                // If the selected object from the list is an appliance the training
                // procedure for the appliance begins.
                if (activity == null) {

                    try {
                        installation.getPerson().train(current, distributions);
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
                // If the selected object from the list is an activity the training
                // procedure for the activity begins.
                else {

                    try {
                        installation.getPerson().train(activity, distributions);
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

                }

                // System.out.println("Training OK!");

                distributionPreviewPanel.removeAll();
                distributionPreviewPanel.updateUI();

                expectedPowerPanel.removeAll();
                expectedPowerPanel.updateUI();

                // Show the distribution created on the Distribution Preview Panel
                ActivityModel activityModel = installation.getPerson().findActivity(selection, true);

                if (activityModel == null)
                    activityModel = installation.getPerson().findActivity(current);

                ChartPanel chartPanel = activityModel.createDailyTimesDistributionChart();
                distributionPreviewPanel.add(chartPanel, BorderLayout.CENTER);
                distributionPreviewPanel.validate();

                chartPanel = activityModel.createExpectedPowerChart();
                expectedPowerPanel.add(chartPanel, BorderLayout.CENTER);
                expectedPowerPanel.validate();

                // Add the Activity model to the list of trained Activity models of
                // the Create Response Models tab
                int size = activitySelectList.getModel().getSize();

                if (size > 0) {
                    activityModels = (DefaultListModel<String>) activitySelectList.getModel();
                    if (activityModels.contains(activityModel.getName()) == false)
                        activityModels.addElement(activityModel.getName());
                } else {
                    activityModels = new DefaultListModel<String>();
                    activityModels.addElement(activityModel.getName());
                    activitySelectList.setEnabled(true);
                }

                activitySelectList.setModel(activityModels);

                // Add the trained model to the export list also.
                size = exportModelList.getModel().getSize();
                if (size > 0) {
                    exportModels = (DefaultListModel<String>) exportModelList.getModel();
                    if (exportModels.contains(activityModel.getName()) == false)
                        exportModels.addElement(activityModel.getName());
                } else {
                    exportModels = new DefaultListModel<String>();
                    exportModels.addElement(activityModel.getName());
                    exportModelList.setEnabled(true);
                }

                // Enable some buttons necessary to show the results.
                dailyTimesButton.setEnabled(true);
                durationButton.setEnabled(true);
                startTimeButton.setEnabled(true);
                startTimeBinnedButton.setEnabled(true);

                exportModelList.setModel(exportModels);

                exportDailyButton.setEnabled(true);
                exportDurationButton.setEnabled(true);
                exportStartButton.setEnabled(true);
                exportStartBinnedButton.setEnabled(true);

                tabbedPane.setEnabledAt(2, true);
            }

            finally {
                root.setCursor(Cursor.getDefaultCursor());
                trained = true;
            }
        }
    });

    trainAllButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Train All button on
         * the Training Parameters panel of the Train Activity Models tab. It
         * is iterating the aforementioned training procedure to each of the
         * objects on the list.
         */
        @Override
        public void actionPerformed(ActionEvent e) {

            responsePanel.removeAll();
            responsePanel.validate();
            pricingPreviewPanel.removeAll();
            pricingPreviewPanel.validate();
            previewResponseButton.setEnabled(false);
            createResponseButton.setEnabled(false);
            createResponseAllButton.setEnabled(false);
            dailyResponseButton.setEnabled(false);
            startResponseButton.setEnabled(false);

            for (int i = 0; i < selectedApplianceList.getModel().getSize(); i++) {
                selectedApplianceList.setSelectedIndex(i);
                trainingButton.doClick();
            }
        }
    });

    dailyTimesButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Daily Times button on
         * the Distribution Preview panel of the Train Activity Models tab. It
         * shows the Daily Times Distribution for the selected object from the
         * list if available.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            distributionPreviewPanel.removeAll();
            distributionPreviewPanel.updateUI();

            String selection = selectedApplianceList.getSelectedValue();

            Appliance current = installation.findAppliance(selection);

            ActivityModel activityModel = installation.getPerson().findActivity(selection, true);

            if (activityModel == null)
                activityModel = installation.getPerson().findActivity(current);

            ChartPanel chartPanel = activityModel.createDailyTimesDistributionChart();
            distributionPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            distributionPreviewPanel.validate();

        }
    });

    startTimeBinnedButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Start Time Binned
         * button on the Distribution Preview panel of the Train Activity
         * Models tab. It shows the Start Time Binned Distribution for the
         * selected object from the list if available.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            distributionPreviewPanel.removeAll();
            distributionPreviewPanel.updateUI();

            String selection = selectedApplianceList.getSelectedValue();

            Appliance current = installation.findAppliance(selection);

            ActivityModel activityModel = installation.getPerson().findActivity(selection, true);

            if (activityModel == null)
                activityModel = installation.getPerson().findActivity(current);

            ChartPanel chartPanel = activityModel.createStartTimeBinnedDistributionChart();
            distributionPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            distributionPreviewPanel.validate();

        }
    });

    startTimeButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Start Time
         * button on the Distribution Preview panel of the Train Activity
         * Models tab. It shows the Start Time Distribution for the selected
         * object from the list if available.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            distributionPreviewPanel.removeAll();
            distributionPreviewPanel.updateUI();

            String selection = selectedApplianceList.getSelectedValue();

            Appliance current = installation.findAppliance(selection);

            ActivityModel activityModel = installation.getPerson().findActivity(selection, true);

            if (activityModel == null)
                activityModel = installation.getPerson().findActivity(current);

            ChartPanel chartPanel = activityModel.createStartTimeDistributionChart();
            distributionPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            distributionPreviewPanel.validate();

        }
    });

    durationButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Duration
         * button on the Distribution Preview panel of the Train Activity
         * Models tab. It shows the Duration Distribution for the selected
         * object from the list if available.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            distributionPreviewPanel.removeAll();
            distributionPreviewPanel.updateUI();

            String selection = selectedApplianceList.getSelectedValue();

            Appliance current = installation.findAppliance(selection);

            ActivityModel activityModel = installation.getPerson().findActivity(selection, true);

            if (activityModel == null)
                activityModel = installation.getPerson().findActivity(current);

            ChartPanel chartPanel = activityModel.createDurationDistributionChart();
            distributionPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            distributionPreviewPanel.validate();

        }
    });

    selectedApplianceList.addListSelectionListener(new ListSelectionListener() {
        /**
         * This function is called when the user selects an appliance or activity
         * from the list of Selected Appliances on the Appliance / Activity
         * Selection panel of the Train Activity Models tab. Then an example
         * corresponding consumption model is presented in the Consumption Model
         * Preview panel.
         */
        @Override
        public void valueChanged(ListSelectionEvent arg0) {

            ChartPanel chartPanel = null, chartPanel2 = null, chartPanel3 = null;
            expectedPowerPanel.removeAll();
            expectedPowerPanel.updateUI();
            distributionPreviewPanel.removeAll();
            distributionPreviewPanel.updateUI();

            // If there are any appliances / activities on the list
            if (selectedAppliances.size() >= 1) {

                // Find the corresponding appliance / activity and show its
                // consumption model
                String selection = selectedApplianceList.getSelectedValue();

                Appliance currentAppliance = installation.findAppliance(selection);

                ActivityModel activityModel = installation.getPerson().findActivity(selection, true);

                // If there is also an Activity model trained, show the corresponding
                // distribution charts on the Distribution Preview panel

                if (currentAppliance != null)
                    activityModel = installation.getPerson().findActivity(currentAppliance);

                if (activityModel == null)
                    activityModel = installation.getPerson().findActivity(selection, true);

                if (activityModel != null) {

                    dailyTimesButton.setEnabled(true);
                    durationButton.setEnabled(true);
                    startTimeButton.setEnabled(true);
                    startTimeBinnedButton.setEnabled(true);

                    chartPanel2 = activityModel.createDailyTimesDistributionChart();
                    distributionPreviewPanel.add(chartPanel2, BorderLayout.CENTER);
                    distributionPreviewPanel.validate();
                    distributionPreviewPanel.updateUI();

                    chartPanel3 = activityModel.createExpectedPowerChart();
                    expectedPowerPanel.add(chartPanel3, BorderLayout.CENTER);
                    expectedPowerPanel.validate();
                    expectedPowerPanel.updateUI();

                } else {
                    dailyTimesButton.setEnabled(false);
                    durationButton.setEnabled(false);
                    startTimeButton.setEnabled(false);
                    startTimeBinnedButton.setEnabled(false);
                }
            }

        }
    });

    // RESPONSE TAB //

    createResponseTab.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentHidden(ComponentEvent arg0) {
            activitySelectList.setSelectedIndex(0);

        }

        @Override
        public void componentShown(ComponentEvent arg0) {
            activitySelectList.setSelectedIndex(0);
        }
    });

    previewResponseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Preview Response
         * button on the Response Parameters panel of the Create Response Models
         * tab. This button is enabled after selecting activity model, response
         * type and pricing for testing and presents a preview of the response
         * model that may be extracted.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                responsePanel.removeAll();

                // Find the selected activity
                ActivityModel activity = installation.getPerson()
                        .findActivity(activitySelectList.getSelectedValue(), false);

                int response = -1;

                // Check for the selected response type
                if (optimalCaseRadioButton.isSelected())
                    response = 0;
                else if (normalCaseRadioButton.isSelected())
                    response = 1;
                else
                    response = 2;

                // Parse the pricing schemes
                double[] basicScheme = Utils.parseScheme(basicPricingSchemePane.getText());
                double[] newScheme = Utils.parseScheme(newPricingSchemePane.getText());

                float awareness = (float) (awarenessSlider.getValue()) / 100;
                float sensitivity = (float) (sensitivitySlider.getValue()) / 100;

                System.out.println("Awareness: " + awareness + " Sensitivity: " + sensitivity);

                // Create a preview chart of the response model
                ChartPanel chartPanel = installation.getPerson().previewResponse(activity, response,
                        basicScheme, newScheme, awareness, sensitivity);

                responsePanel.add(chartPanel, BorderLayout.CENTER);
                responsePanel.validate();

                createResponseButton.setEnabled(true);
                createResponseAllButton.setEnabled(true);
                dailyResponseButton.setEnabled(true);
                startResponseButton.setEnabled(true);
            } finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    createResponseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Create Response Model
         * button on the Response Parameters panel of the Create Response Models
         * tab. This button is enabled after preview results of the selected
         * activity model, response type and pricing for testing and creates the
         * response model for the user.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                exportPreviewPanel.removeAll();
                exportPreviewPanel.updateUI();

                int responseType = -1;
                String responseString = "";
                // Check for the selected response type
                if (optimalCaseRadioButton.isSelected()) {
                    responseType = 0;
                    responseString = "Optimal";
                } else if (normalCaseRadioButton.isSelected()) {
                    responseType = 1;
                    responseString = "Normal";
                } else if (discreteCaseRadioButton.isSelected()) {
                    responseType = 2;
                    responseString = "Discrete";
                }

                // Parse the pricing schemes
                double[] basicScheme = Utils.parseScheme(basicPricingSchemePane.getText());
                double[] newScheme = Utils.parseScheme(newPricingSchemePane.getText());

                // Create the response model
                ActivityModel activity = installation.getPerson()
                        .findActivity(activitySelectList.getSelectedValue(), false);

                String response = "";

                float awareness = (float) (awarenessSlider.getValue()) / 100;
                float sensitivity = (float) (sensitivitySlider.getValue()) / 100;

                System.out.println("Awareness: " + awareness + " Sensitivity: " + sensitivity);

                try {
                    response = installation.getPerson().createResponse(activity, responseType, basicScheme,
                            newScheme, awareness, sensitivity);
                } catch (IOException exc) {

                    exc.printStackTrace();
                }

                // Add the response model extracted to the export model list.
                int size = exportModelList.getModel().getSize();
                // System.out.println(size);

                if (size > 0) {
                    exportModels = (DefaultListModel<String>) exportModelList.getModel();

                    String response2 = "", response3 = "";
                    if (responseString.equalsIgnoreCase("Optimal")) {
                        response2 = response.replace(responseString, "Normal");
                        response3 = response.replace(responseString, "Discrete");
                    } else if (responseString.equalsIgnoreCase("Normal")) {
                        response2 = response.replace(responseString, "Optimal");
                        response3 = response.replace(responseString, "Discrete");
                    } else {
                        response2 = response.replace(responseString, "Optimal");
                        response3 = response.replace(responseString, "Normal");
                    }

                    if (exportModels.contains(response2))
                        exportModels.removeElement(response2);
                    if (exportModels.contains(response3))
                        exportModels.removeElement(response3);

                    if (exportModels.contains(response) == false)
                        exportModels.addElement(response);
                } else {
                    exportModels = new DefaultListModel<String>();
                    exportModels.addElement(response);
                    exportModelList.setEnabled(true);
                }
                exportModelList.setModel(exportModels);

                if (manyFlag == false) {

                    JFrame success = new JFrame();

                    JOptionPane.showMessageDialog(success,
                            "The response model " + response + " was created successfully",
                            "Response Model Created", JOptionPane.INFORMATION_MESSAGE);
                }
            }

            finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    createResponseAllButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Create Response All
         * button on the Response Parameters panel of the Create Response Models
         * tab. This is achieved by iterating the procedure above for all the
         * available activity models in the list.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {
            manyFlag = true;

            for (int i = 0; i < activitySelectList.getModel().getSize(); i++) {
                activitySelectList.setSelectedIndex(i);
                createResponseButton.doClick();
            }

            JFrame success = new JFrame();

            JOptionPane.showMessageDialog(success, "The response models were created successfully",
                    "Response Models Created", JOptionPane.INFORMATION_MESSAGE);

            manyFlag = false;
        }
    });

    newPricingSchemePane.addKeyListener(new KeyAdapter() {
        @Override
        public void keyTyped(KeyEvent arg0) {
            commitButton.setEnabled(true);
        }
    });

    basicPricingSchemePane.addCaretListener(new CaretListener() {
        @Override
        public void caretUpdate(CaretEvent arg0) {
            commitButton.setEnabled(true);
        }
    });

    commitButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Commit button on the
         * Pricing Scheme panel of the Create Response Models tab. This button is
         * enabled after adding the two pricing schemes that are prerequisites for
         * the creation of a response model.
         */
        @Override
        public void actionPerformed(ActionEvent e) {

            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                boolean basicScheme = false;
                boolean newScheme = false;
                int parseBasic = 0;
                int parseNew = 0;

                pricingPreviewPanel.removeAll();

                // Check if both pricing schemes are entered
                if (basicPricingSchemePane.getText().equalsIgnoreCase("") == false)
                    basicScheme = true;

                if (newPricingSchemePane.getText().equalsIgnoreCase("") == false)
                    newScheme = true;

                // Parse the pricing schemes for errors
                if (basicScheme)
                    parseBasic = Utils.parsePricingScheme(basicPricingSchemePane.getText());

                if (newScheme)
                    parseNew = Utils.parsePricingScheme(newPricingSchemePane.getText());

                // If errors are found then present the line the error may be at
                if (parseBasic != -1) {
                    JFrame error = new JFrame();

                    JOptionPane.showMessageDialog(error,
                            "Basic Pricing Scheme is not defined correctly. Please check your input in line "
                                    + parseBasic + " and try again.",
                            "Inane error", JOptionPane.ERROR_MESSAGE);
                } else if (parseNew != -1) {
                    JFrame error = new JFrame();

                    JOptionPane.showMessageDialog(error,
                            "New Pricing Scheme is not defined correctly. Please check your input in line "
                                    + parseNew + " and try again.",
                            "Inane error", JOptionPane.ERROR_MESSAGE);
                }
                // If no errors are found make a preview chart of the two pricing
                // schemes
                else {
                    if (basicScheme && newScheme) {
                        ChartPanel chartPanel = ChartUtils.parsePricingScheme(basicPricingSchemePane.getText(),
                                newPricingSchemePane.getText());

                        pricingPreviewPanel.add(chartPanel, BorderLayout.CENTER);
                        pricingPreviewPanel.validate();

                        previewResponseButton.setEnabled(true);

                    } else {
                        JFrame error = new JFrame();

                        JOptionPane.showMessageDialog(error,
                                "You have not defined both pricing schemes.Please check your input and try again.",
                                "Inane error", JOptionPane.ERROR_MESSAGE);
                        previewResponseButton.setEnabled(false);
                    }
                }

                responsePanel.removeAll();
                responsePanel.validate();
                createResponseButton.setEnabled(false);
                createResponseAllButton.setEnabled(false);
                dailyResponseButton.setEnabled(false);
                startResponseButton.setEnabled(false);

            }

            finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    startResponseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the start time button on
         * the Preview Response panel of the Create Response Models tab. This
         * button is enabled after the user has pressed the Response Preview
         * button in order to see the results of his pricing scheme on a activity
         * model. It shows the changes in the start time distribution.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                responsePanel.removeAll();

                // Find the selected activity
                ActivityModel activity = installation.getPerson()
                        .findActivity(activitySelectList.getSelectedValue(), false);

                int response = -1;

                // Check for the selected response type
                if (optimalCaseRadioButton.isSelected())
                    response = 0;
                else if (normalCaseRadioButton.isSelected())
                    response = 1;
                else
                    response = 2;

                // Parse the pricing schemes
                double[] basicScheme = Utils.parseScheme(basicPricingSchemePane.getText());
                double[] newScheme = Utils.parseScheme(newPricingSchemePane.getText());

                float awareness = (float) (awarenessSlider.getValue()) / 100;
                float sensitivity = (float) (sensitivitySlider.getValue()) / 100;

                System.out.println("Awareness: " + awareness + " Sensitivity: " + sensitivity);

                // Create a preview chart of the response model
                ChartPanel chartPanel = installation.getPerson().previewResponse(activity, response,
                        basicScheme, newScheme, awareness, sensitivity);

                responsePanel.add(chartPanel, BorderLayout.CENTER);
                responsePanel.validate();

                createResponseButton.setEnabled(true);
                createResponseAllButton.setEnabled(true);
                dailyResponseButton.setEnabled(true);
                startResponseButton.setEnabled(true);
            } finally {
                root.setCursor(Cursor.getDefaultCursor());
            }

        }
    });

    dailyResponseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the start time button on
         * the Preview Response panel of the Create Response Models tab. This
         * button is enabled after the user has pressed the Response Preview
         * button in order to see the results of his pricing scheme on a activity
         * model. It shows the changes in the daily times distribution.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                responsePanel.removeAll();

                // Find the selected activity
                ActivityModel activity = installation.getPerson()
                        .findActivity(activitySelectList.getSelectedValue(), false);

                // Parse the pricing schemes
                double[] basicScheme = Utils.parseScheme(basicPricingSchemePane.getText());
                double[] newScheme = Utils.parseScheme(newPricingSchemePane.getText());

                float awareness = (float) (awarenessSlider.getValue()) / 100;
                float sensitivity = (float) (sensitivitySlider.getValue()) / 100;

                System.out.println("Awareness: " + awareness + " Sensitivity: " + sensitivity);

                // Create a preview chart of the response model
                ChartPanel chartPanel = installation.getPerson().previewDailyResponse(activity, basicScheme,
                        newScheme, awareness, sensitivity);

                responsePanel.add(chartPanel, BorderLayout.CENTER);
                responsePanel.validate();

                createResponseButton.setEnabled(true);
                createResponseAllButton.setEnabled(true);
                dailyResponseButton.setEnabled(true);
                startResponseButton.setEnabled(true);
            } finally {
                root.setCursor(Cursor.getDefaultCursor());
            }

        }
    });

    // EXPORT TAB //

    exportTab.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentShown(ComponentEvent arg0) {
            exportModelList.setSelectedIndex(0);
        }
    });

    exportModelList.addListSelectionListener(new ListSelectionListener() {
        /**
         * This function is called when the user selects an entity from the
         * list of models on the Model Export Selection panel of the Export Models
         * tab. Then the corresponding preview of the entity model is presented in
         * the
         * Export Model Preview panel.
         */
        @Override
        public void valueChanged(ListSelectionEvent arg0) {
            if (tabbedPane.getSelectedIndex() == 3) {
                exportPreviewPanel.removeAll();
                exportPreviewPanel.updateUI();

                // Checking if the list has any object
                if (exportModels.size() > 1) {
                    String selection = exportModelList.getSelectedValue();

                    // Check to see what type of entity is selected (Installation,
                    // Person, Appliance, Activity, Response)
                    Appliance appliance = installation.findAppliance(selection);

                    ActivityModel activity = installation.getPerson().findActivity(selection, false);

                    ResponseModel response = installation.getPerson().findResponse(selection);

                    // Create the appropriate chart for the selected entity and show it.
                    ChartPanel chartPanel = null;

                    if (selection.equalsIgnoreCase(installation.getName())) {

                        try {
                            chartPanel = installation.measurementsChart();

                            exportDailyButton.setEnabled(false);
                            exportDurationButton.setEnabled(false);
                            exportStartButton.setEnabled(false);
                            exportStartBinnedButton.setEnabled(false);
                            if (trained)
                                exportExpectedPowerButton.setEnabled(true);
                            else
                                exportExpectedPowerButton.setEnabled(false);
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }

                    } else if (selection.equalsIgnoreCase(installation.getPerson().getName())) {

                        chartPanel = installation.getPerson().statisticGraphs();

                        exportDailyButton.setEnabled(false);
                        exportDurationButton.setEnabled(false);
                        exportStartButton.setEnabled(false);
                        exportStartBinnedButton.setEnabled(false);
                        exportExpectedPowerButton.setEnabled(false);

                    } else if (appliance != null) {

                        chartPanel = appliance.consumptionGraph();

                        exportDailyButton.setEnabled(false);
                        exportDurationButton.setEnabled(false);
                        exportStartButton.setEnabled(false);
                        exportStartBinnedButton.setEnabled(false);
                        exportExpectedPowerButton.setEnabled(false);

                    } else if (activity != null) {

                        chartPanel = activity.createDailyTimesDistributionChart();
                        activity.status();
                        exportDailyButton.setEnabled(true);
                        exportDurationButton.setEnabled(true);
                        exportStartButton.setEnabled(true);
                        exportStartBinnedButton.setEnabled(true);
                        exportExpectedPowerButton.setEnabled(true);
                    } else if (response != null) {

                        chartPanel = response.createDailyTimesDistributionChart();

                        exportDailyButton.setEnabled(true);
                        exportDurationButton.setEnabled(true);
                        exportStartButton.setEnabled(true);
                        exportStartBinnedButton.setEnabled(true);
                        exportExpectedPowerButton.setEnabled(true);
                    }

                    exportPreviewPanel.add(chartPanel, BorderLayout.CENTER);
                    exportPreviewPanel.validate();
                }
            }
        }
    });

    exportDailyButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Daily Times
         * button on the Entity Preview panel of the Export Models tab. It shows
         * the Daily Times Distribution for the selected object from the list.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            exportPreviewPanel.removeAll();
            exportPreviewPanel.updateUI();

            String selection = exportModelList.getSelectedValue();

            ActivityModel activity = installation.getPerson().findActivity(selection, false);

            ResponseModel response = installation.getPerson().findResponse(selection);

            ChartPanel chartPanel = null;

            if (activity != null)
                chartPanel = activity.createDailyTimesDistributionChart();

            else
                chartPanel = response.createDailyTimesDistributionChart();

            exportPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            exportPreviewPanel.validate();
        }
    });

    exportStartBinnedButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Start Time Binned
         * button on the Entity Preview panel of the Export Models tab. It shows
         * the Start Time Binned Distribution for the selected object from the
         * list.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            exportPreviewPanel.removeAll();
            exportPreviewPanel.updateUI();

            String selection = exportModelList.getSelectedValue();

            ActivityModel activity = installation.getPerson().findActivity(selection, false);

            ResponseModel response = installation.getPerson().findResponse(selection);

            ChartPanel chartPanel = null;

            if (activity != null)
                chartPanel = activity.createStartTimeBinnedDistributionChart();

            else
                chartPanel = response.createStartTimeBinnedDistributionChart();

            exportPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            exportPreviewPanel.validate();

        }
    });

    exportStartButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Start Time
         * button on the Entity Preview panel of the Export Models tab. It shows
         * the Start Time Distribution for the selected object from the list.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            exportPreviewPanel.removeAll();
            exportPreviewPanel.updateUI();

            String selection = exportModelList.getSelectedValue();

            ActivityModel activity = installation.getPerson().findActivity(selection, false);

            ResponseModel response = installation.getPerson().findResponse(selection);

            ChartPanel chartPanel = null;

            if (activity != null)
                chartPanel = activity.createStartTimeDistributionChart();
            else
                chartPanel = response.createStartTimeDistributionChart();

            exportPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            exportPreviewPanel.validate();

        }
    });

    exportDurationButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Duration
         * button on the Entity Preview panel of the Export Models tab. It shows
         * the Duration Distribution for the selected object from the list.
         */
        @Override
        public void actionPerformed(ActionEvent arg0) {

            exportPreviewPanel.removeAll();
            exportPreviewPanel.updateUI();

            String selection = exportModelList.getSelectedValue();

            ActivityModel activity = installation.getPerson().findActivity(selection, false);

            ResponseModel response = installation.getPerson().findResponse(selection);

            ChartPanel chartPanel = null;

            if (activity != null)
                chartPanel = activity.createDurationDistributionChart();
            else
                chartPanel = response.createDurationDistributionChart();

            exportPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            exportPreviewPanel.validate();

        }
    });

    exportExpectedPowerButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            exportPreviewPanel.removeAll();
            exportPreviewPanel.updateUI();

            String selection = exportModelList.getSelectedValue();

            ActivityModel activity = installation.getPerson().findActivity(selection, false);

            ResponseModel response = installation.getPerson().findResponse(selection);

            ChartPanel chartPanel = null;

            if (selection.equalsIgnoreCase(installation.getName()))
                chartPanel = installation.createExpectedPowerChart();
            else if (activity != null)
                chartPanel = activity.createExpectedPowerChart();
            else
                chartPanel = response.createExpectedPowerChart();

            exportPreviewPanel.add(chartPanel, BorderLayout.CENTER);
            exportPreviewPanel.validate();

        }
    });

    connectButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Connect button on the
         * Connection Properties panel of the Export Models tab. It helps the user
         * to connect to his Cassandra Library and export the models he created
         * there.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            boolean result = false;

            // Reads the user credentials and the server to connect to.
            try {
                APIUtilities.setUrl(urlTextField.getText());

                result = APIUtilities.sendUserCredentials(usernameTextField.getText(),
                        passwordField.getPassword());
            } catch (Exception e1) {
                e1.printStackTrace();
            }

            // If the use credentials are correct
            if (result) {
                exportButton.setEnabled(true);
                exportAllBaseButton.setEnabled(true);
                exportAllResponseButton.setEnabled(true);
                householdNameTextField.setEnabled(true);
            }
            // Else a error message appears.
            else {
                JFrame error = new JFrame();

                JOptionPane.showMessageDialog(error, "User Credentials are not correct! Please try again.",
                        "Inane error", JOptionPane.ERROR_MESSAGE);
                passwordField.setText("");
            }

        }
    });

    passwordField.addCaretListener(new CaretListener() {
        @Override
        public void caretUpdate(CaretEvent e) {
            String pass = String.valueOf(passwordField.getPassword());

            if (pass.equals("")) {
                connectButton.setEnabled(false);
            } else
                connectButton.setEnabled(true);
        }
    });

    exportButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Export button on the
         * Connection Properties panel of the Export Models tab. The entity model
         * selected from the list is then exported to the User Library in
         * Cassandra Platform.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                // Parsing the selected entity and find out what type of entity it is.
                String selection = exportModelList.getSelectedValue();

                Appliance appliance = installation.findAppliance(selection);

                ActivityModel activity = installation.getPerson().findActivity(selection, false);

                ResponseModel response = installation.getPerson().findResponse(selection);

                // If it is installation
                if (selection.equalsIgnoreCase(installation.getName())) {
                    String oldName = installation.getName();
                    installation.setName(householdNameTextField.getText());

                    try {
                        installation.setInstallationID(APIUtilities
                                .sendEntity(installation.toJSON(APIUtilities.getUserID()).toString(), "/inst"));

                    } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                        e1.printStackTrace();
                    }

                    installation.setName(oldName);

                    JFrame success = new JFrame();

                    JOptionPane.showMessageDialog(success,
                            "The installation model " + installation.getName() + " was exported successfully",
                            "Installation Model Exported", JOptionPane.INFORMATION_MESSAGE);

                }
                // If it is person
                else if (selection.equalsIgnoreCase(installation.getPerson().getName())) {

                    try {
                        installation.getPerson().setPersonID(APIUtilities.sendEntity(
                                installation.getPerson().toJSON(APIUtilities.getUserID()).toString(), "/pers"));
                    } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                        e1.printStackTrace();
                    }

                    JFrame success = new JFrame();

                    JOptionPane.showMessageDialog(success,
                            "The person model " + installation.getPerson().getName()
                                    + " was exported successfully",
                            "Person Model Exported", JOptionPane.INFORMATION_MESSAGE);

                }
                // If it is appliance
                else if (appliance != null) {

                    try {
                        appliance.setApplianceID(APIUtilities
                                .sendEntity(appliance.toJSON(APIUtilities.getUserID()).toString(), "/app"));

                        APIUtilities.sendEntity(appliance.powerConsumptionModelToJSON().toString(), "/consmod");

                    } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                        e1.printStackTrace();
                    }

                    JFrame success = new JFrame();

                    JOptionPane.showMessageDialog(success,
                            "The appliance model " + appliance.getName() + " was exported successfully",
                            "Appliance Model Exported", JOptionPane.INFORMATION_MESSAGE);

                }
                // If it is activity
                else if (activity != null) {

                    String[] applianceTemp = new String[activity.getAppliancesOf().length];
                    String activityTemp = "";
                    String durationTemp = "";
                    String dailyTemp = "";
                    String startTemp = "";

                    // For each appliance that participates in the activity
                    for (int i = 0; i < activity.getAppliancesOf().length; i++) {

                        Appliance activityAppliance = activity.getAppliancesOf()[i];

                        try {
                            // In case the appliances contained in the Activity model are
                            // not
                            // in the database, we create the object there before sending
                            // the
                            // activity model
                            if (activityAppliance.getApplianceID().equalsIgnoreCase("")) {

                                activityAppliance.setApplianceID(APIUtilities.sendEntity(
                                        activityAppliance.toJSON(APIUtilities.getUserID()).toString(), "/app"));

                                APIUtilities.sendEntity(
                                        activityAppliance.powerConsumptionModelToJSON().toString(), "/consmod");
                            }
                            applianceTemp[i] = activityAppliance.getApplianceID();
                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    }

                    try {

                        String[] appliancesID = applianceTemp;

                        // Creating the JSON of the activity model
                        activity.setActivityModelID(APIUtilities.sendEntity(
                                activity.toJSON(appliancesID, APIUtilities.getUserID()).toString(), "/actmod"));

                        activityTemp = activity.getActivityModelID();

                        // Creating the JSON of the distributions
                        activity.getDailyTimes().setDistributionID(APIUtilities.sendEntity(
                                activity.getDailyTimes().toJSON(activityTemp).toString(), "/distr"));

                        activity.setDailyID(activity.getDailyTimes().getDistributionID());
                        dailyTemp = activity.getDailyID();

                        activity.getDuration().setDistributionID(APIUtilities
                                .sendEntity(activity.getDuration().toJSON(activityTemp).toString(), "/distr"));

                        activity.setDurationID(activity.getDuration().getDistributionID());
                        durationTemp = activity.getDurationID();

                        activity.getStartTime().setDistributionID(APIUtilities
                                .sendEntity(activity.getStartTime().toJSON(activityTemp).toString(), "/distr"));

                        activity.setStartID(activity.getStartTime().getDistributionID());
                        startTemp = activity.getStartID();

                        // Adding the JSON of the distributions to the activity model
                        APIUtilities.updateEntity(
                                activity.toJSON(appliancesID, APIUtilities.getUserID()).toString(), "/actmod",
                                activityTemp);

                    } catch (AuthenticationException | NoSuchAlgorithmException | IOException e1) {

                        e1.printStackTrace();
                    }

                    JFrame success = new JFrame();

                    JOptionPane.showMessageDialog(success,
                            "The activity model " + activity.getName() + " was exported successfully",
                            "Activity Model Exported", JOptionPane.INFORMATION_MESSAGE);

                }
                // If it is response
                else if (response != null) {
                    String[] applianceTemp = new String[response.getAppliancesOf().length];

                    String responseTemp = "";
                    String durationTemp = "";
                    String dailyTemp = "";
                    String startTemp = "";

                    // For each appliance that participates in the activity
                    for (int i = 0; i < response.getAppliancesOf().length; i++) {

                        Appliance responseAppliance = response.getAppliancesOf()[i];

                        try {
                            // In case the appliances contained in the Activity model are
                            // not
                            // in the database, we create the object there before sending
                            // the
                            // activity model
                            if (responseAppliance.getApplianceID().equalsIgnoreCase("")) {

                                responseAppliance.setApplianceID(APIUtilities.sendEntity(
                                        responseAppliance.toJSON(APIUtilities.getUserID()).toString(), "/app"));

                                APIUtilities.sendEntity(
                                        responseAppliance.powerConsumptionModelToJSON().toString(), "/consmod");
                            }
                            applianceTemp[i] = responseAppliance.getApplianceID();
                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }
                    }

                    try {

                        String[] appliancesID = applianceTemp;

                        // Creating the JSON of the response
                        response.setActivityModelID(APIUtilities.sendEntity(
                                response.toJSON(appliancesID, APIUtilities.getUserID()).toString(), "/actmod"));

                        responseTemp = response.getActivityModelID();

                        // Creating the JSON of the distributions
                        response.getDailyTimes().setDistributionID(APIUtilities.sendEntity(
                                response.getDailyTimes().toJSON(responseTemp).toString(), "/distr"));

                        response.setDailyID(response.getDailyTimes().getDistributionID());
                        dailyTemp = response.getDailyID();

                        response.getDuration().setDistributionID(APIUtilities
                                .sendEntity(response.getDuration().toJSON(responseTemp).toString(), "/distr"));

                        response.setDurationID(response.getDuration().getDistributionID());
                        durationTemp = response.getDurationID();

                        response.getStartTime().setDistributionID(APIUtilities
                                .sendEntity(response.getStartTime().toJSON(responseTemp).toString(), "/distr"));

                        response.setStartID(response.getStartTime().getDistributionID());
                        startTemp = response.getStartID();

                        // Adding the JSON of the distributions to the activity model
                        APIUtilities.updateEntity(
                                response.toJSON(appliancesID, APIUtilities.getUserID()).toString(), "/actmod",
                                responseTemp);

                    } catch (AuthenticationException | NoSuchAlgorithmException | IOException e1) {

                        e1.printStackTrace();
                    }

                    JFrame success = new JFrame();

                    JOptionPane.showMessageDialog(success,
                            "The response model " + response.getName() + " was exported successfully",
                            "Response Model Exported", JOptionPane.INFORMATION_MESSAGE);

                }
            }

            finally {
                root.setCursor(Cursor.getDefaultCursor());
            }
        }
    });

    exportAllBaseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Export All Base
         * button on the Connection Properties panel of the Export Models tab. The
         * export procedure above is iterated through all the entities available
         * on the list except for the response models.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                for (int i = 0; i < exportModelList.getModel().getSize(); i++) {
                    exportModelList.setSelectedIndex(i);

                    String selection = exportModelList.getSelectedValue();

                    Appliance appliance = installation.findAppliance(selection);

                    ActivityModel activity = installation.getPerson().findActivity(selection, false);

                    ResponseModel response = installation.getPerson().findResponse(selection);

                    if (selection.equalsIgnoreCase(installation.getName())) {

                        String oldName = installation.getName();

                        try {

                            installation.setName(householdNameTextField.getText() + " Base");

                            installation.setInstallationID(APIUtilities.sendEntity(
                                    installation.toJSON(APIUtilities.getUserID()).toString(), "/inst"));

                            installation.setName(oldName);
                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (selection.equalsIgnoreCase(installation.getPerson().getName())) {

                        try {
                            installation.getPerson().setPersonID(APIUtilities.sendEntity(installation
                                    .getPerson().toJSON(installation.getInstallationID()).toString(), "/pers"));
                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (appliance != null) {

                        try {
                            appliance.setApplianceID(APIUtilities.sendEntity(
                                    appliance.toJSON(installation.getInstallationID().toString()).toString(),
                                    "/app"));

                            APIUtilities.sendEntity(appliance.powerConsumptionModelToJSON().toString(),
                                    "/consmod");

                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (activity != null) {

                        String[] applianceTemp = new String[activity.getAppliancesOf().length];

                        String personTemp = "";
                        String activityTemp = "";
                        String durationTemp = "";
                        String dailyTemp = "";
                        String startTemp = "";

                        // For each appliance that participates in the activity
                        for (int j = 0; j < activity.getAppliancesOf().length; j++) {

                            Appliance activityAppliance = activity.getAppliancesOf()[j];
                            applianceTemp[j] = activityAppliance.getApplianceID();
                        }

                        personTemp = installation.getPerson().getPersonID();

                        try {

                            activity.setActivityID(APIUtilities
                                    .sendEntity(activity.activityToJSON(personTemp).toString(), "/act"));

                            String[] appliancesID = applianceTemp;

                            activity.setActivityModelID(APIUtilities
                                    .sendEntity(activity.toJSON(appliancesID).toString(), "/actmod"));
                            activityTemp = activity.getActivityModelID();

                            activity.getDailyTimes().setDistributionID(APIUtilities.sendEntity(
                                    activity.getDailyTimes().toJSON(activityTemp).toString(), "/distr"));
                            activity.setDailyID(activity.getDailyTimes().getDistributionID());
                            dailyTemp = activity.getDailyID();

                            activity.getDuration().setDistributionID(APIUtilities.sendEntity(
                                    activity.getDuration().toJSON(activityTemp).toString(), "/distr"));

                            activity.setDurationID(activity.getDuration().getDistributionID());
                            durationTemp = activity.getDurationID();

                            activity.getStartTime().setDistributionID(APIUtilities.sendEntity(
                                    activity.getStartTime().toJSON(activityTemp).toString(), "/distr"));

                            activity.setStartID(activity.getStartTime().getDistributionID());
                            startTemp = activity.getStartID();

                            APIUtilities.updateEntity(activity.toJSON(appliancesID).toString(), "/actmod",
                                    activityTemp);

                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (response != null) {

                    }
                }

            }

            finally {
                root.setCursor(Cursor.getDefaultCursor());
            }

            JFrame success = new JFrame();

            JOptionPane.showMessageDialog(success, "The installation model " + installation.getName()
                    + " for the base pricing scheme and all the entities contained within were exported successfully",
                    "Installation Model Exported", JOptionPane.INFORMATION_MESSAGE);

        }
    });

    exportAllResponseButton.addActionListener(new ActionListener() {
        /**
         * This function is called when the user presses the Export All Base
         * button on the Connection Properties panel of the Export Models tab. The
         * export procedure above is iterated through all the entities available
         * on the list except for the activity models.
         */
        @Override
        public void actionPerformed(ActionEvent e) {
            Component root = SwingUtilities.getRoot((JButton) e.getSource());

            try {

                root.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

                for (int i = 0; i < exportModelList.getModel().getSize(); i++) {
                    exportModelList.setSelectedIndex(i);

                    String selection = exportModelList.getSelectedValue();

                    Appliance appliance = installation.findAppliance(selection);

                    ActivityModel activity = installation.getPerson().findActivity(selection, false);

                    ResponseModel response = installation.getPerson().findResponse(selection);

                    if (selection.equalsIgnoreCase(installation.getName())) {

                        String oldName = installation.getName();

                        try {

                            installation.setName(householdNameTextField.getText() + " Response");

                            installation.setInstallationID(APIUtilities.sendEntity(
                                    installation.toJSON(APIUtilities.getUserID()).toString(), "/inst"));

                            installation.setName(oldName);

                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (selection.equalsIgnoreCase(installation.getPerson().getName())) {

                        try {
                            installation.getPerson().setPersonID(APIUtilities.sendEntity(installation
                                    .getPerson().toJSON(installation.getInstallationID()).toString(), "/pers"));
                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (appliance != null) {

                        try {
                            appliance.setApplianceID(APIUtilities.sendEntity(
                                    appliance.toJSON(installation.getInstallationID().toString()).toString(),
                                    "/app"));

                            APIUtilities.sendEntity(appliance.powerConsumptionModelToJSON().toString(),
                                    "/consmod");

                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }

                    } else if (activity != null) {

                    } else if (response != null) {
                        String[] applianceTemp = new String[response.getAppliancesOf().length];

                        String personTemp = "";
                        String responseTemp = "";
                        String durationTemp = "";
                        String dailyTemp = "";
                        String startTemp = "";

                        // For each appliance that participates in the activity
                        for (int j = 0; j < response.getAppliancesOf().length; j++) {

                            Appliance responseAppliance = response.getAppliancesOf()[j];

                            applianceTemp[j] = responseAppliance.getApplianceID();
                        }
                        personTemp = installation.getPerson().getPersonID();

                        try {

                            response.setActivityID(APIUtilities
                                    .sendEntity(response.activityToJSON(personTemp).toString(), "/act"));

                            String[] appliancesID = applianceTemp;

                            response.setActivityModelID(APIUtilities
                                    .sendEntity(response.toJSON(appliancesID).toString(), "/actmod"));
                            responseTemp = response.getActivityModelID();

                            response.getDailyTimes().setDistributionID(APIUtilities.sendEntity(
                                    response.getDailyTimes().toJSON(responseTemp).toString(), "/distr"));
                            response.setDailyID(response.getDailyTimes().getDistributionID());
                            dailyTemp = response.getDailyID();

                            response.getDuration().setDistributionID(APIUtilities.sendEntity(
                                    response.getDuration().toJSON(responseTemp).toString(), "/distr"));

                            response.setDurationID(response.getDuration().getDistributionID());
                            durationTemp = response.getDurationID();

                            response.getStartTime().setDistributionID(APIUtilities.sendEntity(
                                    response.getStartTime().toJSON(responseTemp).toString(), "/distr"));

                            response.setStartID(response.getStartTime().getDistributionID());
                            startTemp = response.getStartID();

                            APIUtilities.updateEntity(response.toJSON(appliancesID).toString(), "/actmod",
                                    responseTemp);

                        } catch (IOException | AuthenticationException | NoSuchAlgorithmException e1) {
                            e1.printStackTrace();
                        }
                    }
                }
            }

            finally {
                root.setCursor(Cursor.getDefaultCursor());
            }

            JFrame success = new JFrame();

            JOptionPane.showMessageDialog(success, "The installation model " + installation.getName()
                    + " for the new pricing scheme and all the entities contained within were exported successfully",
                    "Installation Model Exported", JOptionPane.INFORMATION_MESSAGE);
        }
    });
}

From source file:com.floreantpos.ui.model.MenuItemForm.java

/** This method is called from within the constructor to
 * initialize the form.//from w w  w  . ja v a 2s. c o  m
 * 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() {
    lblStockCount = new JLabel(Messages.getString("MenuItemForm.17")); //$NON-NLS-1$
    tfStockCount = new DoubleTextField(1);
    cbDisableStockCount = new JCheckBox(Messages.getString("MenuItemForm.18")); //$NON-NLS-1$
    lblButtonColor = new JLabel(Messages.getString("MenuItemForm.19")); //$NON-NLS-1$
    tabbedPane = new javax.swing.JTabbedPane();
    tabGeneral = new javax.swing.JPanel();
    lfname = new javax.swing.JLabel();
    lfname.setHorizontalAlignment(SwingConstants.TRAILING);
    tfName = new com.floreantpos.swing.FixedLengthTextField(20);
    lgroup = new javax.swing.JLabel();
    lgroup.setHorizontalAlignment(SwingConstants.TRAILING);
    cbGroup = new javax.swing.JComboBox();
    cbGroup.setPreferredSize(new Dimension(198, 0));
    btnNewGroup = new javax.swing.JButton();
    lblPrice = new javax.swing.JLabel();
    lblPrice.setHorizontalAlignment(SwingConstants.TRAILING);
    tfPrice = new DoubleTextField(20);
    tfPrice.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
    tfDescription = new JTextArea(new FixedLengthDocument(255));

    //tfDescription.setDocument(;
    tfUnitName = new FixedLengthTextField(20);
    lTax = new javax.swing.JLabel();
    lTax.setHorizontalAlignment(SwingConstants.TRAILING);
    cbTax = new javax.swing.JComboBox();
    btnNewTax = new javax.swing.JButton();
    lDiscountRate = new javax.swing.JLabel();
    lDiscountRate.setHorizontalAlignment(SwingConstants.TRAILING);
    lPercentage = new javax.swing.JLabel();
    tfDiscountRate = new DoubleTextField(18);
    tfDiscountRate.setHorizontalAlignment(SwingConstants.TRAILING);
    chkVisible = new javax.swing.JCheckBox();
    tabModifier = new javax.swing.JPanel();
    btnNewModifierGroup = new javax.swing.JButton();
    btnDeleteModifierGroup = new javax.swing.JButton();
    btnEditModifierGroup = new javax.swing.JButton();
    jScrollPane1 = new javax.swing.JScrollPane();
    tableTicketItemModifierGroups = new javax.swing.JTable();
    tabShift = new javax.swing.JPanel();
    tabPrice = new javax.swing.JPanel();
    tabButtonStyle = new javax.swing.JPanel();
    btnDeleteShift = new javax.swing.JButton();
    btnAddShift = new javax.swing.JButton();
    btnNewPrice = new javax.swing.JButton();
    btnUpdatePrice = new javax.swing.JButton();
    btnDeletePrice = new javax.swing.JButton();
    btnDeleteAll = new javax.swing.JButton();
    btnDefaultValue = new javax.swing.JButton();
    jScrollPane2 = new javax.swing.JScrollPane();
    jScrollPane3 = new javax.swing.JScrollPane();
    shiftTable = new javax.swing.JTable();
    priceTable = new javax.swing.JTable();
    cbPrinterGroup = new JComboBox<PrinterGroup>(new DefaultComboBoxModel<PrinterGroup>(
            PrinterGroupDAO.getInstance().findAll().toArray(new PrinterGroup[0])));
    cbPrinterGroup.setPreferredSize(new Dimension(226, 0));

    tfTranslatedName = new FixedLengthTextField(20);
    tfTranslatedName.setLength(120);

    lblUnitName = new JLabel(Messages.getString("MenuItemForm.23")); //$NON-NLS-1$
    lblKitchenPrinter = new JLabel(Messages.getString("MenuItemForm.27")); //$NON-NLS-1$
    lgroup.setText(Messages.getString("LABEL_GROUP")); //$NON-NLS-1$
    lfname.setText(Messages.getString("LABEL_NAME")); //$NON-NLS-1$
    tfName.setLength(120);
    lblTranslatedName = new JLabel(Messages.getString("MenuItemForm.lblTranslatedName.text")); //$NON-NLS-1$
    tfBarcode = new FixedLengthTextField(20);
    tfSortOrder = new IntegerTextField(20);
    lblSortOrder = new JLabel(Messages.getString("MenuItemForm.lblSortOrder.text")); //$NON-NLS-1$
    tfSortOrder.setText(""); //$NON-NLS-1$
    lblBarcode = new JLabel(Messages.getString("MenuItemForm.lblBarcode.text")); //$NON-NLS-1$
    cbTax.setPreferredSize(new Dimension(198, 0));
    ///lblButtonColor = new JLabel(Messages.getString("MenuItemForm.lblButtonColor.text")); //$NON-NLS-1$
    btnButtonColor = new JButton(); //$NON-NLS-1$
    btnButtonColor.setPreferredSize(new Dimension(228, 40));
    lblTextColor = new JLabel(Messages.getString("MenuItemForm.lblTextColor.text")); //$NON-NLS-1$
    btnTextColor = new JButton(Messages.getString("MenuItemForm.SAMPLE_TEXT")); //$NON-NLS-1$
    //   btnTextColor.setPreferredSize(new Dimension(228, 40));
    cbShowTextWithImage = new JCheckBox(Messages.getString("MenuItemForm.40")); //$NON-NLS-1$
    cbShowTextWithImage.setActionCommand(Messages.getString("MenuItemForm.41")); //$NON-NLS-1$
    lTax.setText(Messages.getString("LABEL_TAX")); //$NON-NLS-1$
    btnNewTax.setText("..."); //$NON-NLS-1$
    cbFractionalUnit = new JCheckBox(Messages.getString("MenuItemForm.24")); //$NON-NLS-1$

    btnNewGroup.setText("..."); //$NON-NLS-1$
    btnNewGroup.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            doCreateNewGroup(evt);
        }
    });

    if (Application.getInstance().isPriceIncludesTax()) {
        lblPrice.setText(Messages.getString("LABEL_SALES_PRICE_INCLUDING_TAX")); //$NON-NLS-1$
    } else {
        lblPrice.setText(Messages.getString("LABEL_SALES_PRICE_EXCLUDING_TAX")); //$NON-NLS-1$
    }

    tfPrice.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

    lTax.setText(Messages.getString("LABEL_TAX")); //$NON-NLS-1$

    btnNewTax.setText("..."); //$NON-NLS-1$
    btnNewTax.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnNewTaxdoCreateNewTax(evt);
        }
    });

    lDiscountRate.setText(com.floreantpos.POSConstants.DISCOUNT_RATE + ":"); //$NON-NLS-1$

    lPercentage.setText("%"); //$NON-NLS-1$

    chkVisible.setText(com.floreantpos.POSConstants.VISIBLE);
    chkVisible.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
    chkVisible.setMargin(new java.awt.Insets(0, 0, 0, 0));
    tabbedPane.addTab(com.floreantpos.POSConstants.GENERAL, tabGeneral);
    tabbedPane.setPreferredSize(new Dimension(750, 470));

    btnNewModifierGroup.setText(com.floreantpos.POSConstants.ADD);
    btnNewModifierGroup.setActionCommand("AddModifierGroup"); //$NON-NLS-1$
    btnNewModifierGroup.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnNewModifierGroupActionPerformed(evt);
        }
    });

    btnDeleteModifierGroup.setText(com.floreantpos.POSConstants.DELETE);
    btnDeleteModifierGroup.setActionCommand("DeleteModifierGroup"); //$NON-NLS-1$

    btnEditModifierGroup.setText(com.floreantpos.POSConstants.EDIT);
    btnEditModifierGroup.setActionCommand("EditModifierGroup"); //$NON-NLS-1$

    menuItemMGListModel = new MenuItemMGListModel();
    tableTicketItemModifierGroups.setModel(menuItemMGListModel);

    btnNewModifierGroup.addActionListener(this);
    btnEditModifierGroup.addActionListener(this);
    btnDeleteModifierGroup.addActionListener(this);
    btnAddShift.addActionListener(this);
    btnDeleteShift.addActionListener(this);

    tfDiscountRate.setDocument(new DoubleDocument());

    tabGeneral.setLayout(new MigLayout("insets 20", "[][]20px[][]", "[][][][][][][][][][][][][]")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    /*JLabel lblImage = new JLabel(Messages.getString("MenuItemForm.28")); //$NON-NLS-1$
    lblImage.setHorizontalAlignment(SwingConstants.TRAILING);
    tabGeneral.add(lblImage, "cell 0 0,right"); //$NON-NLS-1$
            
    lblImagePreview = new JLabel(""); //$NON-NLS-1$
    lblImagePreview.setHorizontalAlignment(JLabel.CENTER);
    lblImagePreview.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
    lblImagePreview.setPreferredSize(new Dimension(100, 100));
    tabGeneral.add(lblImagePreview, "cell 1 0"); //$NON-NLS-1$
            
    JButton btnSelectImage = new JButton("..."); //$NON-NLS-1$
    btnSelectImage.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
    doSelectImageFile();
       }
    });
    tabGeneral.add(btnSelectImage, "cell 1 0"); //$NON-NLS-1$
            
    btnClearImage = new JButton(Messages.getString("MenuItemForm.34")); //$NON-NLS-1$
    btnClearImage.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
    doClearImage();
       }
    });
    tabGeneral.add(btnClearImage, "cell 1 0"); //$NON-NLS-1$
    */

    tabGeneral.add(lfname, "cell 0 1 ,right"); //$NON-NLS-1$
    tabGeneral.add(tfName, "cell 1 1,grow"); //$NON-NLS-1$

    tabGeneral.add(lblTranslatedName, "cell 0 2,right"); //$NON-NLS-1$
    tabGeneral.add(tfTranslatedName, "cell 1 2,grow"); //$NON-NLS-1$

    /*tabGeneral.add(new JLabel("Description"), "cell 0 3,right");
    JScrollPane scrlDescription = new JScrollPane(tfDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    tabGeneral.add(scrlDescription, "cell 1 3");*/

    tabGeneral.add(lblUnitName, "cell 0 3,right"); //$NON-NLS-1$
    tabGeneral.add(tfUnitName, "cell 1 3,grow"); //$NON-NLS-1$
    JLabel lblBuyPrice = new JLabel(Messages.getString("LABEL_BUY_PRICE")); //$NON-NLS-1$

    tabGeneral.add(lblBuyPrice, "cell 0 4,alignx right"); //$NON-NLS-1$
    tfBuyPrice = new DoubleTextField(20);
    tfBuyPrice.setHorizontalAlignment(SwingConstants.TRAILING);
    tabGeneral.add(tfBuyPrice, "cell 1 4,grow"); //$NON-NLS-1$

    tabGeneral.add(lblPrice, "cell 0 5,alignx right"); //$NON-NLS-1$
    tabGeneral.add(tfPrice, "cell 1 5,grow"); //$NON-NLS-1$

    tabGeneral.add(lgroup, "cell 0 6,alignx right"); //$NON-NLS-1$
    tabGeneral.add(cbGroup, "cell 1 6"); //$NON-NLS-1$
    tabGeneral.add(btnNewGroup, "cell 1 6"); //$NON-NLS-1$

    tabGeneral.add(lblBarcode, "cell 0 7,alignx right"); //$NON-NLS-1$
    tabGeneral.add(tfBarcode, "cell 1 7,grow"); //$NON-NLS-1$

    tabGeneral.add(lblSortOrder, "cell 0 8,alignx right"); //$NON-NLS-1$
    tabGeneral.add(tfSortOrder, "cell 1 8,grow"); //$NON-NLS-1$

    tabGeneral.add(lblStockCount, "cell 0 9,alignx right"); //$NON-NLS-1$
    tabGeneral.add(tfStockCount, "cell 1 9,grow"); //$NON-NLS-1$

    //tabGeneral.add(cbShowTextWithImage, "cell 1 8"); //$NON-NLS-1$
    tabGeneral.add(chkVisible, "cell 1 10"); //$NON-NLS-1$
    tabGeneral.add(cbFractionalUnit, "cell 1 11"); //$NON-NLS-1$
    tabGeneral.add(cbDisableStockCount, "cell 1 12"); //$NON-NLS-1$

    // right side

    tabGeneral.add(lblKitchenPrinter, "cell 2 1,right"); //$NON-NLS-1$
    tabGeneral.add(cbPrinterGroup, "cell 3 1,grow"); //$NON-NLS-1$

    tabGeneral.add(lTax, "cell 2 2,right"); //$NON-NLS-1$
    tabGeneral.add(cbTax, "cell 3 2"); //$NON-NLS-1$
    tabGeneral.add(btnNewTax, "cell 3 2,grow"); //$NON-NLS-1$

    /*tabGeneral.add(lblButtonColor, "cell 2 3,right"); //$NON-NLS-1$
    tabGeneral.add(btnButtonColor, "cell 3 3,grow"); //$NON-NLS-1$
            
    tabGeneral.add(lblTextColor, "cell 2 4,right"); //$NON-NLS-1$
    tabGeneral.add(btnTextColor, "cell 3 4 3 5"); //$NON-NLS-1$
    btnTextColor.setPreferredSize(new Dimension(228, 50));*/

    tabGeneral.add(new JLabel(Messages.getString("MenuItemForm.25")), "cell 2 3,,aligny top,alignx right"); //$NON-NLS-1$ //$NON-NLS-2$
    orderList = new CheckBoxList();

    List<OrderType> orderTypes = Application.getInstance().getOrderTypes();
    orderList.setModel(orderTypes);
    //      List<String> orderListM = new ArrayList();
    //      orderListM.add(OrderType.DINE_IN.toString());
    //      orderListM.add(OrderType.BAR_TAB.toString());
    //      orderListM.add(OrderType.DRIVE_THRU.toString());
    //      orderListM.add(OrderType.HOME_DELIVERY.toString());
    //      orderListM.add(OrderType.PICKUP.toString());
    //      orderListM.add(OrderType.RETAIL.toString());
    //      orderListM.add(OrderType.TAKE_OUT.toString());

    //      orderList.setModel(orderListM);

    JScrollPane orderCheckBoxList = new JScrollPane(orderList);
    orderCheckBoxList.setPreferredSize(new Dimension(228, 100));
    tabGeneral.add(orderCheckBoxList, "cell 3 3 3 4"); //$NON-NLS-1$
    tfDescription.setWrapStyleWord(true);
    tfDescription.setLineWrap(true);

    tabGeneral.add(new JLabel(Messages.getString("MenuItemForm.29")), "cell 2 7,aligny top,alignx right"); //$NON-NLS-1$ //$NON-NLS-2$
    JScrollPane scrlDescription = new JScrollPane(tfDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrlDescription.setPreferredSize(new Dimension(228, 90));
    tabGeneral.add(scrlDescription, "cell 3 7 3 4"); //$NON-NLS-1$

    add(tabbedPane);
    //TODO: 
    addRecepieExtension();

    /*btnButtonColor.addActionListener(new ActionListener() {
       @Override
       public void actionPerformed(ActionEvent e) {
    Color color = JColorChooser.showDialog(MenuItemForm.this, Messages.getString("MenuItemForm.42"), btnButtonColor.getBackground()); //$NON-NLS-1$
    btnButtonColor.setBackground(color);
    btnTextColor.setBackground(color);
       }
    });
            
    btnTextColor.addActionListener(new ActionListener() {
       @Override
       public void actionPerformed(ActionEvent e) {
    Color color = JColorChooser.showDialog(MenuItemForm.this, Messages.getString("MenuItemForm.43"), btnTextColor.getForeground()); //$NON-NLS-1$
    btnTextColor.setForeground(color);
       }
    });*/

    jScrollPane1.setViewportView(tableTicketItemModifierGroups);

    GroupLayout jPanel2Layout = new GroupLayout(tabModifier);
    jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(Alignment.TRAILING)
            .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap()
                    .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addGroup(jPanel2Layout.createParallelGroup(Alignment.BASELINE)
                            .addComponent(btnDeleteModifierGroup).addComponent(btnEditModifierGroup)
                            .addComponent(btnNewModifierGroup))
                    .addContainerGap()));
    jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(Alignment.TRAILING)
            .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap().addGroup(jPanel2Layout
                    .createParallelGroup(Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup().addComponent(btnNewModifierGroup)
                            .addPreferredGap(ComponentPlacement.RELATED).addComponent(btnEditModifierGroup)
                            .addPreferredGap(ComponentPlacement.RELATED).addComponent(btnDeleteModifierGroup))
                    .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 421, Short.MAX_VALUE))
                    .addContainerGap()));
    tabModifier.setLayout(jPanel2Layout);

    tabbedPane.addTab(com.floreantpos.POSConstants.MODIFIER_GROUPS, tabModifier);

    btnDeleteShift.setText(com.floreantpos.POSConstants.DELETE_SHIFT);

    btnAddShift.setText(com.floreantpos.POSConstants.ADD_SHIFT);

    shiftTable
            .setModel(new javax.swing.table.DefaultTableModel(
                    new Object[][] { { null, null, null, null }, { null, null, null, null },
                            { null, null, null, null }, { null, null, null, null } },
                    new String[] { "Title 1", "Title 2", "Title 3", "Title 4" })); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    jScrollPane2.setViewportView(shiftTable);

    org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(tabShift);
    tabShift.setLayout(jPanel3Layout);
    jPanel3Layout
            .setHorizontalGroup(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jPanel3Layout.createSequentialGroup().addContainerGap(76, Short.MAX_VALUE)
                            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jScrollPane2,
                                            org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 670,
                                            org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                    .add(org.jdesktop.layout.GroupLayout.TRAILING,
                                            jPanel3Layout.createSequentialGroup().add(btnAddShift).add(5, 5, 5)
                                                    .add(btnDeleteShift)))
                            .addContainerGap()));
    jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel3Layout.createSequentialGroup()
                    .add(jScrollPane2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 345,
                            org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                    .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                            .add(btnAddShift).add(btnDeleteShift))
                    .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

    tabbedPane.addTab(com.floreantpos.POSConstants.SHIFTS, tabShift);

    //

    btnNewPrice.setText(Messages.getString("MenuItemForm.9")); //$NON-NLS-1$
    btnNewPrice.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            addNewPrice();
        }
    });
    btnUpdatePrice.setText(Messages.getString("MenuItemForm.13")); //$NON-NLS-1$
    btnUpdatePrice.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            updatePrice();
        }
    });
    btnDeletePrice.setText(Messages.getString("MenuItemForm.14")); //$NON-NLS-1$
    btnDeletePrice.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            deletePrice();
        }
    });
    btnDeleteAll.setText(Messages.getString("MenuItemForm.15")); //$NON-NLS-1$
    btnDeleteAll.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            deleteAll();
        }
    });

    btnDefaultValue.setText(Messages.getString("MenuItemForm.7")); //$NON-NLS-1$
    /*btnDefaultValue.addActionListener(new ActionListener() {
            
       @Override
       public void actionPerformed(ActionEvent e) {
    setDefaultValue();
       }
    });*/
    priceTable
            .setModel(new javax.swing.table.DefaultTableModel(
                    new Object[][] { { null, null, null, null }, { null, null, null, null },
                            { null, null, null, null }, { null, null, null, null } },
                    new String[] { "Title 1", "Title 2", "Title 3", "Title 4" })); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

    jScrollPane3.setViewportView(priceTable);

    tabPrice.setLayout(new BorderLayout());
    tabPrice.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    tabPrice.add(jScrollPane3, BorderLayout.CENTER);

    JPanel buttonPanel = new JPanel();

    buttonPanel.add(btnNewPrice);
    buttonPanel.add(btnUpdatePrice);
    //buttonPanel.add(btnDefaultValue);
    buttonPanel.add(btnDeletePrice);

    //   buttonPanel.add(btnDeleteAll);

    tabPrice.add(buttonPanel, BorderLayout.SOUTH);
    tabbedPane.addTab(Messages.getString("MenuItemForm.16"), tabPrice); //$NON-NLS-1$

    //

    tabbedPane.addChangeListener(this);
    //

    tabButtonStyle.setLayout(new MigLayout("insets 10", "[][]100[][][][]", "[][][center][][][]")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

    JLabel lblImage = new JLabel(Messages.getString("MenuItemForm.28")); //$NON-NLS-1$
    lblImage.setHorizontalAlignment(SwingConstants.TRAILING);
    tabButtonStyle.add(lblImage, "cell 0 0,right"); //$NON-NLS-1$

    lblImagePreview = new JLabel(""); //$NON-NLS-1$
    lblImagePreview.setHorizontalAlignment(JLabel.CENTER);
    lblImagePreview.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
    lblImagePreview.setPreferredSize(new Dimension(100, 100));
    tabButtonStyle.add(lblImagePreview, "cell 1 0"); //$NON-NLS-1$

    JButton btnSelectImage = new JButton("..."); //$NON-NLS-1$
    btnClearImage = new JButton(Messages.getString("MenuItemForm.34")); //$NON-NLS-1$
    tabButtonStyle.add(btnClearImage, "cell  1 0"); //$NON-NLS-1$
    tabButtonStyle.add(btnSelectImage, "cell 1 0"); //$NON-NLS-1$

    tabButtonStyle.add(lblButtonColor, "cell 0 2,right"); //$NON-NLS-1$
    tabButtonStyle.add(btnButtonColor, "cell 1 2,grow"); //$NON-NLS-1$
    tabButtonStyle.add(lblTextColor, "cell 0 3,right"); //$NON-NLS-1$
    tabButtonStyle.add(btnTextColor, "cell 1 3"); //$NON-NLS-1$
    tabButtonStyle.add(cbShowTextWithImage, "cell 1 4"); //$NON-NLS-1$

    /*   tabButtonStyle.add(lblImagePreview, "cell 3 0 3 4"); //$NON-NLS-1$
       tabButtonStyle.add(btnClearImage, "cell 3 0,gaptop 40"); //$NON-NLS-1$
       tabButtonStyle.add(btnSelectImage, "cell 3 0,gaptop 40"); //$NON-NLS-1$
       tabButtonStyle.add(lblImage, "cell 2 0,gaptop 40"); //$NON-NLS-1$
       tabButtonStyle.add(lblButtonColor, "cell 0 0,right"); //$NON-NLS-1$
       tabButtonStyle.add(btnButtonColor, "cell 1 0,grow"); //$NON-NLS-1$
       tabButtonStyle.add(lblTextColor, "cell 0 1,right"); //$NON-NLS-1$
       tabButtonStyle.add(btnTextColor, "cell 1 1"); //$NON-NLS-1$
    */
    btnTextColor.setPreferredSize(new Dimension(228, 50));

    btnSelectImage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            doSelectImageFile();
        }
    });

    btnClearImage.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            doClearImage();
        }
    });

    btnButtonColor.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Color color = JColorChooser.showDialog(MenuItemForm.this, Messages.getString("MenuItemForm.42"), //$NON-NLS-1$
                    btnButtonColor.getBackground());
            btnButtonColor.setBackground(color);
            btnTextColor.setBackground(color);
        }
    });

    btnTextColor.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Color color = JColorChooser.showDialog(MenuItemForm.this, Messages.getString("MenuItemForm.43"), //$NON-NLS-1$
                    btnTextColor.getForeground());
            btnTextColor.setForeground(color);
        }
    });

    tabbedPane.addTab(Messages.getString("MenuItemForm.26"), tabButtonStyle); //$NON-NLS-1$

}

From source file:net.minelord.gui.panes.IRCPane.java

@Override
public void kicked() {
    client.quit();/*from  w w w . j  av  a 2s.  c o m*/
    status = "Disconnected";
    TitledBorder title = BorderFactory
            .createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), status);
    title.setTitleJustification(TitledBorder.RIGHT);
    if (userScroller != null) {
        userScroller.setBorder(title);
        userList.setListData(new Object[0]);
    } else
        scroller.setBorder(title);
    input.setText("");
    input.setEnabled(false);
    quit = true;
}

From source file:net.minelord.gui.panes.IRCPane.java

public static void updateBounds() {
    if (topic.getText().length() == 0)
        showTopic = false;//  w  ww  . jav  a  2s.  com
    topic.setVisible(showTopic);
    userScroller.setVisible(showUserList);
    if (topic != null && !showTopic && !showUserList)
        scroller.setBounds(scrollerWithoutTopicWithoutUserlist);
    if (topic != null && !showTopic && showUserList) {
        scroller.setBounds(scrollerWithoutTopicWithUserlist);
        userScroller.setBounds(userScrollerWithoutTopic);
    }
    if (topic != null && showTopic && showUserList) {
        scroller.setBounds(scrollerWithTopicWithUserlist);
        userScroller.setBounds(userScrollWithTopic);
    }
    if (topic != null && showTopic && !showUserList)
        scroller.setBounds(scrollerWithTopicWithoutUserlist);
    if (topic != null && !showUserList) {
        TitledBorder title = BorderFactory
                .createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), status);
        title.setTitleJustification(TitledBorder.RIGHT);
        scroller.setBorder(title);
    } else
        scroller.setBorder(
                BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), ""));
    userList.repaint();
    scroller.repaint();
}

From source file:io.heming.accountbook.ui.MainFrame.java

private void initStatusBar() {
    statusBar = Box.createHorizontalBox();
    statusBar.setPreferredSize(new Dimension(getWidth(), 26));
    statusBar.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0),
            BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)));

    ImageIcon loading = new ImageIcon(getClass().getResource("stopped-loader.png"));
    statusLabel = new JLabel("", loading, JLabel.LEFT);
    statusLabel.setHorizontalAlignment(SwingConstants.LEFT);

    statusBar.add(statusLabel);// w  w  w .ja va2s.c o m
    statusBar.add(Box.createHorizontalGlue());

    infoLabel = new JLabel();
    infoLabel.setForeground(Color.GRAY);
    infoLabel.setPreferredSize(new Dimension(270, 20));
    infoLabel.setMaximumSize(infoLabel.getPreferredSize());
    statusBar.add(infoLabel);
    statusBar.add(Box.createHorizontalStrut(20));

    pageLabel = new JLabel();
    pageLabel.setForeground(Color.GRAY);
    pageLabel.setPreferredSize(new Dimension(80, 20));
    pageLabel.setMaximumSize(pageLabel.getPreferredSize());
    statusBar.add(pageLabel);

    Insets insets = new Insets(2, 10, 2, 10);
    firstPageButton = new JButton();
    firstPageButton.setMargin(insets);
    firstPageButton.setActionCommand("");
    firstPageButton.setToolTipText("");
    firstPageButton.setIcon(new ImageIcon(getClass().getResource("go-first.png")));
    firstPageButton.addActionListener(e -> firstPage());

    prevPageButton = new JButton();
    prevPageButton.setMargin(insets);
    prevPageButton.setActionCommand("?");
    prevPageButton.setToolTipText("?");
    prevPageButton.setIcon(new ImageIcon(getClass().getResource("go-previous-2.png")));
    prevPageButton.addActionListener(e -> prevPage());

    nextPageButton = new JButton();
    nextPageButton.setMargin(insets);
    nextPageButton.setActionCommand("");
    nextPageButton.setToolTipText("");
    nextPageButton.setIcon(new ImageIcon(getClass().getResource("go-next-2.png")));
    nextPageButton.addActionListener(e -> nextPage());

    lastPageButton = new JButton();
    lastPageButton.setMargin(insets);
    lastPageButton.setActionCommand("");
    lastPageButton.setToolTipText("");
    lastPageButton.setIcon(new ImageIcon(getClass().getResource("go-last.png")));
    lastPageButton.addActionListener(e -> lastPage());

    statusBar.add(firstPageButton);
    statusBar.add(prevPageButton);
    statusBar.add(nextPageButton);
    statusBar.add(lastPageButton);

    add(statusBar, BorderLayout.SOUTH);
}

From source file:userinterface.properties.GUIGraphHandler.java

public void plotNewFunction() {

    JDialog dialog;/*from  ww w.j ava 2s.  c  o m*/
    JRadioButton radio2d, radio3d, newGraph, existingGraph;
    JTextField functionField, seriesName;
    JButton ok, cancel;
    JComboBox<String> chartOptions;
    JLabel example;

    //init all the fields of the dialog
    dialog = new JDialog(GUIPrism.getGUI());
    radio2d = new JRadioButton("2D");
    radio3d = new JRadioButton("3D");
    newGraph = new JRadioButton("New Graph");
    existingGraph = new JRadioButton("Exisiting");
    chartOptions = new JComboBox<String>();
    functionField = new JTextField();
    ok = new JButton("Plot");
    cancel = new JButton("Cancel");
    seriesName = new JTextField();
    example = new JLabel("<html><font size=3 color=red>Example:</font><font size=3>x/2 + 5</font></html>");
    example.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseEntered(MouseEvent e) {
            example.setCursor(new Cursor(Cursor.HAND_CURSOR));
            example.setForeground(Color.BLUE);
        }

        @Override
        public void mouseExited(MouseEvent e) {
            example.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            example.setForeground(Color.BLACK);
        }

        @Override
        public void mouseClicked(MouseEvent e) {

            if (e.getButton() == MouseEvent.BUTTON1) {

                if (radio2d.isSelected()) {
                    functionField.setText("x/2 + 5");
                } else {
                    functionField.setText("x+y+5");
                }

                functionField.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));
                functionField.setForeground(Color.BLACK);

            }
        }

    });

    //set dialog properties
    dialog.setSize(400, 350);
    dialog.setTitle("Plot a new function");
    dialog.setModal(true);
    dialog.setLayout(new BoxLayout(dialog.getContentPane(), BoxLayout.Y_AXIS));
    dialog.setLocationRelativeTo(GUIPrism.getGUI());

    //add every component to their dedicated panels
    JPanel graphTypePanel = new JPanel(new FlowLayout());
    graphTypePanel.setBorder(BorderFactory
            .createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Function type"));
    graphTypePanel.add(radio2d);
    graphTypePanel.add(radio3d);

    JPanel functionFieldPanel = new JPanel(new BorderLayout());
    functionFieldPanel.setBorder(BorderFactory
            .createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Function"));
    functionFieldPanel.add(functionField, BorderLayout.CENTER);
    functionFieldPanel.add(example, BorderLayout.SOUTH);

    JPanel chartSelectPanel = new JPanel();
    chartSelectPanel.setLayout(new BoxLayout(chartSelectPanel, BoxLayout.Y_AXIS));
    chartSelectPanel.setBorder(BorderFactory
            .createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Plot function to"));
    JPanel radioPlotPanel = new JPanel(new FlowLayout());
    radioPlotPanel.add(newGraph);
    radioPlotPanel.add(existingGraph);
    JPanel chartOptionsPanel = new JPanel(new FlowLayout());
    chartOptionsPanel.add(chartOptions);
    chartSelectPanel.add(radioPlotPanel);
    chartSelectPanel.add(chartOptionsPanel);

    JPanel bottomControlPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    bottomControlPanel.add(ok);
    bottomControlPanel.add(cancel);

    JPanel seriesNamePanel = new JPanel(new BorderLayout());
    seriesNamePanel.setBorder(BorderFactory
            .createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Series name"));
    seriesNamePanel.add(seriesName, BorderLayout.CENTER);

    // add all the panels to the dialog

    dialog.add(graphTypePanel);
    dialog.add(functionFieldPanel);
    dialog.add(chartSelectPanel);
    dialog.add(seriesNamePanel);
    dialog.add(bottomControlPanel);

    // do all the enables and set properties

    radio2d.setSelected(true);
    newGraph.setSelected(true);
    chartOptions.setEnabled(false);
    functionField.setText("Add function expression here....");
    functionField.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 15));
    functionField.setForeground(Color.GRAY);
    seriesName.setText("New function");
    ok.setMnemonic('P');
    cancel.setMnemonic('C');
    example.setToolTipText("click to try out");

    ok.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "ok");
    ok.getActionMap().put("ok", new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            ok.doClick();
        }
    });

    cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
            "cancel");
    cancel.getActionMap().put("cancel", new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            cancel.doClick();
        }
    });

    boolean found = false;

    for (int i = 0; i < theTabs.getTabCount(); i++) {

        if (theTabs.getComponentAt(i) instanceof Graph) {
            chartOptions.addItem(getGraphName(i));
            found = true;
        }
    }

    if (!found) {

        existingGraph.setEnabled(false);
        chartOptions.setEnabled(false);
    }

    //add all the action listeners

    radio2d.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            if (radio2d.isSelected()) {

                radio3d.setSelected(false);

                if (chartOptions.getItemCount() > 0) {
                    existingGraph.setEnabled(true);
                    chartOptions.setEnabled(true);
                }

                example.setText(
                        "<html><font size=3 color=red>Example:</font><font size=3>x/2 + 5</font></html>");
            }
        }
    });

    radio3d.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            if (radio3d.isSelected()) {

                radio2d.setSelected(false);
                newGraph.setSelected(true);
                existingGraph.setEnabled(false);
                chartOptions.setEnabled(false);
                example.setText("<html><font size=3 color=red>Example:</font><font size=3>x+y+5</font></html>");

            }

        }
    });

    newGraph.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            if (newGraph.isSelected()) {
                existingGraph.setSelected(false);
                chartOptions.setEnabled(false);
            }
        }
    });

    existingGraph.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            if (existingGraph.isSelected()) {

                newGraph.setSelected(false);
                chartOptions.setEnabled(true);
            }
        }
    });

    ok.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            String function = functionField.getText();

            Expression expr = null;

            try {

                expr = GUIPrism.getGUI().getPrism().parseSingleExpressionString(function);
                expr = (Expression) expr.accept(new ASTTraverseModify() {

                    @Override
                    public Object visit(ExpressionIdent e) throws PrismLangException {
                        return new ExpressionConstant(e.getName(), TypeDouble.getInstance());
                    }

                });

                expr.typeCheck();
                expr.semanticCheck();

            } catch (PrismLangException e1) {

                // for copying style
                JLabel label = new JLabel();

                // html content in our case the error we want to show
                JEditorPane ep = new JEditorPane("text/html",
                        "<html> There was an error parsing the function. To read about what built-in"
                                + " functions are supported <br>and some more information on the functions, visit "
                                + "<a href='http://www.prismmodelchecker.org/manual/ThePRISMLanguage/Expressions'>Prism expressions site</a>."
                                + "<br><br><font color=red>Error: </font>" + e1.getMessage() + " </html>");

                // handle link events
                ep.addHyperlinkListener(new HyperlinkListener() {
                    @Override
                    public void hyperlinkUpdate(HyperlinkEvent e) {
                        if (e.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) {
                            try {
                                Desktop.getDesktop().browse(e.getURL().toURI());
                            } catch (IOException | URISyntaxException e1) {

                                e1.printStackTrace();
                            }
                        }
                    }
                });
                ep.setEditable(false);
                ep.setBackground(label.getBackground());

                // show the error dialog
                JOptionPane.showMessageDialog(dialog, ep, "Parse Error", JOptionPane.ERROR_MESSAGE);
                return;
            }

            if (radio2d.isSelected()) {

                ParametricGraph graph = null;

                if (newGraph.isSelected()) {

                    graph = new ParametricGraph("");
                } else {

                    for (int i = 0; i < theTabs.getComponentCount(); i++) {

                        if (theTabs.getTitleAt(i).equals(chartOptions.getSelectedItem())) {

                            graph = (ParametricGraph) theTabs.getComponent(i);
                        }
                    }

                }

                dialog.dispose();
                defineConstantsAndPlot(expr, graph, seriesName.getText(), newGraph.isSelected(), true);

            } else if (radio3d.isSelected()) {

                try {

                    expr = (Expression) expr.accept(new ASTTraverseModify() {
                        @Override
                        public Object visit(ExpressionIdent e) throws PrismLangException {
                            return new ExpressionConstant(e.getName(), TypeDouble.getInstance());
                        }

                    });

                    expr.semanticCheck();
                    expr.typeCheck();

                } catch (PrismLangException e1) {
                    e1.printStackTrace();
                }

                if (expr.getAllConstants().size() < 2) {

                    JOptionPane.showMessageDialog(dialog,
                            "There are not enough variables in the function to plot a 3D chart!", "Error",
                            JOptionPane.ERROR_MESSAGE);
                    return;
                }

                // its always a new graph
                ParametricGraph3D graph = new ParametricGraph3D(expr);
                dialog.dispose();
                defineConstantsAndPlot(expr, graph, seriesName.getText(), true, false);
            }

            dialog.dispose();
        }
    });

    cancel.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            dialog.dispose();
        }
    });

    // we will show info about the function when field is out of focus
    functionField.addFocusListener(new FocusListener() {

        @Override
        public void focusLost(FocusEvent e) {

            if (!functionField.getText().equals("")) {
                return;
            }

            functionField.setText("Add function expression here....");
            functionField.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 15));
            functionField.setForeground(Color.GRAY);
        }

        @Override
        public void focusGained(FocusEvent e) {

            if (!functionField.getText().equals("Add function expression here....")) {
                return;
            }

            functionField.setForeground(Color.BLACK);
            functionField.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));
            functionField.setText("");
        }
    });

    // show the dialog
    dialog.setVisible(true);
}

From source file:display.ANNFileFilter.java

License:asdf

Yanng() {
    JPanel toolBars;/* ww  w.j a  va 2  s . com*/
    JMenuBar menuBar;
    JToolBar utilBar, fileBar;
    JButton toJava, runner, trainer, modify, getTraininger, inputer, newwer, saver, saveAser, loader, helper;
    JMenu file;
    final JMenu util;
    JMenu help;

    ImageIcon IJava, IRun, ITrain, IModify, INew, ISave, ILoad, IGetTrainingSet, IGetInput, ISaveAs;

    //initialize main window
    mainWindow = new JFrame("YANNG - Yet Another Neural Network (simulator) Generator");
    mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainWindow.setLayout(new BorderLayout());
    mainWindow.setSize(675, 525);
    mainWindow.setIconImage(new ImageIcon(ClassLoader.getSystemResource("display/icons/logo.png")).getImage());
    loadingImage = new ImageIcon(ClassLoader.getSystemResource("display/icons/loading.gif"));

    path = new Vector<String>();
    net = new Vector<NeuralNetwork>();
    oneNet = new Vector<JPanel>();
    tabPanel = new Vector<JPanel>();
    readOut = new Vector<JTextArea>();
    readOutLocale = new Vector<JScrollPane>();
    loadingBar = new Vector<JLabel>();
    title = new Vector<JLabel>();
    close = new Vector<JButton>();
    netName = new Vector<StringBuffer>();
    netKind = new Vector<StringBuffer>();

    resultsPane = new JTabbedPane();

    mainWindow.add(resultsPane);

    toolBars = new JPanel();
    toolBars.setLayout(new FlowLayout(FlowLayout.LEFT));

    //create utilities toolbar with 3 buttons
    utilBar = new JToolBar("Utilities");
    IRun = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/running.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    ITrain = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/training.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    IModify = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/modifyNet.png"))
            .getImage().getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    IGetTrainingSet = new ImageIcon(
            new ImageIcon(ClassLoader.getSystemResource("display/icons/trainingSet.png")).getImage()
                    .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    IGetInput = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/input.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    //set the icons/tooltips for the utilitiy bar    
    runner = new JButton(IRun);
    runner.setToolTipText(
            "<html>Run  the  Current  Neural   Network<br>Once Through with the Current Input</html>");

    trainer = new JButton(ITrain);
    trainer.setToolTipText(
            "<html>Train the Network with the Current<br>Configuration  and  Training  Set</html>");

    modify = new JButton(IModify);
    modify.setToolTipText("<html>Modify the Network<br>for Fun and Profit</html>");

    getTraininger = new JButton(IGetTrainingSet);
    getTraininger.setToolTipText("Get Training Set from File");

    inputer = new JButton(IGetInput);
    inputer.setToolTipText("Get Input Set from File");

    utilBar.add(inputer);
    utilBar.add(runner);
    utilBar.add(getTraininger);
    utilBar.add(trainer);
    utilBar.add(modify);

    //create file toolbar
    fileBar = new JToolBar("file");
    ISaveAs = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/saveAs.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    INew = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/new.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    ISave = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/save.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    ILoad = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/load.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));
    IJava = new ImageIcon(new ImageIcon(ClassLoader.getSystemResource("display/icons/toJava.png")).getImage()
            .getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH));

    newwer = new JButton(INew);
    newwer.setToolTipText("Create New Neural Network");

    saver = new JButton(ISave);
    saver.setToolTipText("Save Current Network Configuration");

    saveAser = new JButton(ISaveAs);
    saveAser.setToolTipText("Save Network As");

    loader = new JButton(ILoad);
    loader.setToolTipText("Load Network Configuration from File");

    toJava = new JButton(IJava);
    toJava.setToolTipText("Export Network to Java Project");

    fileBar.add(newwer);
    fileBar.add(loader);
    fileBar.add(saver);
    fileBar.add(saveAser);
    fileBar.add(toJava);
    toolBars.add(fileBar);
    toolBars.add(utilBar);
    mainWindow.add(toolBars, BorderLayout.NORTH);

    //create a menubar with three menus on it
    menuBar = new JMenuBar();
    file = new JMenu("File");
    util = new JMenu("Utilities");
    help = new JMenu("Help");

    //add menu items for file menu
    load = new JMenuItem("Load Network Configuration");
    newNet = new JMenuItem("New Network");
    saveAs = new JMenuItem("Save Network As");
    save = new JMenuItem("Save Current Configuration");
    exportNet = new JMenuItem("Export Network to Java Project");
    exportOutput = new JMenuItem("Export Output to Text File");
    file.add(load);
    file.add(newNet);
    file.addSeparator();
    file.add(saveAs);
    file.add(save);
    file.addSeparator();
    file.add(exportNet);
    file.add(exportOutput);
    menuBar.add(file);

    //add menu items for utilities menu
    changeConfig = new JMenuItem("Modify Network Settings");
    getInput = new JMenuItem("Get Input From File");
    getTraining = new JMenuItem("Get Training Set From File");
    run = new JMenuItem("Run");
    train = new JMenuItem("Train");
    getColorMap = new JMenuItem("View Color Map");
    getColorMap.setVisible(false);
    util.add(changeConfig);
    util.addSeparator();
    util.add(getInput);
    util.add(getTraining);
    util.addSeparator();
    util.add(run);
    util.add(train);
    menuBar.add(util);

    //add menu items for help menu
    quickStart = new JMenuItem("Quick Start Guide");
    searchHelp = new JMenuItem("Programming with Yanng");
    about = new JMenuItem("License");
    links = new JMenuItem("<html>Links to Resources<br>about Neural Networks</html>");
    help.add(quickStart);
    help.addSeparator();
    help.add(searchHelp);
    help.addSeparator();
    help.add(about);
    help.addSeparator();
    help.add(links);
    menuBar.add(help);

    mainWindow.setJMenuBar(menuBar);

    //opens the quickstart guide
    quickStart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            try {
                File myFile = new File(URLDecoder
                        .decode(ClassLoader.getSystemResource("ann/quick-start.pdf").getFile(), "UTF-8"));
                Desktop.getDesktop().open(myFile);
            } catch (IOException ex) {
                try {
                    Runtime.getRuntime().exec("xdg-open ./yanng/src/ann/quick-start.pdf");
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(mainWindow,
                            "Your desktop is not supported by java,\ngo to yanng/src/ann/quick-start.pdf to view the technical manual.",
                            "Desktop not Supported", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });

    links.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            try {
                File myFile = new File(
                        URLDecoder.decode(ClassLoader.getSystemResource("ann/links.pdf").getFile(), "UTF-8"));
                Desktop.getDesktop().open(myFile);
            } catch (IOException ex) {
                try {
                    Runtime.getRuntime().exec("xdg-open ./yanng/src/ann/links.pdf");
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(mainWindow,
                            "Your desktop is not supported by java,\ngo to yanng/src/ann/links.pdf to view the technical manual.",
                            "Desktop not Supported", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });

    //Displays license information
    about.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            JTextArea x = new JTextArea("Copyright [2015] [Sam Findler and Michael Scott]\n" + "\n"
                    + "Licensed under the Apache License, Version 2.0 (the \"License\");\n"
                    + "you may not use this file except in compliance with the License.\n"
                    + "You may obtain a copy of the License at\n" + "\n"
                    + "http://www.apache.org/licenses/LICENSE-2.0\n" + "\n"
                    + "Unless required by applicable law or agreed to in writing, software\n"
                    + "distributed under the License is distributed on an \"AS IS\" BASIS,\n"
                    + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
                    + "See the License for the specific language governing permissions and\n"
                    + "limitations under the License.");
            JDialog aboutDialog = new JDialog(mainWindow, "License", true);
            aboutDialog.setSize(500, 250);
            aboutDialog.setLayout(new FlowLayout());
            aboutDialog.add(x);
            x.setEditable(false);
            aboutDialog.setVisible(true);
        }
    });

    //opens the more technical user guide
    searchHelp.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            try {
                File myFile = new File(URLDecoder
                        .decode(ClassLoader.getSystemResource("ann/technical-manual.pdf").getFile(), "UTF-8"));
                Desktop.getDesktop().open(myFile);
            } catch (IOException ex) {
                try {
                    Runtime.getRuntime().exec("xdg-open ./yanng/src/ann/technical-manual.pdf");
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(mainWindow,
                            "Your desktop is not supported by java,\ngo to yanng/src/ann/technical-manual.pdf to view the technical manual.",
                            "Desktop not Supported", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });
    //class trains the neural network in the background while the loading bar displays, then prints out the output/connections listings/average error to the readOut pane
    class Trainer extends SwingWorker<NeuralNetwork, Object> {
        protected NeuralNetwork doInBackground() {
            net.get(resultsPane.getSelectedIndex()).trainNet();
            setProgress(1);
            return net.get(resultsPane.getSelectedIndex());
        }

        public void done() {
            if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Feed Forward Network")) {
                if (Double.isNaN(net.get(resultsPane.getSelectedIndex()).getAverageError()))
                    JOptionPane.showMessageDialog(mainWindow, "Training Set Formatted Incorrectly",
                            "Formatting Error", JOptionPane.ERROR_MESSAGE);
                else {
                    printConnections();
                    readOut.get(resultsPane.getSelectedIndex()).append(
                            "Results of Training " + netName.get(resultsPane.getSelectedIndex()) + ":\n\n");
                    printOutput();
                    readOut.get(resultsPane.getSelectedIndex()).append("Average Error = "
                            + net.get(resultsPane.getSelectedIndex()).getAverageError() + "\n\n");
                    loadingBar.get(resultsPane.getSelectedIndex()).setVisible(false);
                    JOptionPane.showMessageDialog(mainWindow,
                            "<html>If the Input is not displaying as expected, chances are the input was inproperly formatted.<br>See help for more details<html>");
                }
            } else if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Self-Organizing Map")) {
                readOut.get(resultsPane.getSelectedIndex()).append("\nUpdated Untrained Map:\n");
                printInitMap();
                loadingBar.get(resultsPane.getSelectedIndex()).setVisible(false);
                JOptionPane.showMessageDialog(mainWindow,
                        "<html>If the Input is not displaying as expected, chances are the input was inproperly formatted.<br>See help for more details<html>");
            }
        }

    }
    //starts the training class when train is pressed in the utilities menu
    train.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {

            if (resultsPane.getTabCount() != 0) {
                if (net.get(resultsPane.getSelectedIndex()).getTrainingSet() != null) {
                    loadingBar.get(resultsPane.getSelectedIndex()).setText(
                            "<html><font color = rgb(160,0,0)>Training</font> <font color = rgb(0,0,248)>net...</font></html>");
                    loadingBar.get(resultsPane.getSelectedIndex()).setVisible(true);
                    (thisTrainer = new Trainer()).execute();
                } else
                    JOptionPane.showMessageDialog(mainWindow, "No Input Set Specified", "Empty Signifier Error",
                            JOptionPane.ERROR_MESSAGE);
            }

            else
                JOptionPane.showMessageDialog(mainWindow, "Can't Train Nonexistent Neural Network",
                        "Existential Error", JOptionPane.ERROR_MESSAGE);
        }
    });
    //associates the toolbar button with the jump rope guy with the training button on the utilities menu
    trainer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : train.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //runs through one set of inputs and prints the results to the readOut pane  
    run.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Feed Forward Network")) {
                if (net.get(resultsPane.getSelectedIndex()).getInputSet() != null) {
                    net.get(resultsPane.getSelectedIndex()).runNet();
                    if (Double.isNaN(net.get(resultsPane.getSelectedIndex()).getAverageError()))
                        JOptionPane.showMessageDialog(mainWindow, "Training Set Formatted Incorrectly",
                                "Formatting Error", JOptionPane.ERROR_MESSAGE);
                    else {
                        readOut.get(resultsPane.getSelectedIndex()).append("Results of Running through Network "
                                + netName.get(resultsPane.getSelectedIndex()) + ":\n\n");
                        printOutput();
                        System.out.println("Results:");
                        for (int i = 0; i < net.get(resultsPane.getSelectedIndex())
                                .getOutputSet().length; i++) {
                            System.out.println("\n   Output of Input Vector " + i + ":");
                            for (int j = 0; j < net.get(resultsPane.getSelectedIndex())
                                    .getOutputSet()[i].length; j++) {
                                System.out.println("      Output Node " + j + " = "
                                        + net.get(resultsPane.getSelectedIndex()).getOutputSet()[i][j]);
                            }
                        }
                        JOptionPane.showMessageDialog(mainWindow,
                                "<html>If the Input is not displaying as expected, chances are the input was inproperly formatted.<br>See help for more details<html>");
                    }
                } else
                    JOptionPane.showMessageDialog(mainWindow, "No Input Set Specified", "Empty Signifier Error",
                            JOptionPane.ERROR_MESSAGE);
            } else if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Self-Organizing Map")) {
                if (net.get(resultsPane.getSelectedIndex()).getInputValues() != null) {
                    loadingBar.get(resultsPane.getSelectedIndex()).setText(
                            "<html><font color = rgb(160,0,0)>Training</font> <font color = rgb(0,0,248)>net...</font></html>");
                    loadingBar.get(resultsPane.getSelectedIndex()).setVisible(true);
                    (thisTrainer = new Trainer()).execute();
                } else
                    JOptionPane.showMessageDialog(mainWindow, "No Input Set Specified", "Empty Signifier Error",
                            JOptionPane.ERROR_MESSAGE);
            } else
                JOptionPane.showMessageDialog(mainWindow, "Can't Run Nonexistent Neural Network",
                        "Existential Error", JOptionPane.ERROR_MESSAGE);
        }
    });

    runner.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : run.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //the following code is for the getTraining button under utilities
    getTrainingSet = new JFileChooser();
    getTrainingSet.setFileFilter(new TrainingFileFilter());

    getTraining.addActionListener(new ActionListener() {
        //this method/class gets a training set (tsv/csv file) and parse it through the neural network.  Kind of test that the file is formatted correctly, but if the data is wrong, there isn't much it can do.
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Feed Forward Network")) {
                int result;
                result = getTrainingSet.showOpenDialog(mainWindow);
                if (result == JFileChooser.APPROVE_OPTION)
                    if (getTrainingSet.getSelectedFile().getName().endsWith(".csv")
                            || getTrainingSet.getSelectedFile().getName().endsWith(".tsv")
                            || getTrainingSet.getSelectedFile().getName().endsWith(".txt"))
                        if (net.get(resultsPane.getSelectedIndex())
                                .parseTrainingSet(getTrainingSet.getSelectedFile()))
                            JOptionPane.showMessageDialog(mainWindow,
                                    "<html>Method gives no Garuntee that this File is Formatted Correctly<br>(see help for more details)</html>",
                                    "Formatting Warning", JOptionPane.WARNING_MESSAGE);
                        else
                            JOptionPane.showMessageDialog(mainWindow,
                                    "File Mismatch with Network Configuration", "Correspondence Error",
                                    JOptionPane.ERROR_MESSAGE);
                    else {
                        JOptionPane.showMessageDialog(mainWindow, "Wrong File Type", "Category Error",
                                JOptionPane.ERROR_MESSAGE);
                    }
                else {
                    JOptionPane.showMessageDialog(mainWindow, "No File Selected", "Absence Warning",
                            JOptionPane.WARNING_MESSAGE);
                }
            } else if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Self-Organizing Map")) {
                int result;
                result = getTrainingSet.showOpenDialog(mainWindow);
                if (result == JFileChooser.APPROVE_OPTION)
                    if (getTrainingSet.getSelectedFile().getName().endsWith(".csv")
                            || getTrainingSet.getSelectedFile().getName().endsWith(".tsv")
                            || getTrainingSet.getSelectedFile().getName().endsWith(".txt"))
                        if (net.get(resultsPane.getSelectedIndex())
                                .parseTrainingSet(getTrainingSet.getSelectedFile())) {
                            JOptionPane.showMessageDialog(mainWindow,
                                    "<html>Method gives no Garuntee that this File is Formatted Correctly<br>(see help for more details)</html>",
                                    "Formatting Warning", JOptionPane.WARNING_MESSAGE);
                            readOut.get(resultsPane.getSelectedIndex()).append("\nUpdated Untrained Map:\n");
                            printInitMap();
                        } else
                            JOptionPane.showMessageDialog(mainWindow,
                                    "File Mismatch with Network Configuration", "Correspondence Error",
                                    JOptionPane.ERROR_MESSAGE);
                    else {
                        JOptionPane.showMessageDialog(mainWindow, "Wrong File Type", "Category Error",
                                JOptionPane.ERROR_MESSAGE);
                    }
                else {
                    JOptionPane.showMessageDialog(mainWindow, "No File Selected", "Absence Warning",
                            JOptionPane.WARNING_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Can't Train Nonexistent Neural Network",
                        "Existential Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    getTraininger.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : getTraining.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //this ends the getTraining section of the code   

    getInput.addActionListener(new ActionListener() {
        //this method/class gets an input set (tsv/csv file) and parses it through the neural network.  Somewhat tests that the file is formatted correctly, but cannot give a garuntee.
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0) {
                int result;
                result = getTrainingSet.showOpenDialog(mainWindow);
                if (result == JFileChooser.APPROVE_OPTION)
                    if (getTrainingSet.getSelectedFile().getName().endsWith(".csv")
                            || getTrainingSet.getSelectedFile().getName().endsWith(".tsv")
                            || getTrainingSet.getSelectedFile().getName().endsWith(".txt"))
                        if (net.get(resultsPane.getSelectedIndex())
                                .parseInputSet(getTrainingSet.getSelectedFile())) {
                            JOptionPane.showMessageDialog(mainWindow,
                                    "<html>Method gives no Garuntee that this File is Formatted Correctly<br>(see help for more details)</html>",
                                    "Formatting Warning", JOptionPane.WARNING_MESSAGE);
                            if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                    .equals("Self-Organizing Map"))
                                printInitMap();
                        } else
                            JOptionPane.showMessageDialog(mainWindow,
                                    "File Mismatch with Network Configuration", "Correspondence Error",
                                    JOptionPane.ERROR_MESSAGE);
                    else
                        JOptionPane.showMessageDialog(mainWindow, "Wrong File Type", "Category Error",
                                JOptionPane.ERROR_MESSAGE);
                else
                    JOptionPane.showMessageDialog(mainWindow, "No File Selected", "Absence Warning",
                            JOptionPane.WARNING_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Can't train nonexistent network",
                        "Existential Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    //opens and displays a color map of a SOM
    getColorMap.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0) {
                if (netKind.get(resultsPane.getSelectedIndex()).toString().equals("Self-Organizing Map")) {
                    MapNode[][] map;

                    map = net.get(resultsPane.getSelectedIndex()).getMapArray();

                    int lValue = net.get(resultsPane.getSelectedIndex()).getLatticeValue();

                    int inputDimensions = net.get(resultsPane.getSelectedIndex()).getInputDimensions();

                    int[][] colorValues = new int[(lValue * lValue)][3];

                    double dMax = net.get(resultsPane.getSelectedIndex()).getDataMax();
                    double dMin = net.get(resultsPane.getSelectedIndex()).getDataMin();

                    int count = 0;

                    for (int i = 0; i < lValue; i++) {
                        for (int j = 0; j < lValue; j++) {
                            for (int k = 0; k < 3; k++) {
                                Vector tempVec = map[i][j].getWeights();
                                if (inputDimensions % 3 == 0) {
                                    colorValues[count][k] = Integer.parseInt(String.valueOf((Math.round(255
                                            * (Double.parseDouble(String.valueOf(tempVec.elementAt(k))))))));
                                }
                                if (inputDimensions % 3 == 1) {
                                    if (k == 0)
                                        colorValues[count][k] = 0;
                                    if (k == 1) {
                                        colorValues[count][k] = Integer
                                                .parseInt(String.valueOf((Math.round(255 * (Double
                                                        .parseDouble(String.valueOf(tempVec.elementAt(0))))))));
                                    }
                                    if (k == 2)
                                        colorValues[count][k] = 0;
                                }
                                if (inputDimensions % 3 == 2) {
                                    if (k == 2) {
                                        colorValues[count][k] = 0;
                                    } else
                                        colorValues[count][k] = Integer
                                                .parseInt(String.valueOf((Math.round(255 * (Double
                                                        .parseDouble(String.valueOf(tempVec.elementAt(k))))))));
                                }
                            }
                            count++;
                        }
                    }

                    JFrame frame = new JFrame();

                    frame.setTitle("Color Map");
                    frame.setPreferredSize(new Dimension(525, 500));
                    frame.add(new DrawPanel(colorValues, lValue));
                    frame.pack();
                    frame.setVisible(true);
                }

                else {
                    JOptionPane.showMessageDialog(mainWindow,
                            "This Feauture is only available for Self-Organizing Maps", "Not a Som Error",
                            JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Network does not exist", "Existential Error",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    inputer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : getInput.getActionListeners())
                a.actionPerformed(ae);
        }
    });

    getNet = new JFileChooser();
    getNet.setFileFilter(new ANNFileFilter());

    //saves the net, or opens save as dialog if net is not saved yet
    save.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0) {
                if (!path.get(resultsPane.getSelectedIndex()).equals("")) {
                    net.get(resultsPane.getSelectedIndex())
                            .save(new File(path.get(resultsPane.getSelectedIndex())));
                }

                else {
                    for (ActionListener a : saveAs.getActionListeners()) {
                        a.actionPerformed(ae);
                    }
                }
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Can't save NonExistent Neural Network",
                        "Existential Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    saver.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : save.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //opens dialog for saving the net
    saveAs.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0) {
                int result, override;
                String tempName;
                result = getNet.showSaveDialog(mainWindow);
                if (result == JFileChooser.APPROVE_OPTION)
                    if ((new File(tempName = getNet.getSelectedFile().getName())).exists()
                            || (new File(tempName + ".ffn")).exists() || (new File(tempName + ".som")).exists()
                            || (new File(tempName + ".hfn")).exists()) {
                        override = JOptionPane.showConfirmDialog(mainWindow,
                                tempName + " already exists, do you want to override?", "File Exists",
                                JOptionPane.YES_NO_OPTION);
                        if (override == JOptionPane.YES_OPTION) {
                            if (net.get(resultsPane.getSelectedIndex()).save(getNet.getSelectedFile())) {
                                if (tempName.endsWith(".ffn") || tempName.endsWith(".som")) {
                                    netName.set(resultsPane.getSelectedIndex(), new StringBuffer(tempName));
                                    title.get(resultsPane.getSelectedIndex()).setText(tempName + " ");
                                } else if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                        .equals("Feed Forward Network")) {
                                    netName.set(resultsPane.getSelectedIndex(),
                                            new StringBuffer(tempName + ".ffn"));
                                    title.get(resultsPane.getSelectedIndex()).setText(tempName + ".ffn ");
                                } else if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                        .equals("Self-Organizing Map")) {
                                    netName.set(resultsPane.getSelectedIndex(),
                                            new StringBuffer(tempName + ".som"));
                                    title.get(resultsPane.getSelectedIndex()).setText(tempName + ".som ");
                                }
                                path.set(resultsPane.getSelectedIndex(), getNet.getSelectedFile().getPath());

                            } else
                                JOptionPane.showMessageDialog(mainWindow, "Could not save file", "File Error",
                                        JOptionPane.ERROR_MESSAGE);
                        }
                    } else {
                        if (net.get(resultsPane.getSelectedIndex()).save(getNet.getSelectedFile())) {
                            if (tempName.endsWith(".ffn") || tempName.endsWith(".som")
                                    || tempName.endsWith(".hfn")) {
                                netName.set(resultsPane.getSelectedIndex(), new StringBuffer(tempName));
                                title.get(resultsPane.getSelectedIndex()).setText(tempName + " ");
                            } else if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                    .equals("Feed Forward Network")) {
                                netName.set(resultsPane.getSelectedIndex(),
                                        new StringBuffer(tempName + ".ffn"));
                                title.get(resultsPane.getSelectedIndex()).setText(tempName + ".ffn ");
                            } else if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                    .equals("Self-Organizing Map")) {
                                netName.set(resultsPane.getSelectedIndex(),
                                        new StringBuffer(tempName + ".som"));
                                title.get(resultsPane.getSelectedIndex()).setText(tempName + ".som ");
                                path.set(resultsPane.getSelectedIndex(), getNet.getSelectedFile().getPath());
                            }
                        } else
                            JOptionPane.showMessageDialog(mainWindow, "Could not save file", "File Error",
                                    JOptionPane.ERROR_MESSAGE);
                    }
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Nothing to Save", "Existetial Error",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    saveAser.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : saveAs.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //loads a net
    load.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            int result;
            boolean test = true;
            String tempName;
            result = getNet.showOpenDialog(mainWindow);
            if (result == JFileChooser.APPROVE_OPTION) {
                tempName = getNet.getSelectedFile().getName();
                for (StringBuffer names : netName) {
                    if (names.toString().equals(tempName))
                        test = false;
                }
                if (test != false) {
                    //creates and sets the network configuration
                    if (tempName.endsWith(".ffn")) {
                        net.add(new FullyConnectedFeedForwardNet());
                    }
                    if (tempName.endsWith(".som")) {
                        net.add(new SelfOrganizingMap());
                    }
                    if (net.get(openNets).load(getNet.getSelectedFile()))
                        try {
                            //adds a close button to the top corner of each tab
                            title.add(new JLabel(tempName + " "));
                            close.add(new JButton("X"));
                            close.get(openNets).setActionCommand(tempName);
                            close.get(openNets)
                                    .setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
                            close.get(openNets).setMargin(new Insets(0, 0, 0, 0));
                            tabPanel.add(new JPanel(new GridBagLayout()));
                            tabPanel.get(openNets).setOpaque(false);
                            GridBagConstraints grid = new GridBagConstraints();
                            grid.fill = GridBagConstraints.HORIZONTAL;
                            grid.gridx = 0;
                            grid.gridy = 0;
                            grid.weightx = 1;
                            tabPanel.get(openNets).add(title.get(openNets), grid);
                            grid.gridx = 1;
                            grid.gridy = 0;
                            grid.weightx = 0;
                            tabPanel.get(openNets).add(close.get(openNets), grid);

                            //adds a loading bar
                            loadingBar.add(new JLabel("", loadingImage, SwingConstants.CENTER));
                            loadingBar.get(openNets).setHorizontalTextPosition(SwingConstants.LEFT);
                            loadingBar.get(openNets).setVisible(false);

                            path.add(getNet.getSelectedFile().getPath());

                            netKind.add(new StringBuffer(netType.getSelectedItem().toString()));
                            netName.add(new StringBuffer(tempName));
                            oneNet.add(new JPanel());
                            oneNet.get(openNets).setLayout(new GridBagLayout());
                            GridBagConstraints constraints = new GridBagConstraints();
                            constraints.fill = GridBagConstraints.BOTH;

                            //creates the readOut space and formats it so that the scroll pane/text changes size with the window, reserves space for the loading bar
                            readOut.add(new JTextArea(""));
                            readOutLocale.add(new JScrollPane(readOut.get(openNets)));
                            readOut.get(openNets).setEditable(false);
                            constraints.gridx = 0;
                            constraints.gridy = 0;
                            constraints.weighty = 1.0;
                            constraints.weightx = 1.0;
                            constraints.gridwidth = 2;
                            constraints.ipady = 90;
                            oneNet.get(openNets).add(readOutLocale.get(openNets), constraints);
                            constraints.fill = GridBagConstraints.HORIZONTAL;
                            constraints.gridx = 0;
                            constraints.gridy = 1;
                            constraints.ipady = 0;
                            constraints.gridwidth = 2;
                            constraints.anchor = GridBagConstraints.PAGE_END;

                            //add everythign to the tabbed pane
                            oneNet.get(openNets).add(loadingBar.get(openNets), constraints);
                            resultsPane.addTab(netName.get(openNets).toString(), oneNet.get(openNets));
                            resultsPane.setTabComponentAt(openNets, tabPanel.get(openNets));

                            //display the starting configuration of the network
                            readOut.get(openNets).append("Network: " + netName.get(openNets) + "\n\n");
                            resultsPane.setSelectedIndex(openNets++);
                            if (tempName.endsWith(".ffn"))
                                printConnections();
                            if (tempName.endsWith(".som")) {
                                readOut.get(resultsPane.getSelectedIndex()).append("\nUpdated Map:\n");
                                printInitMap();
                            }

                            //unfortunately difficult way that I made to add the close button functionality to close a tab
                            //it works, but there has to be a better way to do this
                            close.get(resultsPane.getSelectedIndex()).addActionListener(new ActionListener() {
                                public void actionPerformed(final ActionEvent ae) {
                                    int result;
                                    result = 0;
                                    for (StringBuffer names : netName) {
                                        if (ae.getActionCommand().equals(names.toString())) {
                                            result = JOptionPane.showConfirmDialog(createFFN,
                                                    "<html>Exiting Without Saving can Cause you to Lose your Progress<br>Are you sure you want to Continue?</html>",
                                                    "Close Network", JOptionPane.OK_CANCEL_OPTION);
                                            resultsPane.setSelectedIndex(netName.indexOf(names));
                                        }
                                    }
                                    if (result == JOptionPane.OK_OPTION) {
                                        net.remove(resultsPane.getSelectedIndex());
                                        oneNet.remove(resultsPane.getSelectedIndex());
                                        readOutLocale.remove(resultsPane.getSelectedIndex());
                                        readOut.remove(resultsPane.getSelectedIndex());
                                        loadingBar.remove(resultsPane.getSelectedIndex());
                                        tabPanel.remove(resultsPane.getSelectedIndex());
                                        title.remove(resultsPane.getSelectedIndex());
                                        close.remove(resultsPane.getSelectedIndex());
                                        netName.remove(resultsPane.getSelectedIndex());
                                        resultsPane.remove(resultsPane.getSelectedIndex());
                                        openNets--;
                                    }
                                }
                            });
                        } catch (Error e) {
                            JOptionPane.showMessageDialog(mainWindow, "File Formatted Incorrectly",
                                    "Formatting Error", JOptionPane.ERROR_MESSAGE);
                        }
                    else {
                        //if file was unable to load, remove the newly created neural network and display an error message
                        net.remove(openNets);
                        JOptionPane.showMessageDialog(mainWindow, "File Formatted Incorrectly",
                                "Formatting Error", JOptionPane.ERROR_MESSAGE);
                    }
                }

                else {
                    JOptionPane.showMessageDialog(mainWindow, "File Already Open", "Duality Error",
                            JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });

    //associates the load toolbar button with load from the file menu
    loader.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : load.getActionListeners())
                a.actionPerformed(ae);
        }
    });

    textFileChooser = new JFileChooser();
    textFileChooser.setFileFilter(new TextFileFilter());

    //exports all text from readout to a text file
    exportOutput.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0) {
                int result;
                result = textFileChooser.showSaveDialog(mainWindow);
                if (result == JFileChooser.APPROVE_OPTION) {
                    if (textFileChooser.getSelectedFile().exists()
                            || (new File(textFileChooser.getSelectedFile().getPath() + ".txt")).exists()) {
                        result = JOptionPane.showConfirmDialog(mainWindow,
                                "The File you have selected already Exists, do you want to Overwrite it?",
                                "File Exits", JOptionPane.YES_NO_OPTION);
                        if (result == JOptionPane.YES_OPTION) {
                            try {
                                if (textFileChooser.getSelectedFile().getPath().endsWith(".txt"))
                                    FileUtils.writeStringToFile(textFileChooser.getSelectedFile(),
                                            readOut.get(resultsPane.getSelectedIndex()).getText());
                                else
                                    FileUtils.writeStringToFile(
                                            new File(textFileChooser.getSelectedFile().getPath() + ".txt"),
                                            readOut.get(resultsPane.getSelectedIndex()).getText());
                                JOptionPane.showMessageDialog(mainWindow, "Succesfully wrote readout to file");
                            } catch (Exception e) {
                                JOptionPane.showMessageDialog(mainWindow, "Could not write to file", "Error",
                                        JOptionPane.ERROR_MESSAGE);
                            }
                        }
                    } else {
                        try {
                            if (textFileChooser.getSelectedFile().getPath().endsWith(".txt"))
                                FileUtils.writeStringToFile(textFileChooser.getSelectedFile(),
                                        readOut.get(resultsPane.getSelectedIndex()).getText());
                            else
                                FileUtils.writeStringToFile(
                                        new File(textFileChooser.getSelectedFile().getPath() + ".txt"),
                                        readOut.get(resultsPane.getSelectedIndex()).getText());
                            JOptionPane.showMessageDialog(mainWindow, "Succesfully wrote readout to file");
                        } catch (Exception e) {
                            JOptionPane.showMessageDialog(mainWindow, "Could not write to file", "Error",
                                    JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Nothing to Export", "Existential Error",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    projectFileChooser = new JFileChooser();
    projectFileChooser.setFileFilter(new ProjectFileFilter());

    //exports a neural network to a java/android project
    exportNet.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            int result, override, override2;
            String tempName;
            String templateFile;
            String directory;
            String path;
            if (resultsPane.getTabCount() != 0) {
                result = projectFileChooser.showSaveDialog(mainWindow);
                if (result == JFileChooser.APPROVE_OPTION) {
                    path = projectFileChooser.getSelectedFile().getPath();
                    directory = projectFileChooser.getSelectedFile().getPath().substring(0,
                            projectFileChooser.getSelectedFile().getPath().lastIndexOf(File.separator));
                    tempName = projectFileChooser.getSelectedFile().getName();
                    if (projectFileChooser.getSelectedFile().exists()
                            || (new File(directory, tempName + ".java")).exists()) {
                        override = JOptionPane.showConfirmDialog(mainWindow,
                                "Java Class File" + tempName + " already exists, do you want to overwrite it?",
                                "File Exists", JOptionPane.YES_NO_OPTION);
                        if (override == JOptionPane.YES_OPTION) {
                            try {
                                if (!(new File(directory, "ann")).exists())
                                    FileUtils.copyDirectoryToDirectory(
                                            FileUtils.toFile(ClassLoader.getSystemResource("ann/")),
                                            new File(directory));
                                if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                        .equals("Feed Forward Network")) {
                                    templateFile = FileUtils.readFileToString(FileUtils
                                            .toFile(ClassLoader.getSystemResource("ann/FFNTemplate.txt")));
                                    templateFile = templateFile.replaceAll("yourpackagename",
                                            (new File(directory)).getName());
                                    templateFile = templateFile.replaceAll("YourProjectName",
                                            projectFileChooser.getSelectedFile().getName());
                                    if (netName.get(resultsPane.getSelectedIndex()).toString().endsWith(".ffn"))
                                        templateFile = templateFile.replaceAll("networkName",
                                                (new File(directory)).getName() + File.separator + netName
                                                        .get(resultsPane.getSelectedIndex()).toString());
                                    else
                                        templateFile = templateFile.replaceAll("networkName",
                                                (new File(directory)).getName() + File.separator
                                                        + netName.get(resultsPane.getSelectedIndex()).toString()
                                                        + ".ffn");
                                    if (path.indexOf('.') > 0) {
                                        FileUtils.writeStringToFile(
                                                new File(path.substring(0, path.lastIndexOf('.')) + ".java"),
                                                templateFile);
                                    } else
                                        FileUtils.writeStringToFile(new File(path + ".java"), templateFile);
                                    if ((new File(directory,
                                            (tempName = netName.get(resultsPane.getSelectedIndex())
                                                    .toString()))).exists()
                                            || (new File(directory, tempName + ".ffn")).exists()) {
                                        override2 = JOptionPane.showConfirmDialog(mainWindow,
                                                "Neural Network " + tempName
                                                        + " already exists, do you want to overwrite it?",
                                                "File Exists", JOptionPane.YES_NO_OPTION);
                                        if (override2 == JOptionPane.YES_OPTION)
                                            if (net.get(resultsPane.getSelectedIndex())
                                                    .save(new File(directory + File.separator + tempName))) {
                                                JOptionPane.showMessageDialog(mainWindow, "Network Exported to "
                                                        + (new File(directory)).getName());
                                            } else {
                                                JOptionPane.showMessageDialog(mainWindow,
                                                        "Couldn't save neural network to file, the rest of the project is exported",
                                                        "Write Error", JOptionPane.ERROR_MESSAGE);
                                            }
                                    } else {
                                        if (net.get(resultsPane.getSelectedIndex())
                                                .save(new File(directory + File.separator + tempName))) {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Network Exported to " + (new File(directory)).getName());
                                        } else {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Couldn't save neural network to file, the rest of the project is exported",
                                                    "Write Error", JOptionPane.ERROR_MESSAGE);
                                        }
                                    }
                                } else if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                        .equals("Self-Organizing Map")) {
                                    templateFile = FileUtils.readFileToString(FileUtils
                                            .toFile(ClassLoader.getSystemResource("ann/SOMTemplate.txt")));
                                    templateFile = templateFile.replaceAll("yourpackagename",
                                            (new File(directory)).getName());
                                    templateFile = templateFile.replaceAll("YourProjectName",
                                            projectFileChooser.getSelectedFile().getName());
                                    if (netName.get(resultsPane.getSelectedIndex()).toString().endsWith(".som"))
                                        templateFile = templateFile.replaceAll("networkName",
                                                (new File(directory)).getName() + File.separator + netName
                                                        .get(resultsPane.getSelectedIndex()).toString());
                                    else
                                        templateFile = templateFile.replaceAll("networkName",
                                                (new File(directory)).getName() + File.separator
                                                        + netName.get(resultsPane.getSelectedIndex()).toString()
                                                        + ".som");
                                    if (path.indexOf('.') > 0) {
                                        FileUtils.writeStringToFile(
                                                new File(path.substring(0, path.lastIndexOf('.')) + ".java"),
                                                templateFile);
                                    } else
                                        FileUtils.writeStringToFile(new File(path + ".java"), templateFile);
                                    if ((new File(directory,
                                            (tempName = netName.get(resultsPane.getSelectedIndex())
                                                    .toString()))).exists()
                                            || (new File(directory, tempName + ".som")).exists()) {
                                        override2 = JOptionPane.showConfirmDialog(mainWindow,
                                                "Neural Network " + tempName
                                                        + " already exists, do you want to overwrite it?",
                                                "File Exists", JOptionPane.YES_NO_OPTION);
                                        if (override2 == JOptionPane.YES_OPTION)
                                            if (net.get(resultsPane.getSelectedIndex())
                                                    .save(new File(directory + File.separator + tempName))) {
                                                JOptionPane.showMessageDialog(mainWindow, "Network Exported to "
                                                        + (new File(directory)).getName());
                                            } else {
                                                JOptionPane.showMessageDialog(mainWindow,
                                                        "Couldn't save neural network to file, the rest of the project is exported",
                                                        "Write Error", JOptionPane.ERROR_MESSAGE);
                                            }
                                    } else {
                                        if (net.get(resultsPane.getSelectedIndex())
                                                .save(new File(directory + File.separator + tempName))) {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Network Exported to " + (new File(directory)).getName());
                                        } else {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Couldn't save neural network to file, the rest of the project is exported",
                                                    "Write Error", JOptionPane.ERROR_MESSAGE);
                                        }
                                    }
                                }
                            } catch (IOException io) {
                                System.out.println(io);
                            }

                        }
                    } else {
                        try {
                            if (!(new File(directory, "ann")).exists())
                                FileUtils.copyDirectoryToDirectory(
                                        FileUtils.toFile(ClassLoader.getSystemResource("ann/")),
                                        new File(directory));
                            if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                    .equals("Feed Forward Network")) {
                                templateFile = FileUtils.readFileToString(
                                        FileUtils.toFile(ClassLoader.getSystemResource("ann/FFNTemplate.txt")));
                                templateFile = templateFile.replaceAll("yourpackagename",
                                        (new File(directory)).getName());
                                templateFile = templateFile.replaceAll("YourProjectName",
                                        projectFileChooser.getSelectedFile().getName());
                                if (netName.get(resultsPane.getSelectedIndex()).toString().endsWith(".ffn"))
                                    templateFile = templateFile.replaceAll("networkName",
                                            (new File(directory)).getName() + File.separator
                                                    + netName.get(resultsPane.getSelectedIndex()).toString());
                                else
                                    templateFile = templateFile.replaceAll("networkName",
                                            (new File(directory)).getName() + File.separator
                                                    + netName.get(resultsPane.getSelectedIndex()).toString()
                                                    + ".ffn");
                                if (path.indexOf('.') > 0) {
                                    FileUtils.writeStringToFile(
                                            new File(path.substring(0, path.lastIndexOf('.')) + ".java"),
                                            templateFile);
                                } else
                                    FileUtils.writeStringToFile(new File(path + ".java"), templateFile);
                                if ((new File(directory + File.separator
                                        + (tempName = netName.get(resultsPane.getSelectedIndex()).toString())))
                                                .exists()
                                        || (new File(directory + File.separator + tempName + ".ffn"))
                                                .exists()) {
                                    override2 = JOptionPane.showConfirmDialog(mainWindow,
                                            "Neural Network " + tempName
                                                    + " already exists, do you want to overwrite it?",
                                            "File Exists", JOptionPane.YES_NO_OPTION);
                                    if (override2 == JOptionPane.YES_OPTION)
                                        if (net.get(resultsPane.getSelectedIndex())
                                                .save(new File(directory + File.separator + tempName))) {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Network Exported to " + (new File(directory)).getName());
                                        } else {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Couldn't save neural network to file, the rest of the project is exported",
                                                    "Write Error", JOptionPane.ERROR_MESSAGE);
                                        }
                                } else {
                                    if (net.get(resultsPane.getSelectedIndex())
                                            .save(new File(directory + File.separator + tempName))) {
                                        JOptionPane.showMessageDialog(mainWindow,
                                                "Network Exported to " + (new File(directory)).getName());
                                    } else {
                                        JOptionPane.showMessageDialog(mainWindow,
                                                "Couldn't save neural network to file, the rest of the project is exported",
                                                "Write Error", JOptionPane.ERROR_MESSAGE);
                                    }
                                }
                            } else if (netKind.get(resultsPane.getSelectedIndex()).toString()
                                    .equals("Self-Organizing Map")) {
                                templateFile = FileUtils.readFileToString(
                                        FileUtils.toFile(ClassLoader.getSystemResource("ann/SOMTemplate.txt")));
                                templateFile = templateFile.replaceAll("yourpackagename",
                                        (new File(directory)).getName());
                                templateFile = templateFile.replaceAll("YourProjectName",
                                        projectFileChooser.getSelectedFile().getName());
                                if (netName.get(resultsPane.getSelectedIndex()).toString().endsWith(".som"))
                                    templateFile = templateFile.replaceAll("networkName",
                                            (new File(directory)).getName() + File.separator
                                                    + netName.get(resultsPane.getSelectedIndex()).toString());
                                else
                                    templateFile = templateFile.replaceAll("networkName",
                                            (new File(directory)).getName() + File.separator
                                                    + netName.get(resultsPane.getSelectedIndex()).toString()
                                                    + ".som");
                                if (path.indexOf('.') > 0) {
                                    FileUtils.writeStringToFile(
                                            new File(path.substring(0, path.lastIndexOf('.')) + ".java"),
                                            templateFile);
                                } else
                                    FileUtils.writeStringToFile(new File(path + ".java"), templateFile);
                                if ((new File(directory,
                                        (tempName = netName.get(resultsPane.getSelectedIndex()).toString())))
                                                .exists()
                                        || (new File(directory, tempName + ".som")).exists()) {
                                    override2 = JOptionPane.showConfirmDialog(mainWindow,
                                            "Neural Network " + tempName
                                                    + " already exists, do you want to overwrite it?",
                                            "File Exists", JOptionPane.YES_NO_OPTION);
                                    if (override2 == JOptionPane.YES_OPTION)
                                        if (net.get(resultsPane.getSelectedIndex())
                                                .save(new File(directory + File.separator + tempName))) {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Network Exported to " + (new File(directory)).getName());
                                        } else {
                                            JOptionPane.showMessageDialog(mainWindow,
                                                    "Couldn't save neural network to file, the rest of the project is exported",
                                                    "Write Error", JOptionPane.ERROR_MESSAGE);
                                        }
                                } else {
                                    if (net.get(resultsPane.getSelectedIndex())
                                            .save(new File(directory + File.separator + tempName))) {
                                        JOptionPane.showMessageDialog(mainWindow,
                                                "Network Exported to " + (new File(directory)).getName());
                                    } else {
                                        JOptionPane.showMessageDialog(mainWindow,
                                                "Couldn't save neural network to file, the rest of the project is exported",
                                                "Write Error", JOptionPane.ERROR_MESSAGE);
                                    }
                                }
                            }
                        } catch (IOException io) {
                            System.out.println(io);
                        }
                    }
                }
            } else {
                JOptionPane.showMessageDialog(mainWindow, "Can't Export NonExistent Neural Network",
                        "Existential Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    toJava.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : exportNet.getActionListeners())
                a.actionPerformed(ae);
        }
    });

    //settings menu
    changeConfig.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Feed Forward Network")) {

                modifyFFNDialog = new JDialog(mainWindow, "Network Settings", true);
                modifyFFNDialog.setSize(500, 500);
                modifyFFNDialog.setLayout(new GridBagLayout());
                GridBagConstraints asdf = new GridBagConstraints();
                asdf.gridwidth = 5;
                asdf.gridheight = 1;
                asdf.gridx = 0;
                asdf.gridy = 0;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.gridwidth = 5;
                asdf.gridheight = 15;
                asdf.weightx = 1.0;
                asdf.weighty = 1.0;
                asdf.gridx = 0;
                asdf.gridy = 1;
                asdf.fill = GridBagConstraints.BOTH;
                settings = new JTextArea();
                settings.setEditable(false);
                settings.setBorder(BorderFactory.createEtchedBorder());
                modifyFFNDialog.add(settings, asdf);
                asdf.fill = GridBagConstraints.HORIZONTAL;
                asdf.gridwidth = 5;
                asdf.gridheight = 1;
                asdf.gridx = 0;
                asdf.gridy = 16;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.gridwidth = 2;
                asdf.gridx = 7;
                asdf.gridy = 0;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 1;
                learningRateL = new JLabel("Set Learning Rate:");
                modifyFFNDialog.add(learningRateL, asdf);
                asdf.gridx = 7;
                asdf.gridy = 2;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                learningRateTF = new JFormattedTextField(new NumberFormatter(NumberFormat.getNumberInstance()));
                learningRateTF.setText("");
                modifyFFNDialog.add(learningRateTF, asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 3;
                momentumL = new JLabel("Set Momentum:");
                modifyFFNDialog.add(momentumL, asdf);
                asdf.gridx = 7;
                asdf.gridy = 4;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                momentumTF = new JFormattedTextField(new NumberFormatter(NumberFormat.getNumberInstance()));
                momentumTF.setText("");
                modifyFFNDialog.add(momentumTF, asdf);
                asdf.gridx = 7;
                asdf.gridy = 5;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                /*asdf.gridwidth = 2;
                asdf.gridheight = 1;
                asdf.gridx = 7;
                asdf.gridy = 6;
                setNoise = new JLabel("Use Noise: ");
                modifyFFNDialog.add(setNoise, asdf);
                asdf.gridx = 7;
                asdf.gridy = 7;
                asdf.gridwidth = 1;
                noiseOn = new JRadioButton("yes");
                noiseOff = new JRadioButton("no");
                noiseGroup = new ButtonGroup();
                noiseGroup.add(noiseOn);
                noiseGroup.add(noiseOff);
                modifyFFNDialog.add(noiseOn,asdf);
                asdf.gridx = 8;
                asdf.gridy = 7;
                modifyFFNDialog.add(noiseOff,asdf);
                asdf.gridx = 7;
                asdf.gridy = 8;
                asdf.gridwidth = 2;
                setNoiseRange = new JButton("Set Noise Range");
                modifyFFNDialog.add(setNoiseRange,asdf);
                asdf.gridx = 7;
                asdf.gridy = 9;
                setNoiseTiming = new JButton("Set Noise Timing");
                modifyFFNDialog.add(setNoiseTiming,asdf);*/
                asdf.gridx = 7;
                asdf.gridy = 10;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 11;
                setTrainingStyle = new JLabel("Set Training Style:");
                modifyFFNDialog.add(setTrainingStyle, asdf);
                asdf.gridx = 7;
                asdf.gridy = 12;
                asdf.gridwidth = 1;
                batchOn = new JRadioButton("batch");
                onlineOn = new JRadioButton("online");
                batchGroup = new ButtonGroup();
                batchGroup.add(batchOn);
                batchGroup.add(onlineOn);
                modifyFFNDialog.add(batchOn, asdf);
                asdf.gridx = 8;
                modifyFFNDialog.add(onlineOn, asdf);
                asdf.gridx = 7;
                asdf.gridy = 13;
                asdf.gridwidth = 2;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 14;
                modifyBiases = new JButton("Modify Biases");
                modifyFFNDialog.add(modifyBiases, asdf);
                asdf.gridx = 7;
                asdf.gridy = 15;
                trainingCompletionButton = new JButton("Modify End Condition");
                modifyFFNDialog.add(trainingCompletionButton, asdf);
                asdf.fill = GridBagConstraints.HORIZONTAL;
                asdf.gridy = 16;
                modifyFFNDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridwidth = 1;
                asdf.gridx = 3;
                asdf.gridy = 17;
                asdf.anchor = GridBagConstraints.PAGE_END;
                modifyFFN = new JButton("OK");
                modifyFFNDialog.add(modifyFFN, asdf);
                asdf.gridx = 7;
                cancelModifyFFN = new JButton("Cancel");
                modifyFFNDialog.add(cancelModifyFFN, asdf);
                settings.setText("");
                settings.append(
                        "\n\n\n\nLearning Rate: " + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                settings.append("\n\nMomentum: " + net.get(resultsPane.getSelectedIndex()).getMomentum());
                settings.append("\n\nTraining Style: ");
                if (net.get(resultsPane.getSelectedIndex()).getBatchvOnline()) {
                    settings.append("batch");
                    batchOn.setSelected(true);
                } else {
                    settings.append("online");
                    onlineOn.setSelected(true);
                }
                settings.append("\n\nTraining End Condition: ");
                if (net.get(resultsPane.getSelectedIndex()).getUseIteration()) {
                    settings.append("Iterative");
                    settings.append(
                            "\n\nIterations: " + net.get(resultsPane.getSelectedIndex()).getIterations());
                } else {
                    settings.append("Ideal Error");
                    settings.append(
                            "\n\nIdeal Error: " + net.get(resultsPane.getSelectedIndex()).getIdealError());
                }

                //expiremental feature, needs work on the back end to be properly implemented   
                modifyBiases.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        JButton addBiases, removeBiases;

                        biasesDialog = new JDialog(modifyFFNDialog, "Set Biases");
                        biasesDialog.setSize(200, 46);
                        biasesDialog.setLayout(new GridLayout(2, 1));
                        addBiases = new JButton("Add Bias");
                        removeBiases = new JButton("Remove Bias");

                        biasesDialog.add(addBiases);
                        biasesDialog.add(removeBiases);

                        addBiases.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent ae) {
                                JLabel howManyBiasLayersLabel, whatBiasNodeLabel, whatBiasValueLabel;
                                final JFormattedTextField howManyBiasLayers, whatBiasNode, whatBiasValue;
                                JButton addBiasOK, addBiasCancel;
                                biasesDialog.setVisible(false);
                                addBiasDialog = new JDialog(modifyFFNDialog, "Add Bias");
                                addBiasDialog.setSize(756, 90);
                                addBiasDialog.setLayout(new GridLayout(4, 2));
                                howManyBiasLayersLabel = new JLabel("What Layer will get the Bias?");
                                howManyBiasLayers = new JFormattedTextField(
                                        new NumberFormatter(NumberFormat.getIntegerInstance()));
                                whatBiasNodeLabel = new JLabel("Which Node will get the Bias?");
                                whatBiasNode = new JFormattedTextField(
                                        new NumberFormatter(NumberFormat.getIntegerInstance()));
                                whatBiasValueLabel = new JLabel("What Value will the Bias have?");
                                whatBiasValue = new JFormattedTextField(
                                        new NumberFormatter(NumberFormat.getInstance()));
                                addBiasOK = new JButton("OK");
                                addBiasCancel = new JButton("Cancel");
                                addBiasDialog.add(howManyBiasLayersLabel);
                                addBiasDialog.add(howManyBiasLayers);
                                addBiasDialog.add(whatBiasNodeLabel);
                                addBiasDialog.add(whatBiasNode);
                                addBiasDialog.add(whatBiasValueLabel);
                                addBiasDialog.add(whatBiasValue);
                                addBiasDialog.add(addBiasOK);
                                addBiasDialog.add(addBiasCancel);

                                addBiasOK.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent ae) {
                                        if (!howManyBiasLayers.getText().equals("")
                                                && !whatBiasNode.getText().equals("")
                                                && !whatBiasValue.getText().equals("")) {
                                            addBiasDialog.setVisible(false);
                                            if (net.get(resultsPane.getSelectedIndex()).addBias(
                                                    Integer.parseInt(howManyBiasLayers.getText()) - 1,
                                                    Integer.parseInt(whatBiasNode.getText()) - 1,
                                                    Double.parseDouble(whatBiasValue.getText()))) {
                                            } else {
                                                JOptionPane.showMessageDialog(modifyFFNDialog,
                                                        "Existential Error", "Invalid Node for Bias",
                                                        JOptionPane.ERROR_MESSAGE);
                                            }
                                        } else {
                                            JOptionPane.showMessageDialog(modifyFFNDialog, "Form Error",
                                                    "Form not completed", JOptionPane.ERROR_MESSAGE);
                                        }
                                    }
                                });
                                addBiasCancel.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent ae) {
                                        addBiasDialog.setVisible(false);
                                    }
                                });

                                addBiasDialog.setVisible(true);
                            }
                        });

                        removeBiases.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent ae) {
                                JLabel howManyBiasLayersLabel, whatBiasNodeLabel;
                                final JFormattedTextField howManyBiasLayers, whatBiasNode;
                                JButton addBiasOK, addBiasCancel;
                                biasesDialog.setVisible(false);
                                removeBiasDialog = new JDialog(modifyFFNDialog, "Remove Bias");
                                removeBiasDialog.setSize(756, 90);
                                removeBiasDialog.setLayout(new GridLayout(3, 2));
                                howManyBiasLayersLabel = new JLabel("What Layer will lose the Bias?");
                                howManyBiasLayers = new JFormattedTextField(
                                        new NumberFormatter(NumberFormat.getIntegerInstance()));
                                whatBiasNodeLabel = new JLabel("Which Node will get the Bias?");
                                whatBiasNode = new JFormattedTextField(
                                        new NumberFormatter(NumberFormat.getIntegerInstance()));
                                addBiasOK = new JButton("OK");
                                addBiasCancel = new JButton("Cancel");
                                removeBiasDialog.add(howManyBiasLayersLabel);
                                removeBiasDialog.add(howManyBiasLayers);
                                removeBiasDialog.add(whatBiasNodeLabel);
                                removeBiasDialog.add(whatBiasNode);
                                removeBiasDialog.add(addBiasOK);
                                removeBiasDialog.add(addBiasCancel);

                                addBiasOK.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent ae) {
                                        if (!howManyBiasLayers.getText().equals("")
                                                && !whatBiasNode.getText().equals("")) {
                                            addBiasDialog.setVisible(false);
                                            if (net.get(resultsPane.getSelectedIndex()).removeBias(
                                                    Integer.parseInt(howManyBiasLayers.getText()) - 1,
                                                    Integer.parseInt(whatBiasNode.getText()) - 1)) {
                                            } else {
                                                JOptionPane.showMessageDialog(modifyFFNDialog,
                                                        "Existential Error", "Invalid Node for Bias",
                                                        JOptionPane.ERROR_MESSAGE);
                                            }
                                        } else {
                                            JOptionPane.showMessageDialog(modifyFFNDialog, "Form Error",
                                                    "Form not completed", JOptionPane.ERROR_MESSAGE);
                                        }
                                    }
                                });
                                addBiasCancel.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent ae) {
                                        addBiasDialog.setVisible(false);
                                    }
                                });

                                removeBiasDialog.setVisible(true);
                            }
                        });

                        biasesDialog.setVisible(true);

                    }
                });

                trainingCompletionButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        final JDialog iterationsDialog;
                        JLabel numberOfIterationsLabel;
                        final JFormattedTextField numberOfIterations;
                        JButton iterationsOK, iterationsCancel;
                        iterationsDialog = new JDialog(modifyFFNDialog, "Set Iterations");
                        iterationsDialog.setSize(765, 75);
                        iterationsDialog.setLayout(new GridLayout(2, 2));
                        numberOfIterationsLabel = new JLabel("How Many Iterations do you want to Train?");
                        numberOfIterations = new JFormattedTextField(
                                new NumberFormatter(NumberFormat.getIntegerInstance()));
                        iterationsOK = new JButton("OK");
                        iterationsCancel = new JButton("Cancel");
                        iterationsDialog.add(numberOfIterationsLabel);
                        iterationsDialog.add(numberOfIterations);
                        iterationsDialog.add(iterationsOK);
                        iterationsDialog.add(iterationsCancel);
                        iterationsOK.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent ae) {
                                if (!numberOfIterations.getText().equals("")) {
                                    iterationsDialog.setVisible(false);
                                    if (net.get(resultsPane.getSelectedIndex())
                                            .setIterations(Integer.parseInt(numberOfIterations.getText()))) {
                                        settings.setText("");
                                        settings.append("\n\n\n\nLearning Rate: "
                                                + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                                        settings.append("\n\nMomentum: "
                                                + net.get(resultsPane.getSelectedIndex()).getMomentum());
                                        settings.append("\n\nTraining Style: ");
                                        if (net.get(resultsPane.getSelectedIndex()).getBatchvOnline()) {
                                            settings.append("batch");
                                            batchOn.setSelected(true);
                                        } else {
                                            settings.append("online");
                                            onlineOn.setSelected(true);
                                        }
                                        settings.append("\n\nTraining End Condition: ");
                                        if (net.get(resultsPane.getSelectedIndex()).getUseIteration()) {
                                            settings.append("Iterative");
                                            settings.append("\n\nIterations: "
                                                    + net.get(resultsPane.getSelectedIndex()).getIterations());
                                        } else {
                                            settings.append("Ideal Error");
                                            settings.append("\n\nIdeal Error: "
                                                    + net.get(resultsPane.getSelectedIndex()).getIdealError());
                                        }
                                        modifyFFNDialog.setVisible(true);
                                    } else {
                                        JOptionPane.showMessageDialog(modifyFFNDialog,
                                                "Invalid Number of Iterations", "Math Error",
                                                JOptionPane.ERROR_MESSAGE);
                                    }
                                } else {
                                    JOptionPane.showMessageDialog(iterationsDialog, "Field not filled out",
                                            "Form Error", JOptionPane.ERROR_MESSAGE);
                                }
                            }
                        });
                        iterationsCancel.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent ae) {
                                iterationsDialog.setVisible(false);
                            }
                        });
                        iterationsDialog.setVisible(true);
                    }
                });

                modifyFFN.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if (!learningRateTF.getText().equals("")) {
                            net.get(resultsPane.getSelectedIndex())
                                    .setLearningRate(Double.parseDouble(learningRateTF.getText()));
                            learningRateTF.setText("");
                        }
                        if (!momentumTF.getText().equals("")) {
                            net.get(resultsPane.getSelectedIndex())
                                    .setMomentum(Double.parseDouble(momentumTF.getText()));
                            momentumTF.setText("");
                        }
                        if (batchOn.isSelected()) {
                            net.get(resultsPane.getSelectedIndex()).setBatchvOnline(true);
                        } else {
                            net.get(resultsPane.getSelectedIndex()).setBatchvOnline(false);
                        }

                        modifyFFNDialog.setVisible(false);
                    }
                });

                learningRateTF.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if (learningRateTF.getText() != "") {
                            net.get(resultsPane.getSelectedIndex())
                                    .setLearningRate(Double.parseDouble(learningRateTF.getText()));
                        }
                        settings.setText("");
                        settings.append("\n\n\n\nLearning Rate: "
                                + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                        settings.append(
                                "\n\nMomentum: " + net.get(resultsPane.getSelectedIndex()).getMomentum());
                        settings.append("\n\nTraining Style: ");

                        if (net.get(resultsPane.getSelectedIndex()).getBatchvOnline()) {
                            settings.append("batch");
                            batchOn.setSelected(true);
                        } else {
                            settings.append("online");
                            onlineOn.setSelected(true);
                        }
                        settings.append("\n\nTraining End Condition: ");
                        if (net.get(resultsPane.getSelectedIndex()).getUseIteration()) {
                            settings.append("Iterative");
                            settings.append("\n\nIterations: "
                                    + net.get(resultsPane.getSelectedIndex()).getIterations());
                        } else {
                            settings.append("Ideal Error");
                            settings.append("\n\nIdeal Error: "
                                    + net.get(resultsPane.getSelectedIndex()).getIdealError());
                        }
                        modifyFFNDialog.setVisible(true);
                    }
                });
                momentumTF.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if (momentumTF.getText() != "") {
                            net.get(resultsPane.getSelectedIndex())
                                    .setMomentum(Double.parseDouble(momentumTF.getText()));
                        }
                        settings.setText("");
                        settings.append("\n\n\n\nLearning Rate: "
                                + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                        settings.append(
                                "\n\nMomentum: " + net.get(resultsPane.getSelectedIndex()).getMomentum());
                        settings.append("\n\nTraining Style: ");
                        if (net.get(resultsPane.getSelectedIndex()).getBatchvOnline()) {
                            settings.append("batch");
                            batchOn.setSelected(true);
                        } else {
                            settings.append("online");
                            onlineOn.setSelected(true);
                        }
                        settings.append("\n\nTraining End Condition: ");
                        if (net.get(resultsPane.getSelectedIndex()).getUseIteration()) {
                            settings.append("Iterative");
                            settings.append("\n\nIterations: "
                                    + net.get(resultsPane.getSelectedIndex()).getIterations());
                        } else {
                            settings.append("Ideal Error");
                            settings.append("\n\nIdeal Error: "
                                    + net.get(resultsPane.getSelectedIndex()).getIdealError());
                        }
                        modifyFFNDialog.setVisible(true);
                    }
                });
                cancelModifyFFN.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        modifyFFNDialog.setVisible(false);
                    }
                });
                modifyFFNDialog.setVisible(true);
            }
            if (resultsPane.getTabCount() != 0
                    && netKind.get(resultsPane.getSelectedIndex()).toString().equals("Self-Organizing Map")) {
                modifySOMDialog = new JDialog(mainWindow, "Network Settings", true);
                modifySOMDialog.setSize(500, 400);
                modifySOMDialog.setLayout(new GridBagLayout());
                GridBagConstraints asdf = new GridBagConstraints();
                asdf.gridwidth = 5;
                asdf.gridheight = 1;
                asdf.gridx = 0;
                asdf.gridy = 0;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                modifySOMDialog.add(new JSeparator(), asdf);
                asdf.gridwidth = 5;
                asdf.gridheight = 15;
                asdf.weightx = 1.0;
                asdf.weighty = 1.0;
                asdf.gridx = 0;
                asdf.gridy = 1;
                asdf.fill = GridBagConstraints.BOTH;
                settings = new JTextArea();
                settings.setEditable(false);
                settings.setBorder(BorderFactory.createEtchedBorder());
                modifySOMDialog.add(settings, asdf);
                asdf.fill = GridBagConstraints.HORIZONTAL;
                asdf.gridwidth = 5;
                asdf.gridheight = 1;
                asdf.gridx = 0;
                asdf.gridy = 16;
                modifySOMDialog.add(new JSeparator(), asdf);
                asdf.gridwidth = 2;
                asdf.gridx = 7;
                asdf.gridy = 0;
                modifySOMDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 1;
                mIterationL = new JLabel("Set Number of Iterations:");
                modifySOMDialog.add(mIterationL, asdf);
                asdf.gridx = 7;
                asdf.gridy = 2;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                mIterationTF = new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance()));
                mIterationTF.setText("");
                modifySOMDialog.add(mIterationTF, asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 3;
                mLRL = new JLabel("Set Learning Rate (0-1):");
                modifySOMDialog.add(mLRL, asdf);
                asdf.gridx = 7;
                asdf.gridy = 4;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                mLRTF = new JFormattedTextField(new NumberFormatter(NumberFormat.getNumberInstance()));
                mLRTF.setText("");
                modifySOMDialog.add(mLRTF, asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 5;
                mMaxL = new JLabel("Set Data Maximum:");
                modifySOMDialog.add(mMaxL, asdf);
                asdf.gridx = 7;
                asdf.gridy = 6;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                mMaxTF = new JFormattedTextField(new NumberFormatter(NumberFormat.getNumberInstance()));
                mMaxTF.setText("");
                modifySOMDialog.add(mMaxTF, asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridx = 7;
                asdf.gridy = 7;
                mMinL = new JLabel("Set Data Minimum:");
                modifySOMDialog.add(mMinL, asdf);
                asdf.gridx = 7;
                asdf.gridy = 8;
                asdf.fill = GridBagConstraints.HORIZONTAL;
                mMinTF = new JFormattedTextField(new NumberFormatter(NumberFormat.getNumberInstance()));
                mMinTF.setText("");
                modifySOMDialog.add(mMinTF, asdf);
                asdf.fill = GridBagConstraints.HORIZONTAL;
                asdf.gridy = 16;
                modifySOMDialog.add(new JSeparator(), asdf);
                asdf.fill = GridBagConstraints.NONE;
                asdf.gridwidth = 1;
                asdf.gridx = 3;
                asdf.gridy = 17;
                asdf.anchor = GridBagConstraints.PAGE_END;
                modifySOM = new JButton("OK");
                modifySOMDialog.add(modifySOM, asdf);
                asdf.gridx = 7;
                cancelModifySOM = new JButton("Cancel");
                modifySOMDialog.add(cancelModifySOM, asdf);
                settings.setText("");
                settings.append("\n\nNumber of Iterations: "
                        + net.get(resultsPane.getSelectedIndex()).getNumIterations());
                settings.append(
                        "\n\nLearning Rate: " + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                settings.append("\n\nData Maximum: " + net.get(resultsPane.getSelectedIndex()).getDataMax());
                settings.append("\n\nData Minimum: " + net.get(resultsPane.getSelectedIndex()).getDataMin());

                mIterationTF.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if (mIterationTF.getText() != "") {
                            net.get(resultsPane.getSelectedIndex())
                                    .setNumIterations(Integer.parseInt(mIterationTF.getText()));

                            settings.setText("");
                            settings.append("\n\nNumber of Iterations: "
                                    + net.get(resultsPane.getSelectedIndex()).getNumIterations());
                            settings.append("\n\nLearning Rate: "
                                    + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                            settings.append("\n\nData Maximum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMax());
                            settings.append("\n\nData Minimum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMin());
                        }
                    }
                });

                mLRTF.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if ((mLRTF.getText() != "") && ((Double.parseDouble(mLRTF.getText())) <= 1.0)) {
                            net.get(resultsPane.getSelectedIndex())
                                    .setLearningRate(Double.parseDouble(mLRTF.getText()));

                            settings.setText("");
                            settings.append("\n\nNumber of Iterations: "
                                    + net.get(resultsPane.getSelectedIndex()).getNumIterations());
                            settings.append("\n\nLearning Rate: "
                                    + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                            settings.append("\n\nData Maximum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMax());
                            settings.append("\n\nData Minimum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMin());
                        } else {
                            JOptionPane.showMessageDialog(mLRTF, "Pick a number from 0 - 1", "Incorrect Value",
                                    JOptionPane.ERROR_MESSAGE);
                            mLRTF.setText("");
                        }
                    }
                });

                mMaxTF.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if ((mMaxTF.getText() != "") && (((Double.parseDouble(mMaxTF.getText())) > net
                                .get(resultsPane.getSelectedIndex()).getDataMin()))) {
                            net.get(resultsPane.getSelectedIndex())
                                    .setDataMax(Double.parseDouble(mMaxTF.getText()));

                            settings.setText("");
                            settings.append("\n\nNumber of Iterations: "
                                    + net.get(resultsPane.getSelectedIndex()).getNumIterations());
                            settings.append("\n\nLearning Rate: "
                                    + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                            settings.append("\n\nData Maximum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMax());
                            settings.append("\n\nData Minimum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMin());
                        } else {
                            JOptionPane.showMessageDialog(mMaxTF, "Max value must be greater than Min value",
                                    "Incorrect Value", JOptionPane.ERROR_MESSAGE);
                            mMaxTF.setText("");
                        }
                    }
                });

                mMinTF.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if ((mMinTF.getText() != "") && ((Double.parseDouble(mMinTF.getText())) < net
                                .get(resultsPane.getSelectedIndex()).getDataMax())) {
                            net.get(resultsPane.getSelectedIndex())
                                    .setDataMin(Double.parseDouble(mMinTF.getText()));

                            settings.setText("");
                            settings.append("\n\nNumber of Iterations: "
                                    + net.get(resultsPane.getSelectedIndex()).getNumIterations());
                            settings.append("\n\nLearning Rate: "
                                    + net.get(resultsPane.getSelectedIndex()).getLearningRate());
                            settings.append("\n\nData Maximum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMax());
                            settings.append("\n\nData Minimum: "
                                    + net.get(resultsPane.getSelectedIndex()).getDataMin());
                        } else {
                            JOptionPane.showMessageDialog(mMinTF, "Min value must be less than Max value",
                                    "Incorrect Value", JOptionPane.ERROR_MESSAGE);
                            mMinTF.setText("");
                        }
                    }
                });

                modifySOM.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        boolean error = false;
                        if (!("".equals(mIterationTF.getText()))) {
                            net.get(resultsPane.getSelectedIndex())
                                    .setNumIterations(Integer.parseInt(mIterationTF.getText()));
                        }
                        if (!("".equals(mLRTF.getText()))) {
                            if ((Double.parseDouble(mLRTF.getText())) > 1.0) {
                                error = true;
                                mLRTF.setText("");
                            } else
                                net.get(resultsPane.getSelectedIndex())
                                        .setLearningRate(Double.parseDouble(mLRTF.getText()));
                        }
                        if (!("".equals(mMaxTF.getText()))) {
                            if (((Double.parseDouble(mMaxTF.getText())) < net
                                    .get(resultsPane.getSelectedIndex()).getDataMin())) {
                                error = true;
                                mMaxTF.setText("");
                            } else
                                net.get(resultsPane.getSelectedIndex())
                                        .setDataMax(Double.parseDouble(mMaxTF.getText()));
                        }
                        if (!("".equals(mMinTF.getText()))) {
                            if ((Double.parseDouble(mMinTF.getText())) > net.get(resultsPane.getSelectedIndex())
                                    .getDataMax()) {
                                error = true;
                                mMinTF.setText("");
                            } else
                                net.get(resultsPane.getSelectedIndex())
                                        .setDataMin(Double.parseDouble(mMinTF.getText()));
                        }

                        if (error == true) {
                            JOptionPane.showMessageDialog(modifySOMDialog,
                                    "One or more fields have incorrect values", "Incorrect Value",
                                    JOptionPane.ERROR_MESSAGE);
                        } else {
                            modifySOMDialog.setVisible(false);
                            readOut.get(resultsPane.getSelectedIndex()).append("\nUpdated Map:\n");
                            printInitMap();
                        }

                    }
                });

                cancelModifySOM.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        modifySOMDialog.setVisible(false);
                    }
                });

                modifySOMDialog.setVisible(true);
            }
        }

    });

    modify.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : changeConfig.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //The following code is for the newNet button under file:

    //create a dialog to be activated when "New Network" is pressed in the file menu
    newDialog = new JDialog(mainWindow, "New Network", true);
    newDialog.setSize(375, 100);
    newDialog.setLayout(new GridLayout(3, 2)); //going to change the layout to GridBagLayout for better customization

    name = new JLabel("Network Name:");
    newName = new JTextField(10);
    type = new JLabel("Type of Network:");
    netTypes = new String[] { "Feed Forward Network", "Self-Organizing Map" };
    netType = new JComboBox<String>(netTypes);
    netType.setSelectedItem("Feed Forward Network");
    createNewNet = new JButton("create");
    cancelNew = new JButton("cancel");
    newDialog.add(name);
    newDialog.add(newName);
    newDialog.add(type);
    newDialog.add(netType);
    newDialog.add(createNewNet);
    newDialog.add(cancelNew);

    //utilities for a second dialog(Feed Forward Network) in the process of creating a new network   
    number = new JLabel("Enter the number of layers you want for your network:");
    howManyLayers = new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance()));
    createFFNArchitecture = new JButton("OK");
    cancelFFN = new JButton("Cancel");

    howManyNodes = new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance()));
    createFFN = new JButton("OK");
    cancelNodes = new JButton("Cancel");

    //Written by Michael Scott
    somLattice = new JLabel("   Lattice number for your Map:");
    somLatticeField = new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance()));
    somLatticeField.setFocusLostBehavior(1);
    somMax = new JLabel("   Maximum value of your input (if known):");
    somMaxField = new JFormattedTextField(new NumberFormatter(NumberFormat.getInstance()));
    somMaxField.setFocusLostBehavior(1);
    somMin = new JLabel("   Minimum value of your input (if known):");
    somMinField = new JFormattedTextField(new NumberFormatter(NumberFormat.getInstance()));
    somMinField.setFocusLostBehavior(1);
    somDim = new JLabel("   Node Dimensions:");
    somDimField = new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance()));
    somDimField.setFocusLostBehavior(1);
    createSOM = new JButton("OK");
    cancelSOM = new JButton("Cancel");

    //displays the newDialog window when newNet is pressed
    newNet.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {

            newDialog.setVisible(true);
        }
    });

    newwer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            newDialog.setVisible(true);
        }
    });

    //makes hitting enter in the text box do the same thing as clicking "create"
    newName.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : createNewNet.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //when create net is pressed, this reads the selections from the newNet dialog and creates the approriate next dialog
    createNewNet.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            int test;
            test = 0;
            for (StringBuffer names : netName) {
                if (names.toString().equals(newName.getText()))
                    test = 1;
            }
            if (test == 0)
                if (!newName.getText().equals("")) {
                    if (netType.getSelectedIndex() == 0) { //if the net selected is Feed Forward, create and display the prompt for a feed forward network
                        newDialog.setVisible(false);
                        fFNDialog = new JDialog(mainWindow, newName.getText(), true);
                        fFNDialog.setSize(919, 65);
                        fFNDialog.setLayout(new GridLayout(2, 2));
                        fFNDialog.add(number);
                        fFNDialog.add(howManyLayers);
                        fFNDialog.add(createFFNArchitecture);
                        fFNDialog.add(cancelFFN);
                        fFNDialog.setVisible(true);
                    }
                    //Written by Michael Scott
                    if (netType.getSelectedIndex() == 1) {
                        newDialog.setVisible(false);
                        sOMDialog = new JDialog(mainWindow, newName.getText(), true);
                        sOMDialog.setSize(500, 180);
                        sOMDialog.setLayout(new GridLayout(5, 2));
                        sOMDialog.add(somLattice);
                        sOMDialog.add(somLatticeField);
                        sOMDialog.add(somDim);
                        sOMDialog.add(somDimField);
                        sOMDialog.add(somMax);
                        sOMDialog.add(somMaxField);
                        sOMDialog.add(somMin);
                        sOMDialog.add(somMinField);
                        sOMDialog.add(createSOM);
                        sOMDialog.add(cancelSOM);
                        sOMDialog.setVisible(true);

                    }
                } else
                    JOptionPane.showMessageDialog(createNewNet, "Network must have a Name",
                            "Namelessness Error", JOptionPane.ERROR_MESSAGE);
            else {
                JOptionPane.showMessageDialog(createNewNet, "Network " + newName.getText() + " already exists",
                        "Existential Naming Error", JOptionPane.ERROR_MESSAGE);
                newName.setText("");
            }
        }

    });
    //beginning of section about creating Feed Forward Networks   
    //cancel clears the name field and hides the newDialog dialog
    cancelNew.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            newDialog.setVisible(false);
            newName.setText("");
        }
    });

    //makes hitting enter the same as clicking "ok"
    howManyLayers.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : createFFNArchitecture.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //create a prompt for the first layer to determine how many nodes will go into the first layer
    createFFNArchitecture.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (!howManyLayers.getText().equals("")
                    && (layers = Integer.parseInt(howManyLayers.getText())) > 1) {
                nodeConfiguration = new int[layers]; //create an array to hold the node configuration that will be passed to the Net constructor
                layer = 1; //create a variable to hold the current layer the prompt series is on
                numberofNodes = new JLabel("How many nodes do you want in layer " + layer + "?");
                fFNDialog.setVisible(false);
                howManyNodesDialog = new JDialog(mainWindow, newName.getText(), true);
                howManyNodesDialog.setSize(919, 65);
                howManyNodesDialog.setLayout(new GridLayout(2, 2));
                howManyNodesDialog.add(numberofNodes);
                howManyNodesDialog.add(howManyNodes);
                howManyNodesDialog.add(createFFN);
                howManyNodesDialog.add(cancelNodes);
                howManyNodesDialog.setVisible(true);
            } else {
                //if the string is not valid, pop up an error message
                JOptionPane.showMessageDialog(fFNDialog,
                        "<html>Number Out of Bounds<br>Please Enter a Number Greater than 1</html>",
                        "Out of Bounds", JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    //runs each time ok is pressed, until all the layers have a vaule for the number of nodes in the layer
    createFFN.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (!howManyNodes.getText().equals("")
                    && (nodeConfiguration[layer - 1] = Integer.parseInt(howManyNodes.getText())) > 0) {
                if (layer == layers) {
                    try {
                        //adds a close button to the top corner of each tab
                        title.add(new JLabel(newName.getText() + " "));
                        close.add(new JButton("X"));
                        close.get(openNets).setActionCommand(newName.getText());
                        close.get(openNets).setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
                        close.get(openNets).setMargin(new Insets(0, 0, 0, 0));
                        tabPanel.add(new JPanel(new GridBagLayout()));
                        tabPanel.get(openNets).setOpaque(false);
                        GridBagConstraints grid = new GridBagConstraints();
                        grid.fill = GridBagConstraints.HORIZONTAL;
                        grid.gridx = 0;
                        grid.gridy = 0;
                        grid.weightx = 1;
                        tabPanel.get(openNets).add(title.get(openNets), grid);
                        grid.gridx = 1;
                        grid.gridy = 0;
                        grid.weightx = 0;
                        tabPanel.get(openNets).add(close.get(openNets), grid);

                        //adds a loading bar
                        loadingBar.add(new JLabel("", loadingImage, SwingConstants.CENTER));
                        loadingBar.get(openNets).setHorizontalTextPosition(SwingConstants.LEFT);
                        loadingBar.get(openNets).setVisible(false);
                        //creates and sets the network configuration
                        net.add(new FullyConnectedFeedForwardNet(nodeConfiguration));

                        netKind.add(new StringBuffer(netType.getSelectedItem().toString()));
                        netName.add(new StringBuffer(newName.getText()));
                        oneNet.add(new JPanel());
                        oneNet.get(openNets).setLayout(new GridBagLayout());
                        GridBagConstraints constraints = new GridBagConstraints();
                        constraints.fill = GridBagConstraints.BOTH;

                        //creates the readOut space and formats it so that the scroll pane/text changes size with the window, reserves space for the loading bar
                        readOut.add(new JTextArea(""));
                        readOutLocale.add(new JScrollPane(readOut.get(openNets)));
                        readOut.get(openNets).setEditable(false);
                        constraints.gridx = 0;
                        constraints.gridy = 0;
                        constraints.weighty = 1.0;
                        constraints.weightx = 1.0;
                        constraints.gridwidth = 2;
                        constraints.ipady = 90;
                        oneNet.get(openNets).add(readOutLocale.get(openNets), constraints);
                        constraints.fill = GridBagConstraints.HORIZONTAL;
                        constraints.gridx = 0;
                        constraints.gridy = 1;
                        constraints.ipady = 0;
                        constraints.gridwidth = 2;
                        constraints.anchor = GridBagConstraints.PAGE_END;

                        //add everythign to the tabbed pane
                        oneNet.get(openNets).add(loadingBar.get(openNets), constraints);
                        resultsPane.addTab(netName.get(openNets).toString(), oneNet.get(openNets));
                        resultsPane.setTabComponentAt(openNets, tabPanel.get(openNets));

                        path.add("");

                        //display the starting configuration of the network
                        readOut.get(openNets).append("Network: " + netName.get(openNets) + "\n\n");
                        resultsPane.setSelectedIndex(openNets++);
                        printConnections();

                        //erases all the text in the setup fields and closes the window
                        howManyNodes.setValue(null);
                        howManyLayers.setText("");
                        newName.setText("");
                        howManyNodesDialog.setVisible(false);

                        //unfortunately difficult way that I made to add the close button functionality to close a tab
                        //it works, but there has to be a better way to do this
                        close.get(resultsPane.getSelectedIndex()).addActionListener(new ActionListener() {
                            public void actionPerformed(final ActionEvent ae) {
                                int result;
                                result = 0;
                                for (StringBuffer names : netName) {
                                    if (ae.getActionCommand().equals(names.toString())) {
                                        result = JOptionPane.showConfirmDialog(createFFN,
                                                "<html>Exiting Without Saving can Cause you to Lose your Progress<br>Are you sure you want to Continue?</html>",
                                                "Close Network", JOptionPane.OK_CANCEL_OPTION);
                                        resultsPane.setSelectedIndex(netName.indexOf(names));
                                    }
                                }
                                if (result == JOptionPane.OK_OPTION) {
                                    net.remove(resultsPane.getSelectedIndex());
                                    oneNet.remove(resultsPane.getSelectedIndex());
                                    readOutLocale.remove(resultsPane.getSelectedIndex());
                                    readOut.remove(resultsPane.getSelectedIndex());
                                    loadingBar.remove(resultsPane.getSelectedIndex());
                                    tabPanel.remove(resultsPane.getSelectedIndex());
                                    title.remove(resultsPane.getSelectedIndex());
                                    close.remove(resultsPane.getSelectedIndex());
                                    netName.remove(resultsPane.getSelectedIndex());
                                    resultsPane.remove(resultsPane.getSelectedIndex());
                                    openNets--;
                                }
                            }
                        });
                    } catch (OutOfMemoryError e) {
                        JOptionPane.showMessageDialog(mainWindow,
                                "<html>Net too Large for Memory.<br>Try Closing some of the Nets.</html>",
                                "Memory Error", JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    layer++;
                    howManyNodes.setText("");
                    numberofNodes.setText("How many nodes do you want in layer " + layer + "?");
                }

            } else {
                JOptionPane.showMessageDialog(createFFN,
                        "<html>Number Out of Bounds<br>Please Enter a Number Greater than 0", "Out of Bounds",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    //makes hitting enter in text box the same as clicking ok
    howManyNodes.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            for (ActionListener a : createFFN.getActionListeners()) {
                a.actionPerformed(ae);
            }
        }
    });

    //cancels the node prompt
    cancelNodes.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            newName.setText("");
            howManyLayers.setText("");
            howManyNodes.setText("");
            howManyNodesDialog.setVisible(false);
        }
    });

    //cancel clears both name fields so far filled in the series of dialogs and hides the dialog
    cancelFFN.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            newName.setText("");
            howManyLayers.setText("");
            fFNDialog.setVisible(false);
        }
    });
    //end of section about creating FFNs
    //end of section about newNet   

    //Method to create a SOM
    createSOM.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (somLatticeField.getText().equals("") || somDimField.getText().equals("")) {
                JOptionPane.showMessageDialog(createSOM, "<html>Empty Field<br>Please Fill All Fields",
                        "Empty Field", JOptionPane.ERROR_MESSAGE);
            } else {
                if (somMaxField.getText().equals(""))
                    somMaxField.setText("100");
                if (somMinField.getText().equals(""))
                    somMinField.setText("0");
                if (Double.parseDouble(somMaxField.getText().replace(",", "")) < Double
                        .parseDouble(somMinField.getText().replace(",", ""))) {
                    JOptionPane.showMessageDialog(createSOM, "MIN GREATER THAN MAX!!!!", "Stupidity Error",
                            JOptionPane.ERROR_MESSAGE);
                }

                try {
                    //adds a close button to the top corner of each tab
                    title.add(new JLabel(newName.getText() + " "));
                    close.add(new JButton("X"));
                    close.get(openNets).setActionCommand(newName.getText());
                    close.get(openNets).setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
                    close.get(openNets).setMargin(new Insets(0, 0, 0, 0));
                    tabPanel.add(new JPanel(new GridBagLayout()));
                    tabPanel.get(openNets).setOpaque(false);
                    GridBagConstraints grid = new GridBagConstraints();
                    grid.fill = GridBagConstraints.HORIZONTAL;
                    grid.gridx = 0;
                    grid.gridy = 0;
                    grid.weightx = 1;
                    tabPanel.get(openNets).add(title.get(openNets), grid);
                    grid.gridx = 1;
                    grid.gridy = 0;
                    grid.weightx = 0;
                    tabPanel.get(openNets).add(close.get(openNets), grid);

                    //adds a loading bar
                    loadingBar.add(new JLabel("", loadingImage, SwingConstants.CENTER));
                    loadingBar.get(openNets).setHorizontalTextPosition(SwingConstants.LEFT);
                    loadingBar.get(openNets).setVisible(false);
                    //creates and sets the network configuration
                    net.add(new SelfOrganizingMap());

                    netKind.add(new StringBuffer(netType.getSelectedItem().toString()));
                    netName.add(new StringBuffer(newName.getText()));
                    oneNet.add(new JPanel());
                    oneNet.get(openNets).setLayout(new GridBagLayout());
                    GridBagConstraints constraints = new GridBagConstraints();
                    constraints.fill = GridBagConstraints.BOTH;

                    //creates the readOut space and formats it so that the scroll pane/text changes size with the window, reserves space for the loading bar
                    readOut.add(new JTextArea(""));
                    readOutLocale.add(new JScrollPane(readOut.get(openNets)));
                    readOut.get(openNets).setEditable(false);
                    constraints.gridx = 0;
                    constraints.gridy = 0;
                    constraints.weighty = 1.0;
                    constraints.weightx = 1.0;
                    constraints.gridwidth = 2;
                    constraints.ipady = 90;
                    oneNet.get(openNets).add(readOutLocale.get(openNets), constraints);
                    constraints.fill = GridBagConstraints.HORIZONTAL;
                    constraints.gridx = 0;
                    constraints.gridy = 1;
                    constraints.ipady = 0;
                    constraints.gridwidth = 2;
                    constraints.anchor = GridBagConstraints.PAGE_END;

                    //add everythign to the tabbed pane
                    oneNet.get(openNets).add(loadingBar.get(openNets), constraints);
                    resultsPane.addTab(netName.get(openNets).toString(), oneNet.get(openNets));
                    resultsPane.setTabComponentAt(openNets, tabPanel.get(openNets));

                    path.add("");

                    //display the starting configuration of the network
                    readOut.get(openNets).append("Network: " + netName.get(openNets) + "\n\n");
                    resultsPane.setSelectedIndex(openNets++);
                    try {
                        net.get(resultsPane.getSelectedIndex())
                                .setLatticeValue(Integer.parseInt(somLatticeField.getText().replace(",", "")));
                        net.get(resultsPane.getSelectedIndex())
                                .setDataMax(Double.parseDouble(somMaxField.getText().replace(",", "")));
                        net.get(resultsPane.getSelectedIndex())
                                .setDataMin(Double.parseDouble(somMinField.getText().replace(",", "")));
                        net.get(resultsPane.getSelectedIndex())
                                .setInputDimensions(Integer.parseInt(somDimField.getText().replace(",", "")));
                        net.get(resultsPane.getSelectedIndex()).runNet();
                        readOut.get(resultsPane.getSelectedIndex()).append("Initial Untrained Map:\n");
                        printInitMap();

                        if (!getColorMap.isVisible()) {
                            util.addSeparator();
                            util.add(getColorMap);
                            getColorMap.setVisible(true);
                        }

                        //erases all the text in the setup fields and closes the window
                        newName.setText("");
                        somLatticeField.setText("");
                        somDimField.setText("");
                        somMaxField.setText("");
                        somMinField.setText("");
                        sOMDialog.setVisible(false);

                        //unfortunately difficult way that I made to add the close button functionality to close a tab
                        //it works, but there has to be a better way to do this
                        close.get(resultsPane.getSelectedIndex()).addActionListener(new ActionListener() {
                            public void actionPerformed(final ActionEvent ae) {
                                int result;
                                result = 0;
                                for (StringBuffer names : netName) {
                                    if (ae.getActionCommand().equals(names.toString())) {
                                        result = JOptionPane.showConfirmDialog(createSOM,
                                                "<html>Exiting Without Saving can Cause you to Lose your Progress<br>Are you sure you want to Continue?</html>",
                                                "Close Network", JOptionPane.OK_CANCEL_OPTION);
                                        resultsPane.setSelectedIndex(netName.indexOf(names));
                                    }
                                }
                                if (result == JOptionPane.OK_OPTION) {
                                    net.remove(resultsPane.getSelectedIndex());
                                    oneNet.remove(resultsPane.getSelectedIndex());
                                    readOutLocale.remove(resultsPane.getSelectedIndex());
                                    readOut.remove(resultsPane.getSelectedIndex());
                                    loadingBar.remove(resultsPane.getSelectedIndex());
                                    tabPanel.remove(resultsPane.getSelectedIndex());
                                    title.remove(resultsPane.getSelectedIndex());
                                    close.remove(resultsPane.getSelectedIndex());
                                    netName.remove(resultsPane.getSelectedIndex());
                                    resultsPane.remove(resultsPane.getSelectedIndex());
                                    openNets--;
                                }
                            }
                        });
                    } catch (Exception e) {
                        net.remove(resultsPane.getSelectedIndex());
                        oneNet.remove(resultsPane.getSelectedIndex());
                        readOutLocale.remove(resultsPane.getSelectedIndex());
                        readOut.remove(resultsPane.getSelectedIndex());
                        loadingBar.remove(resultsPane.getSelectedIndex());
                        tabPanel.remove(resultsPane.getSelectedIndex());
                        title.remove(resultsPane.getSelectedIndex());
                        close.remove(resultsPane.getSelectedIndex());
                        netName.remove(resultsPane.getSelectedIndex());
                        resultsPane.remove(resultsPane.getSelectedIndex());
                        openNets--;
                        JOptionPane.showMessageDialog(sOMDialog, "Numbers too large to parse", "Parse error",
                                JOptionPane.ERROR_MESSAGE);
                    }
                } catch (OutOfMemoryError e) {
                    JOptionPane.showMessageDialog(mainWindow,
                            "<html>Net too Large for Memory.<br>Try Closing some of the Nets.</html>",
                            "Memory Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });

    cancelSOM.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            newName.setText("");
            somLatticeField.setText("");
            somMaxField.setText("");
            somMinField.setText("");
            sOMDialog.setVisible(false);
        }
    });

    //end of SOM creation
    mainWindow.setVisible(true);
}

From source file:org.aaloa.zb4osgi.network.browser.ui.NetworkGraph.java

private JPanel getStatusBar() {
    if (statusBar != null) {
        return statusBar;
    }//  w ww.  j  a  v  a  2 s  .c om
    statusBar = new JPanel();
    statusBar.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    statusBar.setLayout(new GridBagLayout());
    statusBar.setPreferredSize(new Dimension(800, 16));
    Dimension dimension = new Dimension(1280, 16);
    GridBagConstraints opt = new GridBagConstraints();
    opt.fill = GridBagConstraints.HORIZONTAL;
    opt.gridy = 0;
    opt.ipady = 1;
    opt.ipadx = 3;

    opt.gridx = 0;
    statusLeft = new JLabel("");
    statusLeft.setPreferredSize(dimension);
    statusLeft.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    statusBar.add(statusLeft, opt);

    opt.gridx = 1;
    statusLeft.setPreferredSize(dimension);
    statusMiddle = new JLabel("Picking Mode");
    statusMiddle.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    statusBar.add(statusMiddle, opt);

    opt.gridx = 2;
    statusLeft.setPreferredSize(dimension);
    statusRight = new JLabel("");
    statusRight.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    statusBar.add(statusRight, opt);
    return statusBar;
}

From source file:org.bigwiv.blastgraph.gui.BlastGraphFrame.java

private void initComponents() {

    URL icon;//  www .  j  av a2  s. co m
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/icon.png");
    this.setIconImage(Toolkit.getDefaultToolkit().createImage(icon));
    JComponent pane;
    pane = (JComponent) getContentPane();

    // ====================Menu Setting=======================
    newItem = new JMenuItem("New From Blast");
    newItem.setMnemonic('n');
    newItem.addActionListener(commandActionListener);

    openItem = new JMenuItem("Open");
    openItem.setMnemonic('o');
    openItem.addActionListener(commandActionListener);

    appendGraphItem = new JMenuItem("Append Graph");
    appendGraphItem.setMnemonic('a');
    appendGraphItem.addActionListener(commandActionListener);

    saveItem = new JMenuItem("Save");
    saveItem.setMnemonic('s');
    saveItem.addActionListener(commandActionListener);

    saveAsGraphItem = new JMenuItem("Save As");
    saveAsGraphItem.addActionListener(commandActionListener);

    exportGraphItem = new JMenuItem("Export");
    exportGraphItem.addActionListener(commandActionListener);

    saveCurGraphItem = new JMenuItem("Save Current Graph");
    saveCurGraphItem.addActionListener(commandActionListener);

    saveCurImgItem = new JMenuItem("Save Image");
    saveCurImgItem.addActionListener(commandActionListener);

    saveAllVertexAttrItem = new JMenuItem("Save Vertex Attribute");
    saveAllVertexAttrItem.addActionListener(commandActionListener);

    saveCurVertexAttrItem = new JMenuItem("Save Vertex Attribute");
    saveCurVertexAttrItem.addActionListener(commandActionListener);

    saveAsMenu = new JMenu("Save As");
    saveAsMenu.add(saveAsGraphItem);
    saveAsMenu.add(saveAllVertexAttrItem);

    saveCurGraphMenu = new JMenu("Save Current Graph");
    saveCurGraphMenu.add(saveCurGraphItem);
    saveCurGraphMenu.add(saveCurImgItem);
    saveCurGraphMenu.add(saveCurVertexAttrItem);

    printItem = new JMenuItem("Print...");
    printItem.setMnemonic('p');
    printItem.addActionListener(commandActionListener);

    importVertexAttrItem = new JMenuItem("Import Vertex Attribute");
    importVertexAttrItem.addActionListener(commandActionListener);

    closeItem = new JMenuItem("Close");
    closeItem.setMnemonic('c');
    closeItem.addActionListener(commandActionListener);

    exitItem = new JMenuItem("Exit");
    exitItem.setMnemonic('x');
    exitItem.addActionListener(commandActionListener);

    fileMenu = new JMenu("File");
    fileMenu.setMnemonic('f');
    fileMenu.add(newItem);
    fileMenu.add(openItem);
    fileMenu.add(appendGraphItem);
    fileMenu.add(new JSeparator());
    fileMenu.add(closeItem);
    fileMenu.add(new JSeparator());
    fileMenu.add(saveItem);
    fileMenu.add(saveAsMenu);
    fileMenu.add(saveCurGraphMenu);
    fileMenu.add(new JSeparator());
    fileMenu.add(printItem);
    fileMenu.add(new JSeparator());
    fileMenu.add(importVertexAttrItem);
    fileMenu.add(exportGraphItem);
    fileMenu.add(new JSeparator());
    fileMenu.add(exitItem);

    // edit menu
    undoItem = new JMenuItem("Undo");
    redoItem = new JMenuItem("Redo");
    Global.COMMAND_MANAGER.registerUndoRedoItem(undoItem, redoItem);
    removeSingleItem = new JMenuItem("Remove Single Vertices");
    removeSingleItem.addActionListener(commandActionListener);
    filterItem = new JMenuItem("Filt Graph");
    filterItem.addActionListener(commandActionListener);
    settingItem = new JMenuItem("Setting");
    settingItem.addActionListener(commandActionListener);

    markovClusterItem = new JMenuItem("Markov Cluster");
    markovClusterItem.addActionListener(commandActionListener);

    // genomeNumFiltItem = new JMenuItem("GenomeNum Filt");
    // genomeNumFiltItem.addActionListener(commandActionListener);

    // removeSingleLinkageItem = new JMenuItem("Remove Single Linkage");
    // removeSingleLinkageItem.addActionListener(commandActionListener);

    editMenu = new JMenu("Edit");
    editMenu.setMnemonic('e');
    editMenu.add(undoItem);
    editMenu.add(redoItem);
    editMenu.add(filterItem);
    editMenu.add(markovClusterItem);
    editMenu.add(removeSingleItem);
    // editMenu.add(genomeNumFiltItem);
    // editMenu.add(removeSingleLinkageItem);
    editMenu.add(settingItem);

    // Tools Item
    geneContentItem = new JMenuItem("Gene Content Table");
    geneContentItem.addActionListener(commandActionListener);

    batchSaveItem = new JMenuItem("Batch Save");
    batchSaveItem.addActionListener(commandActionListener);

    mstItem = new JMenuItem("Minimum Spanning Tree");
    mstItem.addActionListener(commandActionListener);

    viewNeighborItem = new JMenuItem("View Neighbor of...");
    viewNeighborItem.addActionListener(commandActionListener);

    //
    // tempWorkItem = new JMenuItem("Temp Work");
    // tempWorkItem.addActionListener(commandActionListener);

    toolsMenu = new JMenu("Tools");
    toolsMenu.setMnemonic('t');
    toolsMenu.add(geneContentItem);
    toolsMenu.add(viewNeighborItem);
    toolsMenu.add(mstItem);
    toolsMenu.add(batchSaveItem);
    // toolsMenu.add(tempWorkItem);

    // graph Menu
    graphMenu = new JMenu("Graph");
    previousItem = new JMenuItem("Previous");
    previousItem.addActionListener(commandActionListener);
    nextItem = new JMenuItem("Next");
    nextItem.addActionListener(commandActionListener);
    resortItem = new JMenuItem("Resort graphs");
    resortItem.addActionListener(commandActionListener);

    graphMenu.add(nextItem);
    graphMenu.add(previousItem);
    graphMenu.add(resortItem);

    // help Menu
    helpContentItem = new JMenuItem("Online Manual");
    helpContentItem.addActionListener(commandActionListener);
    aboutItem = new JMenuItem("About BlastGraph");
    aboutItem.addActionListener(commandActionListener);

    helpMenu = new JMenu("Help");
    helpMenu.add(helpContentItem);
    helpMenu.add(aboutItem);

    // menu bar
    menuBar = new JMenuBar();
    menuBar.add(fileMenu);
    menuBar.add(editMenu);
    menuBar.add(graphMenu);
    menuBar.add(toolsMenu);
    menuBar.add(helpMenu);

    setJMenuBar(menuBar);

    // ===================mainPanel Setting===================
    GridBagManager.reset();
    GridBagManager.GRID_BAG.fill = GridBagConstraints.BOTH;
    GridBagManager.GRID_BAG.anchor = GridBagConstraints.FIRST_LINE_START;
    GridBagManager.GRID_BAG.weightx = 0;
    GridBagManager.GRID_BAG.weighty = 0;
    GridBagManager.GRID_BAG.insets = new Insets(2, 2, 1, 1);

    mainPanel = new JPanel();
    mainPanel.setLayout(new BorderLayout());
    pane.add(mainPanel);

    hsplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    hsplitPane.setContinuousLayout(true);
    hsplitPane.setOneTouchExpandable(true);
    hsplitPane.setResizeWeight(0.9);

    // ===================toolBarPanel Setting===================

    // graph file toolbar
    fileToolBar = new JToolBar();
    fileToolBar.setRollover(true);
    newButton = new JButton();
    newButton.setBorderPainted(false);
    newButton.setMnemonic('n');
    newButton.setToolTipText("New From Blast");
    newButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/filenew.png");
    // System.out.println(icon);
    newButton.setIcon(new ImageIcon(icon));

    openButton = new JButton();
    openButton.setBorderPainted(false);
    openButton.setMnemonic('o');
    openButton.setToolTipText("Open");
    openButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/fileopen.png");
    openButton.setIcon(new ImageIcon(icon));

    saveButton = new JButton();
    saveButton.setBorderPainted(false);
    saveButton.setMnemonic('s');
    saveButton.setToolTipText("Save");
    saveButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/filesave.png");
    saveButton.setIcon(new ImageIcon(icon));

    saveCurImgButton = new JButton();
    saveCurImgButton.setBorderPainted(false);
    saveCurImgButton.setToolTipText("Save current image");
    saveCurImgButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/saveimage.png");
    saveCurImgButton.setIcon(new ImageIcon(icon));

    printButton = new JButton();
    printButton.setBorderPainted(false);
    printButton.setToolTipText("Print...");
    printButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/fileprint.png");
    printButton.setIcon(new ImageIcon(icon));

    fileToolBar.add(newButton);
    fileToolBar.add(openButton);
    fileToolBar.add(saveButton);
    fileToolBar.add(saveCurImgButton);
    fileToolBar.add(printButton);

    // graph control toolbar
    graphToolBar = new JToolBar();
    graphToolBar.setRollover(true);

    previousButton = new JButton();
    previousButton.setBorderPainted(false);
    previousButton.setToolTipText("Previous graph");
    previousButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/previous.png");
    previousButton.setIcon(new ImageIcon(icon));

    indexField = new JTextField();
    indexField.setSize(new Dimension(25, 16));
    indexField.setMinimumSize(new Dimension(25, 16));
    indexField.setPreferredSize(new Dimension(25, 16));
    indexField.addKeyListener(keyListener);

    nextButton = new JButton();
    nextButton.setBorderPainted(false);
    nextButton.setToolTipText("Next graph");
    nextButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/next.png");
    nextButton.setIcon(new ImageIcon(icon));

    filterButton = new JButton();
    filterButton.setBorderPainted(false);
    filterButton.setToolTipText("Filt graph");
    filterButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/filter.png");
    filterButton.setIcon(new ImageIcon(icon));

    resortButton = new JButton();
    resortButton.setBorderPainted(false);
    resortButton.setToolTipText("Resort graph");
    resortButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/resort.png");
    resortButton.setIcon(new ImageIcon(icon));

    searchField = new JTextField();
    searchField.setSize(new Dimension(60, 16));
    searchField.setMinimumSize(new Dimension(60, 16));
    searchField.setPreferredSize(new Dimension(60, 16));
    searchField.addKeyListener(keyListener);

    searchButton = new JButton();
    searchButton.setBorderPainted(false);
    searchButton.setToolTipText("Search");
    searchButton.addActionListener(commandActionListener);
    icon = getClass().getResource("/org/bigwiv/blastgraph/icons/search.png");
    searchButton.setIcon(new ImageIcon(icon));

    graphToolBar.add(filterButton);
    graphToolBar.add(resortButton);
    // graphToolBar.add(new JToolBar.Separator());
    graphToolBar.add(previousButton);
    graphToolBar.add(indexField);
    graphToolBar.add(nextButton);
    graphToolBar.add(searchField);
    graphToolBar.add(searchButton);

    // view toolbar (modebox & layoutbox)
    viewToolBar = new JToolBar();
    viewToolBar.setRollover(true);
    modeBox = graphMouse.getModeComboBox();
    modeBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent e) {
            int index = modeBox.getSelectedIndex();
            if (index == 2) {
                int annotCount = annotationToolBar.getComponentCount();
                for (int i = 0; i < annotCount; i++) {
                    annotationToolBar.getComponent(i).setEnabled(true);
                }
            } else {
                int annotCount = annotationToolBar.getComponentCount();
                for (int i = 0; i < annotCount; i++) {
                    annotationToolBar.getComponent(i).setEnabled(false);
                }
            }

        }
    });
    layoutBox = this.getLayoutComboBox();
    viewToolBar.add(modeBox);
    viewToolBar.add(layoutBox);

    colorComboBox = new JComboBox(new String[] { "vertex color", "index", "strand", "genomeAcc", "organism" });
    viewToolBar.add(colorComboBox);

    // add additional menu to graphMenu
    modeMenu = graphMouse.getModeMenu();
    modeMenu.setText("Mode");
    layoutMenu = getLayoutMenu();
    layoutMenu.setText("Layout");
    graphMenu.add(modeMenu);
    graphMenu.add(layoutMenu);

    // annotation toolbar
    AnnotationControls<HitVertex, ValueEdge> annotationControls = new AnnotationControls<HitVertex, ValueEdge>(
            annotatingPlugin);
    annotationToolBar = annotationControls.getAnnotationsToolBar();
    ((JButton) annotationToolBar.getComponent(1)).setBorderPainted(false);
    ((JToggleButton) annotationToolBar.getComponent(2)).setBorderPainted(false);

    // add toolbars to toolBarPanel
    toolBarPanel = new JPanel();
    toolBarPanel.setLayout(new ModifiedFlowLayout(ModifiedFlowLayout.LEFT, 0, 0));
    toolBarPanel.setBorder(new EtchedBorder());
    toolBarPanel.add(fileToolBar);
    toolBarPanel.add(graphToolBar);
    toolBarPanel.add(viewToolBar);
    toolBarPanel.add(annotationToolBar);

    mainPanel.add(toolBarPanel, BorderLayout.NORTH);
    mainPanel.add(hsplitPane, BorderLayout.CENTER);

    // GridBagManager.add(mainPanel, toolBarPanel, 0, 0, 1, 1);
    // GridBagManager.add(mainPanel, hsplitPane, 0, 1, 1, 1);

    // mainPanel.add(toolBarPanel, BorderLayout.NORTH);

    // ===================vsplitPane Setting=================
    vsplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    vsplitPane.setContinuousLayout(true);
    vsplitPane.setOneTouchExpandable(true);
    vsplitPane.setResizeWeight(0.9);

    hsplitPane.setLeftComponent(vsplitPane);
    // GridBagManager.GRID_BAG.weightx = 0.9;
    // GridBagManager.GRID_BAG.weighty = 1;
    // GridBagManager.add(mainPanel, vsplitPane, 0, 1, 1, 2);
    // mainPanel.add(vsplitPane, BorderLayout.CENTER);

    // ===================vvPanel Setting===================

    vvPanel = new GraphZoomScrollPane(vv);
    vsplitPane.setTopComponent(vvPanel);

    // ===================Tab Panel Setting=======================
    // progressPanel = new ProgressPanel();

    verticesTable = new VerticesTable();
    verticesTable.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            int row = verticesTable.rowAtPoint(e.getPoint());
            int col = verticesTable.columnAtPoint(e.getPoint());
            // System.out.println(row + " " + col);
            String value = verticesTable.getValueAt(row, col).toString();
            // System.out.println(value);
            if (Global.graph.containsVertex(new HitVertex(value))) {
                for (int i = 0; i < subSetList.size(); i++) {
                    if (subSetList.get(i).contains(new HitVertex(value))) {
                        curGraph = FilterUtils.createInducedSubgraph(subSetList.get(i), Global.graph);
                        PickedState<HitVertex> pickedVertexState = vv.getPickedVertexState();

                        // picked is a reference to picked vertices
                        // use a temp set to avoid concurrent modification
                        Set<HitVertex> picked = pickedVertexState.getPicked();
                        Set<HitVertex> temp = new HashSet<HitVertex>();
                        for (HitVertex hitVertex : picked) {
                            temp.add(hitVertex);
                        }
                        for (HitVertex hv : temp) {
                            pickedVertexState.pick(hv, false);
                        }

                        pickedVertexState.pick(new HitVertex(value), true);
                        // refreshSubGraphView();
                        return;
                    }
                }
            }
        }
    });

    verticesTable.addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseMoved(MouseEvent e) {
            int row = verticesTable.rowAtPoint(e.getPoint());
            int col = verticesTable.columnAtPoint(e.getPoint());
            String value = verticesTable.getValueAt(row, col).toString();
            // System.out.println(value);
            if (Global.graph.containsVertex(value)) {
                Cursor normalCursor = new Cursor(Cursor.HAND_CURSOR);
                setCursor(normalCursor);
            } else {
                Cursor normalCursor = new Cursor(Cursor.DEFAULT_CURSOR);
                setCursor(normalCursor);
            }
        }
    });
    verticesPanel = new JPanel();
    verticesPanel.setLayout(new GridLayout());
    verticesPanel.add(new JScrollPane(verticesTable));

    edgesTable = new EdgesTable();
    edgesPanel = new JPanel();
    edgesPanel.setLayout(new GridLayout());
    edgesPanel.add(new JScrollPane(edgesTable));

    tabbedPane = new JTabbedPane();
    tabbedPane.addTab("Vertices", verticesPanel);
    tabbedPane.addTab("Edges", edgesPanel);
    vsplitPane.setBottomComponent(tabbedPane);

    graphMouse.addPichedChangeListener(verticesTable, edgesTable);

    // ===================Info Panel Setting===================
    infoPanel = new JPanel(new GridBagLayout());
    GridBagManager.GRID_BAG.weightx = 0.1;
    GridBagManager.GRID_BAG.weighty = 1;
    hsplitPane.setRightComponent(infoPanel);

    JPanel mainInfoPanel = new JPanel(new GridBagLayout());
    mainInfoPanel
            .setBorder(BorderFactory.createTitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Main Info"));

    JPanel currentInfoPanel = new JPanel(new GridBagLayout());
    currentInfoPanel.setBorder(
            BorderFactory.createTitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Current Graph"));
    JPanel selectedInfoPanel = new JPanel(new GridBagLayout());
    selectedInfoPanel
            .setBorder(BorderFactory.createTitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Selected"));

    JPanel statisticsInfoPanel = new JPanel(new GridBagLayout());
    statisticsInfoPanel
            .setBorder(BorderFactory.createTitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Statistics"));

    JPanel progressInfoPanel = new JPanel(new GridBagLayout());
    progressInfoPanel
            .setBorder(BorderFactory.createTitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Progress"));

    GridBagManager.GRID_BAG.anchor = GridBagConstraints.NORTH;
    GridBagManager.GRID_BAG.fill = GridBagConstraints.HORIZONTAL;
    GridBagManager.GRID_BAG.weighty = 0;
    GridBagManager.add(infoPanel, mainInfoPanel, 0, 1, 1, 1);
    GridBagManager.add(infoPanel, currentInfoPanel, 0, 2, 1, 1);
    GridBagManager.add(infoPanel, selectedInfoPanel, 0, 3, 1, 1);
    GridBagManager.GRID_BAG.weighty = 0.5;
    GridBagManager.GRID_BAG.fill = GridBagConstraints.BOTH;
    GridBagManager.add(infoPanel, statisticsInfoPanel, 0, 4, 1, 1);
    GridBagManager.add(infoPanel, progressInfoPanel, 0, 5, 1, 1);

    // mainInfoPanel
    {
        JLabel vertices = new JLabel("Vertices:");
        vertexCountLabel = new JLabel("0");
        JLabel edges = new JLabel("Edges:");
        edgeCountLabel = new JLabel("0");
        JLabel subGraphs = new JLabel("SubGraphs:");
        subGraphCountLabel = new JLabel("0");
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.WEST;
        GridBagManager.GRID_BAG.weightx = 0.5;
        GridBagManager.add(mainInfoPanel, vertices, 0, 0, 1, 1);
        GridBagManager.add(mainInfoPanel, edges, 0, 1, 1, 1);
        GridBagManager.add(mainInfoPanel, subGraphs, 0, 2, 1, 1);
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.EAST;
        GridBagManager.GRID_BAG.weightx = 0.5;
        GridBagManager.add(mainInfoPanel, vertexCountLabel, 1, 0, 1, 1);
        GridBagManager.add(mainInfoPanel, edgeCountLabel, 1, 1, 1, 1);
        GridBagManager.add(mainInfoPanel, subGraphCountLabel, 1, 2, 1, 1);

    } // end of mainInfoPanel

    // currentInfoPanel
    {
        JLabel vertices = new JLabel("Vertices:");
        currentVertexCountLabel = new JLabel("0");

        JLabel edges = new JLabel("Edges:");
        currentEdgeCountLabel = new JLabel("0");

        JLabel acc = new JLabel("ACC:");
        currentAccLabel = new JLabel("0");

        GridBagManager.GRID_BAG.anchor = GridBagConstraints.WEST;
        GridBagManager.GRID_BAG.weightx = 0.5;
        GridBagManager.add(currentInfoPanel, vertices, 0, 0, 1, 1);
        GridBagManager.add(currentInfoPanel, edges, 0, 1, 1, 1);
        GridBagManager.add(currentInfoPanel, acc, 0, 2, 1, 1);
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.EAST;
        GridBagManager.GRID_BAG.weightx = 0.5;
        GridBagManager.add(currentInfoPanel, currentVertexCountLabel, 1, 0, 1, 1);
        GridBagManager.add(currentInfoPanel, currentEdgeCountLabel, 1, 1, 1, 1);
        GridBagManager.add(currentInfoPanel, currentAccLabel, 1, 2, 1, 1);

    } // end of currentInfoPanel

    // selectedInfoPanel
    {
        JLabel vertices = new JLabel("Vertices:");
        selectedVertexCountLabel = new JLabel("0");
        JLabel edges = new JLabel("Edges:");
        selectedEdgeCountLabel = new JLabel("0");
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.WEST;
        GridBagManager.GRID_BAG.weightx = 0.5;
        GridBagManager.add(selectedInfoPanel, vertices, 0, 0, 1, 1);
        GridBagManager.add(selectedInfoPanel, edges, 0, 1, 1, 1);
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.EAST;
        GridBagManager.GRID_BAG.weightx = 0.5;
        GridBagManager.add(selectedInfoPanel, selectedVertexCountLabel, 1, 0, 1, 1);
        GridBagManager.add(selectedInfoPanel, selectedEdgeCountLabel, 1, 1, 1, 1);
        CollectionChangeListener<HitVertex> svListener = new CollectionChangeListener<HitVertex>() {

            @Override
            public void onCollectionChange(Set<HitVertex> set) {
                selectedVertexCountLabel.setText("" + set.size());
            }
        };

        CollectionChangeListener<ValueEdge> veListener = new CollectionChangeListener<ValueEdge>() {

            @Override
            public void onCollectionChange(Set<ValueEdge> set) {
                selectedEdgeCountLabel.setText("" + set.size());
            }
        };

        graphMouse.addPichedChangeListener(svListener, veListener);

    } // end of selectedInfoPanel

    {// statistics Panel
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.NORTH;
        GridBagManager.GRID_BAG.fill = GridBagConstraints.BOTH;
        GridBagManager.add(statisticsInfoPanel, graphStatisticsPanel, 0, 0, 1, 1);
    } // statistics Panel

    {// progressInfoPanel
        GridBagManager.GRID_BAG.anchor = GridBagConstraints.NORTH;
        GridBagManager.GRID_BAG.fill = GridBagConstraints.BOTH;
        GridBagManager.add(progressInfoPanel, progressPanel, 0, 0, 1, 1);
    } // progressInfoPanel
      // set frame size
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    setSize((screen.width * 3) / 4, (screen.height * 9) / 10);
    setLocation(screen.width / 6, screen.height / 16);

    refreshUI(false);
}