Package gui

Source Code of gui.AdvancedSearchFrame

package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import nodes.MileStone;
import person.Person;
import threading.IntegratorThread;
import threading.SearchThread;

public class AdvancedSearchFrame extends JFrame implements ActionListener
{
  private Vector<SearchThread> jobList = new Vector<SearchThread>();
 
  public AdvancedSearchFrame(MainFrame caller)
  {
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(600, 350));
    this.caller = caller;
    this.setLocationRelativeTo(caller);

    initializeComponents();
  }

  @SuppressWarnings({ "unchecked", "rawtypes" })
  private void initializeComponents()
  {
    mainPanel = new JPanel();
    this.setContentPane(mainPanel);
    mainPanel.setLayout(new BorderLayout(0, 0));

    upperPanel = new JPanel();
    mainPanel.add(upperPanel, BorderLayout.NORTH);
    upperPanel.setLayout(new BorderLayout(0, 0));
    queryPanel = new JPanel();
    upperPanel.add(queryPanel, BorderLayout.NORTH);
    personLabel = new JLabel("Person: ");
    personComboBox = new JComboBox();
    fromYearLabel = new JLabel("from:");
    fromYearTextBox = new JTextField();
    fromYearTextBox.setText("");
    toYearLabel = new JLabel("to: ");
    toYearTextBox = new JTextField();
    toYearTextBox.setText("");
   
    queryPanel.add(personLabel);
    this.personComboBox.setModel(caller.vipComboBox.getModel());
    queryPanel.add(personComboBox);
    queryPanel.add(fromYearLabel);
    queryPanel.add(fromYearTextBox);
    fromYearTextBox.setColumns(10);
    queryPanel.add(toYearLabel);
    queryPanel.add(toYearTextBox);
    toYearTextBox.setColumns(10);

   
    queryButtonsPanel = new JPanel();
    addQueryButton = new JButton("Add");
    addQueryButton.addActionListener(this);
    clearQueryButton = new JButton("Clear");
    clearQueryButton.addActionListener(this);
    centerPanel = new JPanel();
    queriesList = new List();

    upperPanel.add(queryButtonsPanel);
    operatorLabel = new JLabel("Operator");
    queryButtonsPanel.add(operatorLabel);
    operatorComboBox = new JComboBox();
    queryButtonsPanel.add(operatorComboBox);
    operatorComboBox.setModel(new DefaultComboBoxModel(new String[] {"And", "Or"}));
    queryButtonsPanel.add(addQueryButton);
    queryButtonsPanel.add(clearQueryButton);
    mainPanel.add(centerPanel, BorderLayout.CENTER);
    centerPanel.setLayout(new BorderLayout(0, 0));
    centerPanel.add(queriesList);

    bottomPanel = new JPanel();
    mainPanel.add(bottomPanel, BorderLayout.SOUTH);

    searchButton = new JButton("Search");
    cancelButton = new JButton("Cancel");
    searchButton.addActionListener(this);
    cancelButton.addActionListener(this);
    bottomPanel.add(searchButton);
    bottomPanel.add(cancelButton);
   
    pack();
  }
 
  @Override
  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == addQueryButton)
    {
      queriesList.add(personComboBox.getSelectedItem().toString() +
          " " + "from: " + Integer.parseInt(fromYearTextBox.getText()) +
          " " + "to: " + Integer.parseInt(toYearTextBox.getText()) + ".");
     
      jobList.add(new SearchThread( (Person)(personComboBox.getSelectedItem()),
                      Integer.parseInt(fromYearTextBox.getText()),
                      Integer.parseInt(toYearTextBox.getText()))
      );
    }
    else if (e.getSource() == clearQueryButton)
    {
      personComboBox.setSelectedIndex(-1);
      fromYearTextBox.setText("");
      toYearTextBox.setText("");
      operatorComboBox.setSelectedIndex(-1);
     
    }
    else if (e.getSource() == searchButton)
    {
      ExecutorService pool = Executors.newFixedThreadPool(8);
      IntegratorThread integrator = new IntegratorThread(jobList.size());
     
      pool.execute(integrator);
     
      for (SearchThread s : jobList)
      {
        s.addListener(integrator);
        pool.execute(s);
      }
     
      try
      {
        pool.awaitTermination(100, TimeUnit.MILLISECONDS);
      }
     
      catch (InterruptedException e1)
      {
        e1.printStackTrace();
      }
     
      Vector<Person> result = integrator.getResult();
     
      caller.summaryArea.setText("");
     
      if (operatorComboBox.getSelectedItem().toString().equals("Or"))
      {
        for (Person p : result)
        {
          caller.summaryArea.setText(caller.summaryArea.getText() + p.lifeHistoryToString());
        }
      }
      else
      {
        Vector<Tuple<String,Vector<MileStone>>> milestones = new Vector<Tuple<String,Vector<MileStone>>>();
       
        for (int i = 0 ; i < result.size(); i++)
        {
          milestones.add(new Tuple<String, Vector<MileStone>>(result.get(i).getName(),result.get(i).returnMileStoneList()));
        }
       
        for (Tuple<String,Vector<MileStone>> t : milestones)
        {
          for (Tuple<String,Vector<MileStone>> k : milestones)
          {
            if (t == k) continue;
           
            for (int i = 0; i < t.second.size(); i++)
            {
              boolean found = false;
             
              for (int j = 0; j <  k.second.size(); j++)
              {
                if( t.second.elementAt(i).equals(k.second.elementAt(j)) )
                {
                  found = true;
                  break;
                }
              }
             
              if (!found)
              {
                t.second.remove(i--);
              }
            }
          }
        }
       
        caller.summaryArea.setText("");
       
        for(Tuple<String, Vector<MileStone>> t : milestones)
        {
          caller.summaryArea.setText(caller.summaryArea.getText() + t.first + "\n");
       
          for (MileStone m : t.second)
          {
            caller.summaryArea.setText(caller.summaryArea.getText() + m.toString());
          }
         
        }
      }
     
      caller.setEnabled(true);
      caller.setVisible(true);
      this.dispose();
    }
    else if (e.getSource() == cancelButton)
    {
      caller.setEnabled(true);
      caller.setVisible(true);
      this.dispose();
    }
  }
 
  private MainFrame caller;
  private JTextField fromYearTextBox;
  private JTextField toYearTextBox;
  private JPanel mainPanel;
  private JPanel upperPanel;
  private JPanel queryPanel;
  private JLabel personLabel;
  private JComboBox personComboBox;
  private JLabel fromYearLabel;
  private JLabel toYearLabel;
  private JLabel operatorLabel;
  private JComboBox operatorComboBox;
  private JPanel queryButtonsPanel;
  private JButton addQueryButton;
  private JButton clearQueryButton;
  private JPanel centerPanel;
  private List queriesList;
  private JPanel bottomPanel;
  private JButton searchButton;
  private JButton cancelButton;
}
TOP

Related Classes of gui.AdvancedSearchFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.