Reorganize the PersonView :
[Persons_Comparator.git] / src / PersonView.java
index 9743d391456788478ab08cfe35f0d7afd34aeaf3..6823579d2bc162a43ea1fc6d1b377a1e43c73fe0 100644 (file)
 import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
 
-public class PersonView extends JPanel {
+public class PersonView extends JComponent implements ActionListener {
+    private int width = 800;
+    private int height = 500;
+    private Person personObj;
+    private ArrayList<Person> personArrayList;
     private FirstnameView firstnameView;
     private OriginView originView;
     private SizeView sizeView;
     private WeightView weightView;
     private EyeView eyeView;
+    private JPanel northPanel = new JPanel();
+    private JPanel southPanel = new JPanel();
+    private JPanel eastPanel = new JPanel();
+    private JPanel westPanel = new JPanel();
+    private PersonPanel personPanel = new PersonPanel("Person comparison");
+    private JButton compareButton = new JButton("Compare");
 
+    PersonView(Person personObj, ArrayList<Person> personArrayList) {
+        setPersonObj(personObj);
+        setFirstnameView(new FirstnameView(15, this.personObj.getFirstname()));
+        setOriginView(new OriginView(this.personObj.getOrigin()));
+        setSizeView(new SizeView(this.personObj.getPersonSize()));
+        setWeightView(new WeightView(this.personObj.getWeight()));
+        setEyeView(new EyeView(this.personObj.getEye()));
+        setPersonArrayList(personArrayList);
+
+        this.compareButton.addActionListener(this);
+        northPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
+        northPanel.add(firstnameView);
+        southPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
+        southPanel.add(compareButton);
+        eastPanel.setLayout(new BoxLayout(this.eastPanel, BoxLayout.Y_AXIS));
+        eastPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
+        eastPanel.add(sizeView);
+        eastPanel.add(weightView);
+        eastPanel.add(eyeView);
+        westPanel.setLayout(new BoxLayout(this.westPanel, BoxLayout.Y_AXIS));
+        westPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
+        westPanel.add(originView);
+    }
+
+    public Person getPersonObj() {
+        return personObj;
+    }
+
+    public void setPersonObj(Person personObj) {
+        this.personObj = personObj;
+    }
+
+    /**
+     * @return
+     */
     public FirstnameView getFirstnameView() {
         return firstnameView;
     }
 
+    /**
+     * @param firstnameView
+     */
     public void setFirstnameView(FirstnameView firstnameView) {
         this.firstnameView = firstnameView;
     }
 
+    /**
+     * @return
+     */
     public OriginView getOriginView() {
         return originView;
     }
 
+    /**
+     * @param originView
+     */
     public void setOriginView(OriginView originView) {
         this.originView = originView;
     }
 
+    /**
+     * @return
+     */
     public SizeView getSizeView() {
         return sizeView;
     }
 
+    /**
+     * @param sizeView
+     */
     public void setSizeView(SizeView sizeView) {
         this.sizeView = sizeView;
     }
 
+    /**
+     * @return
+     */
     public WeightView getWeightView() {
         return weightView;
     }
 
-    public void setWeightView(EyeView eyeView) {
-        this.eyeView = eyeView;
+    /**
+     * @param weightView
+     */
+    public void setWeightView(WeightView weightView) {
+        this.weightView = weightView;
     }
 
+    /**
+     * @return
+     */
+    public EyeView getEyeView() {
+        return eyeView;
+    }
+
+    /**
+     * @param eyeView
+     */
     public void setEyeView(EyeView eyeView) {
         this.eyeView = eyeView;
     }
 
-    public EyeView getEyeView() {
-        return eyeView;
+    public ArrayList<Person> getPersonArrayList() {
+        return personArrayList;
+    }
+
+    public void setPersonArrayList(ArrayList<Person> personArrayList) {
+        this.personArrayList = personArrayList;
+    }
+
+    public Dimension getDimension() {
+        return new Dimension(this.width, this.height);
+    }
+
+    public JPanel getNorthPanel() {
+        return northPanel;
+    }
+
+    public JPanel getSouthPanel() {
+        return southPanel;
+    }
+
+    public JPanel getEastPanel() {
+        return eastPanel;
+    }
+
+    public JPanel getWestPanel() {
+        return westPanel;
+    }
+
+    public PersonPanel getPersonPanel() {
+        return personPanel;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent actionEvent) {
+        //TODO: one can implement a smarter way of getting all inputs values inside the main panel.
+        String firstname = this.getFirstnameView().getTextField().getText();
+        String country = null;
+        if (this.getOriginView().getComboBox().getSelectedIndex() != -1)
+            country = (String) this.getOriginView().getComboBox().getSelectedObjects()[0];
+        Integer size = (Integer) this.getSizeView().getSpinner().getValue();
+        Integer weight = (Integer) this.getWeightView().getComboBox().getSelectedItem();
+        String eye_color = (String) this.getEyeView().getColorsList().getSelectedValue();
+        if (firstname.equals("") || country == null || eye_color == null) {
+            JOptionPane.showMessageDialog(this,
+                    "Some required fields are missing.",
+                    "Error",
+                    JOptionPane.ERROR_MESSAGE);
+        } else {
+            this.getPersonObj().setFirstname(new Firstname(firstname));
+            this.getPersonObj().setOrigin(new Origin(country));
+            this.getPersonObj().setPersonSize(new Size(size));
+            this.getPersonObj().setWeight(new Weight(weight));
+            this.getPersonObj().setEye(new Eye(eye_color));
+            ArrayList<Person> personArrayList = this.getPersonArrayList();
+            //Utils.displayArrayList(personArrayList);
+            Utils.computeDistanceFrom(getPersonObj(), personArrayList);
+            personArrayList.sort(getPersonObj());
+            //Utils.displayArrayList(personArrayList);
+            Person closestPerson = personArrayList.get(personArrayList.indexOf(this.getPersonObj()) + 1);
+            personPanel.setContentText(closestPerson.toString());
+        }
     }
 }