Implement and modify to display JTree with countries
[Persons_Comparator.git] / src / PersonView.java
1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.util.ArrayList;
6
7 public class PersonView extends JComponent implements ActionListener {
8 private int width = 600;
9 private int height = 600;
10 private Person personObj;
11 private ArrayList<Person> personArrayList;
12 private FirstnameView firstnameView;
13 private OriginView originView;
14 private RegionView regionView;
15 private SizeView sizeView;
16 private WeightView weightView;
17 private EyeView eyeView;
18 private JPanel northPanel = new JPanel();
19 private JPanel southPanel = new JPanel();
20 private JPanel eastPanel = new JPanel();
21 private JPanel westPanel = new JPanel();
22 private PersonPanel personPanel = new PersonPanel();
23 private JButton compareButton = new JButton("Compare");
24
25 PersonView(Person personObj, ArrayList<Person> personArrayList) {
26 setPersonObj(personObj);
27 setFirstnameView(new FirstnameView(14, this.personObj.getFirstname()));
28 setOriginView(new OriginView(this.personObj.getOrigin()));
29 setRegionView(new RegionView(new Region()));
30 setSizeView(new SizeView(this.personObj.getPersonSize()));
31 setWeightView(new WeightView(this.personObj.getWeight()));
32 setEyeView(new EyeView(this.personObj.getEye()));
33 setPersonArrayList(personArrayList);
34
35 this.compareButton.addActionListener(this);
36 northPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
37 northPanel.add(firstnameView);
38 southPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
39 southPanel.add(compareButton);
40 eastPanel.setLayout(new BoxLayout(this.eastPanel, BoxLayout.PAGE_AXIS));
41 eastPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
42 eastPanel.add(sizeView);
43 eastPanel.add(weightView);
44 eastPanel.add(eyeView);
45 westPanel.setLayout(new BoxLayout(this.westPanel, BoxLayout.PAGE_AXIS));
46 westPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
47 //westPanel.add(originView);
48 westPanel.add(regionView);
49 }
50
51 public Person getPersonObj() {
52 return personObj;
53 }
54
55 public void setPersonObj(Person personObj) {
56 this.personObj = personObj;
57 }
58
59 /**
60 * @return
61 */
62 public FirstnameView getFirstnameView() {
63 return firstnameView;
64 }
65
66 /**
67 * @param firstnameView
68 */
69 public void setFirstnameView(FirstnameView firstnameView) {
70 this.firstnameView = firstnameView;
71 }
72
73 /**
74 * @return
75 */
76 public OriginView getOriginView() {
77 return originView;
78 }
79
80 /**
81 * @param originView
82 */
83 public void setOriginView(OriginView originView) {
84 this.originView = originView;
85 }
86
87 public void setRegionView(RegionView regionView) {
88 this.regionView = regionView;
89 }
90
91
92 /**
93 * @return
94 */
95 public SizeView getSizeView() {
96 return sizeView;
97 }
98
99 /**
100 * @param sizeView
101 */
102 public void setSizeView(SizeView sizeView) {
103 this.sizeView = sizeView;
104 }
105
106 /**
107 * @return
108 */
109 public WeightView getWeightView() {
110 return weightView;
111 }
112
113 /**
114 * @param weightView
115 */
116 public void setWeightView(WeightView weightView) {
117 this.weightView = weightView;
118 }
119
120 /**
121 * @return
122 */
123 public EyeView getEyeView() {
124 return eyeView;
125 }
126
127 /**
128 * @param eyeView
129 */
130 public void setEyeView(EyeView eyeView) {
131 this.eyeView = eyeView;
132 }
133
134 public ArrayList<Person> getPersonArrayList() {
135 return personArrayList;
136 }
137
138 public void setPersonArrayList(ArrayList<Person> personArrayList) {
139 this.personArrayList = personArrayList;
140 }
141
142 public Dimension getDimension() {
143 return new Dimension(this.width, this.height);
144 }
145
146 public JPanel getNorthPanel() {
147 return northPanel;
148 }
149
150 public JPanel getSouthPanel() {
151 return southPanel;
152 }
153
154 public JPanel getEastPanel() {
155 return eastPanel;
156 }
157
158 public JPanel getWestPanel() {
159 return westPanel;
160 }
161
162 public PersonPanel getPersonPanel() {
163 return personPanel;
164 }
165
166 @Override
167 public void actionPerformed(ActionEvent actionEvent) {
168 //TODO: one can implement a smarter way of getting all inputs values inside the main panel.
169 String firstname = this.getFirstnameView().getTextField().getText();
170 String country = null;
171 if (this.getOriginView().getComboBox().getSelectedIndex() != -1)
172 country = (String) this.getOriginView().getComboBox().getSelectedObjects()[0];
173 Integer size = (Integer) this.getSizeView().getSpinner().getValue();
174 Integer weight = (Integer) this.getWeightView().getComboBox().getSelectedItem();
175 String eye_color = (String) this.getEyeView().getColorsList().getSelectedValue();
176 if (firstname.equals("") || country == null || eye_color == null) {
177 JOptionPane.showMessageDialog(this,
178 "Some required fields are missing.",
179 "Error",
180 JOptionPane.ERROR_MESSAGE);
181 } else {
182 this.getPersonObj().setFirstname(new Firstname(firstname));
183 this.getPersonObj().setOrigin(new Origin(country));
184 this.getPersonObj().setPersonSize(new Size(size));
185 this.getPersonObj().setWeight(new Weight(weight));
186 this.getPersonObj().setEye(new Eye(eye_color));
187 ArrayList<Person> personArrayList = this.getPersonArrayList();
188 //Utils.displayArrayList(personArrayList);
189 Utils.computeDistanceFrom(getPersonObj(), personArrayList);
190 personArrayList.sort(getPersonObj());
191 //Utils.displayArrayList(personArrayList);
192 Person closestPerson = personArrayList.get(personArrayList.indexOf(this.getPersonObj()) + 1);
193 personPanel.setRightContentText(closestPerson.getFirstname().getFirstname() + " at distance " + closestPerson.getDistanceFromReference());
194 personPanel.getRightPanel().drawPerson(closestPerson);
195 }
196 }
197 }