9008a65e3ee51e7e4bcde2007c5fe79ad1244e22
[RRRRHHHH_Code] / ruralHouses / src / gui / HouseFeaturesGUI.java
1 package gui;
2
3 import java.awt.Color;
4 import java.awt.Component;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.awt.event.MouseAdapter;
8 import java.awt.event.MouseEvent;
9 import java.util.Date;
10 import java.util.Enumeration;
11 import java.util.Vector;
12
13 import javax.swing.JButton;
14 import javax.swing.JFrame;
15 import javax.swing.JLabel;
16 import javax.swing.JPanel;
17 import javax.swing.JScrollPane;
18 import javax.swing.JTable;
19 import javax.swing.JTextField;
20 import javax.swing.SwingConstants;
21 import javax.swing.border.EmptyBorder;
22 import javax.swing.table.DefaultTableCellRenderer;
23 import javax.swing.table.DefaultTableModel;
24
25 import businessLogic.BookingManager;
26 import domain.Booking;
27 import domain.Client;
28 import domain.Offer;
29 import domain.RuralHouse;
30
31 public class HouseFeaturesGUI extends JFrame {
32
33         /**
34          * 
35          */
36         private static final long serialVersionUID = 1L;
37         private JPanel contentPane;
38         private JLabel lblDistrict;
39         private JTextField District_f;
40         private JLabel lblDescription;
41         private JTextField description_f;
42         private JLabel lblKitchen;
43         private JTextField kitchens_f;
44         private JLabel lblRooms;
45         private JTextField rooms_f;
46         private JLabel lblLivings;
47         private JTextField lRooms_f;
48         private JLabel lblParkings;
49         private JTextField parkings_f;
50         private JLabel lblBaths;
51         private JTextField baths_f;
52         private JTable table;
53         private DefaultTableModel tableModel;
54         private RuralHouse rh;
55         private JTextField telIn;
56         private int row;
57         private JLabel labelPhone;
58         private JLabel lblName;
59         private JTextField nameField;
60         private JLabel lblEmail;
61         private JTextField mailField;
62
63         /**
64          * Create the frame.
65          */
66
67         public HouseFeaturesGUI(RuralHouse RH, final Date FirstDay,
68                         final Date LastDay) {
69                 this.rh = RH;
70                 this.getContentPane().setLayout(null);
71                 setBounds(100, 100, 500, 700);
72                 contentPane = new JPanel();
73                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
74                 setContentPane(contentPane);
75
76                 lblDistrict = new JLabel("District:");
77                 lblDistrict.setBounds(23, 67, 70, 14);
78                 lblDistrict.setHorizontalAlignment(SwingConstants.RIGHT);
79
80                 District_f = new JTextField();
81                 District_f.setEditable(false);
82                 District_f.setBounds(103, 64, 86, 20);
83                 District_f.setColumns(10);
84
85                 lblDescription = new JLabel("Description:");
86                 lblDescription.setBounds(215, 67, 90, 14);
87                 lblDescription.setHorizontalAlignment(SwingConstants.RIGHT);
88
89                 description_f = new JTextField();
90                 description_f.setEditable(false);
91                 description_f.setBounds(238, 99, 178, 129);
92                 description_f.setColumns(10);
93
94                 lblKitchen = new JLabel("Kitchens:");
95                 lblKitchen.setBounds(23, 211, 70, 14);
96                 lblKitchen.setHorizontalAlignment(SwingConstants.RIGHT);
97
98                 kitchens_f = new JTextField();
99                 kitchens_f.setEditable(false);
100                 kitchens_f.setBounds(103, 202, 86, 20);
101                 kitchens_f.setColumns(10);
102
103                 lblRooms = new JLabel("Rooms:");
104                 lblRooms.setBounds(23, 102, 70, 14);
105                 lblRooms.setHorizontalAlignment(SwingConstants.RIGHT);
106
107                 rooms_f = new JTextField();
108                 rooms_f.setEditable(false);
109                 rooms_f.setBounds(103, 99, 86, 20);
110                 rooms_f.setColumns(10);
111
112                 lblLivings = new JLabel("Living rooms:");
113                 lblLivings.setBounds(30, 236, 63, 14);
114                 lblLivings.setHorizontalAlignment(SwingConstants.RIGHT);
115
116                 lRooms_f = new JTextField();
117                 lRooms_f.setEditable(false);
118                 lRooms_f.setBounds(103, 233, 86, 20);
119                 lRooms_f.setColumns(10);
120
121                 lblParkings = new JLabel("Parkings:");
122                 lblParkings.setBounds(23, 174, 70, 14);
123                 lblParkings.setHorizontalAlignment(SwingConstants.RIGHT);
124
125                 parkings_f = new JTextField();
126                 parkings_f.setEditable(false);
127                 parkings_f.setBounds(103, 171, 86, 20);
128                 parkings_f.setColumns(10);
129
130                 lblBaths = new JLabel("Baths:");
131                 lblBaths.setBounds(23, 143, 70, 14);
132                 lblBaths.setHorizontalAlignment(SwingConstants.RIGHT);
133
134                 baths_f = new JTextField();
135                 baths_f.setEditable(false);
136                 baths_f.setBounds(103, 140, 86, 20);
137                 baths_f.setColumns(10);
138                 contentPane.setLayout(null);
139                 contentPane.add(lblParkings);
140                 contentPane.add(parkings_f);
141                 contentPane.add(lblRooms);
142                 contentPane.add(rooms_f);
143                 contentPane.add(lblBaths);
144                 contentPane.add(baths_f);
145                 contentPane.add(lblDistrict);
146                 contentPane.add(District_f);
147                 contentPane.add(lblLivings);
148                 contentPane.add(lRooms_f);
149                 contentPane.add(lblKitchen);
150                 contentPane.add(kitchens_f);
151                 contentPane.add(description_f);
152                 contentPane.add(lblDescription);
153                 parkings_f.setText(Integer.toString(rh.getFeatures().getnParkings()));
154                 rooms_f.setText(Integer.toString(rh.getFeatures().getnRooms()));
155                 baths_f.setText(Integer.toString(rh.getFeatures().getnBaths()));
156                 District_f.setText(rh.getDistrict());
157                 kitchens_f.setText(Integer.toString(rh.getFeatures().getnKitchens()));
158                 description_f.setText(rh.getDescription());
159                 lRooms_f.setText(Integer.toString(rh.getFeatures().getnLivings()));
160                 JLabel lblAvailbleOffers = new JLabel("Availble Offers:");
161                 lblAvailbleOffers.setBounds(30, 286, 86, 14);
162                 contentPane.add(lblAvailbleOffers);
163                 JScrollPane scrollPane = new JScrollPane();
164                 scrollPane.setBounds(40, 311, 376, 183);
165                 contentPane.add(scrollPane);
166
167                 table = new JTable() {
168                         private static final long serialVersionUID = 1L;
169
170                         public boolean isCellEditable(int row, int column) {
171                                 return false;
172                         };
173                 };
174                 tableModel = new DefaultTableModel(null, new String[] { "Offer #",
175                                 "FirstDay", "LastDay", "Price" });
176                 table.setModel(tableModel);
177                 scrollPane.setViewportView(table);
178
179                 JButton btnBookSelected = new JButton("Book SelectedOffer");
180                 btnBookSelected.setBounds(238, 614, 178, 23);
181                 contentPane.add(btnBookSelected);
182
183                 btnBookSelected.addActionListener(new ActionListener() {
184                         public void actionPerformed(ActionEvent arg0) {
185
186                                 jButton_ActionPerformed(arg0);
187                         }
188
189                 });
190
191                 JLabel lblNewLabel = new JLabel(
192                                 "Green: Suit your dates. Red: Do not suit your dates");
193                 lblNewLabel.setEnabled(false);
194                 lblNewLabel.setBounds(170, 282, 261, 23);
195                 contentPane.add(lblNewLabel);
196
197                 JLabel lblNewLabel_1 = new JLabel("Telephone num:");
198                 lblNewLabel_1.setBounds(10, 618, 83, 14);
199                 contentPane.add(lblNewLabel_1);
200
201                 telIn = new JTextField();
202                 telIn.setBounds(103, 615, 129, 20);
203                 contentPane.add(telIn);
204                 telIn.setColumns(10);
205
206                 labelPhone = new JLabel("");
207                 labelPhone.setBounds(238, 252, 178, 14);
208                 contentPane.add(labelPhone);
209
210                 lblName = new JLabel("Name:");
211                 lblName.setBounds(10, 516, 46, 14);
212                 contentPane.add(lblName);
213
214                 nameField = new JTextField();
215                 nameField.setBounds(103, 513, 178, 20);
216                 contentPane.add(nameField);
217                 nameField.setColumns(10);
218
219                 lblEmail = new JLabel("E-mail:");
220                 lblEmail.setBounds(10, 565, 46, 14);
221                 contentPane.add(lblEmail);
222
223                 mailField = new JTextField();
224                 mailField.setBounds(103, 562, 178, 20);
225                 contentPane.add(mailField);
226                 mailField.setColumns(10);
227
228                 table.addMouseListener(new MouseAdapter() {
229                         @Override
230                         public void mouseClicked(MouseEvent arg0) {
231                                 row = table.getSelectedRow();
232                         }
233                 });
234                 Enumeration<Offer> rhs = rh.getAllOffers().elements();
235                 while (rhs.hasMoreElements()) {
236                         Offer of = rhs.nextElement();
237                         if (of.getBookings() == null
238                                         || !(of.getBookings().size() == 1 && of.isBooked())) {
239                                 Vector<Object> row = new Vector<Object>();
240                                 row.add(of.getOfferNumber());
241                                 row.add(of.getFirstDay());
242                                 row.add(of.getLastDay());
243                                 row.add(of.getPrice());
244                                 tableModel.addRow(row);
245                         }
246                 }
247                 table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
248                         /**
249                          * 
250                          */
251                         private static final long serialVersionUID = 1L;
252
253                         @Override
254                         public Component getTableCellRendererComponent(JTable table,
255                                         Object value, boolean isSelected, boolean hasFocus,
256                                         int row, int col) {
257
258                                 super.getTableCellRendererComponent(table, value, isSelected,
259                                                 hasFocus, row, col);
260
261                                 Date firstDay = (Date) table.getModel().getValueAt(row, 1);
262                                 Date lastDay = (Date) table.getModel().getValueAt(row, 2);
263                                 if (FirstDay != null && LastDay != null) {
264                                         if (LastDay.before(lastDay) || FirstDay.after(firstDay)) {
265                                                 setBackground(Color.RED);
266                                                 setForeground(Color.BLACK);
267                                         } else {
268                                                 setBackground(Color.GREEN);
269                                                 setForeground(Color.BLACK);
270                                         }
271                                 }
272                                 return this;
273                         }
274                 });
275         }
276
277         private void jButton_ActionPerformed(ActionEvent arg0) {
278                 BookingManager bookingM = new BookingManager();
279
280                 if (telIn.getText().matches("[976]\\d{2}[.\\- ]?\\d{3}[.\\- ]?\\d{3}")
281                                 && mailField
282                                                 .getText()
283                                                 .matches(
284                                                                 "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$")
285                                 && !nameField.getText().isEmpty()) {
286                         labelPhone.setText("");
287                         Vector<Booking> book = null;
288                         try {
289                                 if (table.getRowCount() != 0) {
290                                         Client cl = new Client(nameField.getText(),
291                                                         mailField.getText(), telIn.getText());
292                                         book = bookingM.createBooking(rh, rh.offers.get(row)
293                                                         .getFirstDay(), rh.offers.get(row).getLastDay(),cl);
294                                 }
295                         } catch (Exception e) {
296                                 e.printStackTrace();
297                         }
298                         if (book != null) {
299                                 BookRuralHouseConfirmationWindow confirmWindow = new BookRuralHouseConfirmationWindow(
300                                                 book.lastElement());
301                                 confirmWindow.setVisible(true);
302                         }
303                 } else {
304                         labelPhone.setText("Bad formatted data.");
305
306                 }
307         }
308 }