Implement and modify to display JTree with countries
[Persons_Comparator.git] / src / PersonView.java
CommitLineData
6977e614 1import javax.swing.*;
bb6c655a 2import java.awt.*;
c8da8eb7
JB
3import java.awt.event.ActionEvent;
4import java.awt.event.ActionListener;
9b3bfcdd 5import java.util.ArrayList;
6977e614 6
d252f672 7public class PersonView extends JComponent implements ActionListener {
255d3354
JB
8 private int width = 600;
9 private int height = 600;
883508ca 10 private Person personObj;
5687dc10 11 private ArrayList<Person> personArrayList;
6977e614
JB
12 private FirstnameView firstnameView;
13 private OriginView originView;
822afd4f 14 private RegionView regionView;
6977e614
JB
15 private SizeView sizeView;
16 private WeightView weightView;
17 private EyeView eyeView;
d252f672
JB
18 private JPanel northPanel = new JPanel();
19 private JPanel southPanel = new JPanel();
20 private JPanel eastPanel = new JPanel();
21 private JPanel westPanel = new JPanel();
255d3354 22 private PersonPanel personPanel = new PersonPanel();
bb6c655a 23 private JButton compareButton = new JButton("Compare");
6977e614 24
5687dc10 25 PersonView(Person personObj, ArrayList<Person> personArrayList) {
b974e749 26 setPersonObj(personObj);
255d3354 27 setFirstnameView(new FirstnameView(14, this.personObj.getFirstname()));
b974e749 28 setOriginView(new OriginView(this.personObj.getOrigin()));
822afd4f 29 setRegionView(new RegionView(new Region()));
b974e749
JB
30 setSizeView(new SizeView(this.personObj.getPersonSize()));
31 setWeightView(new WeightView(this.personObj.getWeight()));
32 setEyeView(new EyeView(this.personObj.getEye()));
5687dc10 33 setPersonArrayList(personArrayList);
60971873 34
c8da8eb7 35 this.compareButton.addActionListener(this);
d252f672
JB
36 northPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
37 northPanel.add(firstnameView);
38 southPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
39 southPanel.add(compareButton);
255d3354 40 eastPanel.setLayout(new BoxLayout(this.eastPanel, BoxLayout.PAGE_AXIS));
d252f672
JB
41 eastPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
42 eastPanel.add(sizeView);
43 eastPanel.add(weightView);
44 eastPanel.add(eyeView);
255d3354 45 westPanel.setLayout(new BoxLayout(this.westPanel, BoxLayout.PAGE_AXIS));
d252f672 46 westPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder());
822afd4f
SP
47 //westPanel.add(originView);
48 westPanel.add(regionView);
60971873
JB
49 }
50
883508ca
JB
51 public Person getPersonObj() {
52 return personObj;
53 }
54
55 public void setPersonObj(Person personObj) {
56 this.personObj = personObj;
ac6c3ea2
JB
57 }
58
59 /**
ac6c3ea2
JB
60 * @return
61 */
6977e614
JB
62 public FirstnameView getFirstnameView() {
63 return firstnameView;
64 }
65
ac6c3ea2 66 /**
ac6c3ea2
JB
67 * @param firstnameView
68 */
6977e614
JB
69 public void setFirstnameView(FirstnameView firstnameView) {
70 this.firstnameView = firstnameView;
71 }
72
ac6c3ea2 73 /**
ac6c3ea2
JB
74 * @return
75 */
6977e614
JB
76 public OriginView getOriginView() {
77 return originView;
78 }
79
ac6c3ea2 80 /**
ac6c3ea2
JB
81 * @param originView
82 */
6977e614
JB
83 public void setOriginView(OriginView originView) {
84 this.originView = originView;
85 }
86
822afd4f
SP
87 public void setRegionView(RegionView regionView) {
88 this.regionView = regionView;
89 }
90
91
ac6c3ea2 92 /**
ac6c3ea2
JB
93 * @return
94 */
6977e614
JB
95 public SizeView getSizeView() {
96 return sizeView;
97 }
98
ac6c3ea2 99 /**
ac6c3ea2
JB
100 * @param sizeView
101 */
6977e614
JB
102 public void setSizeView(SizeView sizeView) {
103 this.sizeView = sizeView;
104 }
105
ac6c3ea2 106 /**
ac6c3ea2
JB
107 * @return
108 */
6977e614
JB
109 public WeightView getWeightView() {
110 return weightView;
111 }
112
ac6c3ea2 113 /**
ac6c3ea2
JB
114 * @param weightView
115 */
116 public void setWeightView(WeightView weightView) {
117 this.weightView = weightView;
6977e614
JB
118 }
119
5687dc10
JB
120 /**
121 * @return
122 */
123 public EyeView getEyeView() {
124 return eyeView;
125 }
126
ac6c3ea2 127 /**
ac6c3ea2
JB
128 * @param eyeView
129 */
6977e614
JB
130 public void setEyeView(EyeView eyeView) {
131 this.eyeView = eyeView;
132 }
133
5687dc10
JB
134 public ArrayList<Person> getPersonArrayList() {
135 return personArrayList;
136 }
137
138 public void setPersonArrayList(ArrayList<Person> personArrayList) {
139 this.personArrayList = personArrayList;
6977e614 140 }
c8da8eb7 141
d252f672
JB
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
c8da8eb7
JB
166 @Override
167 public void actionPerformed(ActionEvent actionEvent) {
9b3bfcdd
JB
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));
5687dc10
JB
187 ArrayList<Person> personArrayList = this.getPersonArrayList();
188 //Utils.displayArrayList(personArrayList);
189 Utils.computeDistanceFrom(getPersonObj(), personArrayList);
9b3bfcdd 190 personArrayList.sort(getPersonObj());
5687dc10
JB
191 //Utils.displayArrayList(personArrayList);
192 Person closestPerson = personArrayList.get(personArrayList.indexOf(this.getPersonObj()) + 1);
255d3354 193 personPanel.setRightContentText(closestPerson.getFirstname().getFirstname() + " at distance " + closestPerson.getDistanceFromReference());
d418dae1 194 personPanel.getRightPanel().drawPerson(closestPerson);
9b3bfcdd 195 }
c8da8eb7 196 }
6977e614 197}