12d501b63dab1de07f829dfc4608a9b30d14d2f4
[RRRRHHHH_Code] / ruralHouses / src / gui / AddOffersGUI.java
1 package gui;
2 import java.awt.Color;
3 import java.awt.Dimension;
4 import java.awt.Rectangle;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.awt.event.FocusEvent;
8 import java.awt.event.FocusListener;
9 import java.beans.PropertyChangeEvent;
10 import java.beans.PropertyChangeListener;
11 import java.sql.Date;
12 import java.text.DateFormat;
13 import java.util.Calendar;
14 import java.util.Locale;
15 import java.util.Vector;
16
17 import javax.swing.JButton;
18 import javax.swing.JComboBox;
19 import javax.swing.JFrame;
20 import javax.swing.JLabel;
21 import javax.swing.JTextField;
22
23 import businessLogic.OfferManager;
24
25 import com.toedter.calendar.JCalendar;
26
27 import domain.Offer;
28 import domain.RuralHouse;
29 import exceptions.BadDates;
30 import exceptions.OverlappingOfferExists;
31
32
33
34 public class AddOffersGUI extends JFrame  {
35 private static final long serialVersionUID = 1L;
36
37         
38   private JComboBox jComboBox1;
39   private JLabel jLabel1 = new JLabel();
40   private JLabel jLabel2 = new JLabel();
41   private JTextField jTextField1 = new JTextField();
42   private JLabel jLabel3 = new JLabel();
43   private JTextField jTextField2 = new JTextField();
44   private JLabel jLabel4 = new JLabel();
45   private JTextField jTextField3 = new JTextField();
46   private JButton jButton1 = new JButton();
47   
48   // Code for JCalendar
49   private JCalendar jCalendar1 = new JCalendar();
50   private JCalendar jCalendar2 = new JCalendar();
51   private Calendar calendarInicio = null;
52   private Calendar calendarFin = null;
53   private JButton jButton2 = new JButton();
54   private JLabel jLabel5 = new JLabel();
55   private final JLabel lblNewLabel = new JLabel("");
56   
57
58   public AddOffersGUI(Vector<RuralHouse> v)
59   {
60     try
61     {
62       jbInit(v);
63     }
64     catch(Exception e)
65     {
66       e.printStackTrace();
67     }
68   }
69
70   private void jbInit(Vector<RuralHouse> v) throws Exception
71   {
72     this.getContentPane().setLayout(null);
73     this.setSize(new Dimension(513, 433));
74     this.setTitle("Set availability");
75     
76     
77     jComboBox1 = new JComboBox(v);
78     jComboBox1.setBounds(new Rectangle(115, 30, 115, 20));
79     jLabel1.setText("List of houses:");
80     jLabel1.setBounds(new Rectangle(25, 30, 95, 20));
81     jLabel2.setText("First day :");
82     jLabel2.setBounds(new Rectangle(25, 75, 85, 25));
83     jTextField1.setBounds(new Rectangle(25, 265, 220, 25));
84     jTextField1.setEditable(false);
85     jLabel3.setText("Last day :");
86     jLabel3.setBounds(new Rectangle(260, 75, 75, 25));
87     jTextField2.setBounds(new Rectangle(260, 265, 220, 25));
88     jTextField2.setEditable(false);
89     jLabel4.setText("Price:");
90     jLabel4.setBounds(new Rectangle(260, 30, 75, 20));
91     jTextField3.setBounds(new Rectangle(350, 30, 115, 20));
92     jTextField3.setText("0");
93     jButton1.setText("Accept");
94     jButton1.setBounds(new Rectangle(100, 360, 130, 30));
95     jTextField3.addFocusListener(new FocusListener()
96       {
97           public void focusGained(FocusEvent e)
98           {
99           }
100   
101           public void focusLost(FocusEvent e)
102           {
103             jTextField3_focusLost();
104           }
105       });
106     jButton1.addActionListener(new ActionListener()
107       {
108         public void actionPerformed(ActionEvent e)
109         {
110           jButton1_actionPerformed(e);
111         }
112       });
113     jButton2.setText("Cancel");
114     jButton2.setBounds(new Rectangle(270, 360, 130, 30));
115     jButton2.addActionListener(new ActionListener()
116       {
117         public void actionPerformed(ActionEvent e)
118         {
119           jButton2_actionPerformed(e);
120         }
121       });
122     jLabel5.setBounds(new Rectangle(100, 320, 300, 20));
123     jLabel5.setForeground(Color.red);
124     jLabel5.setSize(new Dimension(305, 20));
125     jCalendar1.setBounds(new Rectangle(25, 100, 220, 165));
126     jCalendar2.setBounds(new Rectangle(260, 100, 220, 165));
127     
128     // Code for  JCalendar
129     this.jCalendar1.addPropertyChangeListener(new PropertyChangeListener()
130     {
131       public void propertyChange(PropertyChangeEvent propertychangeevent)
132       {
133         if (propertychangeevent.getPropertyName().equals("locale"))
134         {
135           jCalendar1.setLocale((Locale) propertychangeevent.getNewValue());
136           DateFormat dateformat = DateFormat.getDateInstance(1, jCalendar1.getLocale());
137           jTextField1.setText(dateformat.format(calendarInicio.getTime()));
138         }
139         else if (propertychangeevent.getPropertyName().equals("calendar"))
140         {
141           calendarInicio = (Calendar) propertychangeevent.getNewValue();
142           DateFormat dateformat1 = DateFormat.getDateInstance(1, jCalendar1.getLocale());
143           jTextField1.setText(dateformat1.format(calendarInicio.getTime()));
144           jCalendar1.setCalendar(calendarInicio);
145         }
146       } 
147     });
148     
149     this.jCalendar2.addPropertyChangeListener(new PropertyChangeListener()
150     {
151       public void propertyChange(PropertyChangeEvent propertychangeevent)
152       {
153         if (propertychangeevent.getPropertyName().equals("locale"))
154         {
155           jCalendar2.setLocale((Locale) propertychangeevent.getNewValue());
156           DateFormat dateformat = DateFormat.getDateInstance(1, jCalendar2.getLocale());
157           jTextField2.setText(dateformat.format(calendarFin.getTime()));
158         }
159         else if (propertychangeevent.getPropertyName().equals("calendar"))
160         {
161           calendarFin = (Calendar) propertychangeevent.getNewValue();
162           DateFormat dateformat1 = DateFormat.getDateInstance(1, jCalendar2.getLocale());
163           jTextField2.setText(dateformat1.format(calendarFin.getTime()));
164           jCalendar2.setCalendar(calendarFin);
165         }
166       } 
167     });
168     
169     
170     this.getContentPane().add(jCalendar2, null);
171     this.getContentPane().add(jCalendar1, null);
172     this.getContentPane().add(jLabel5, null);
173     this.getContentPane().add(jButton2, null);
174     this.getContentPane().add(jButton1, null);
175     this.getContentPane().add(jTextField3, null);
176     this.getContentPane().add(jLabel4, null);
177     this.getContentPane().add(jTextField2, null);
178     this.getContentPane().add(jLabel3, null);
179     this.getContentPane().add(jTextField1, null);
180     this.getContentPane().add(jLabel2, null);
181     this.getContentPane().add(jLabel1, null);
182     this.getContentPane().add(jComboBox1, null);
183     lblNewLabel.setBounds(115, 301, 298, 38);
184     
185     getContentPane().add(lblNewLabel);
186   }
187
188   private void jButton1_actionPerformed(ActionEvent e)
189   {
190                 RuralHouse ruralHouse=((RuralHouse)jComboBox1.getSelectedItem());
191
192                 // The next instruction creates a java.sql.Date object from the date selected in the JCalendar object
193                 Date firstDay=new Date(jCalendar1.getCalendar().getTime().getTime());
194                 // The next instruction removes the hour, minute, second and ms from the date
195                 // This has to be made because the date will be stored in db4o as a java.util.Date object 
196                 // that would store those data, and that would give problems when comparing dates later
197                 firstDay=Date.valueOf(firstDay.toString());
198                 
199                 
200                 Date lastDay=new Date(jCalendar2.getCalendar().getTime().getTime());
201             //Remove the hour:minute:second:ms from the date 
202                 lastDay=Date.valueOf(lastDay.toString());
203                 
204                 
205                 try {
206
207                         //It could be to trigger an exception if the introduced string is not a number
208                         float price= Float.parseFloat(jTextField3.getText());
209
210                         //Obtain the business logic from a StartWindow class (local or remote)
211                         OfferManager offerM = new OfferManager();
212
213                         offerM.createOffer(ruralHouse, firstDay, lastDay, price); 
214
215                         jLabel5.setText("Offer created");
216
217                 } catch (java.lang.NumberFormatException e1) {
218                         jLabel5.setText(jTextField3.getText()+ " is not a valid price");
219                 } catch (OverlappingOfferExists e1) {
220                         jLabel5.setText("There exists an overlapping offer");
221                 }
222                 catch (BadDates e1) {
223                         jLabel5.setText("Last day is before first day in the offer");
224                 } catch (NullPointerException e1){
225                         jLabel5.setText("Bad dates or there exists an overlapping offer");
226                 } catch (Exception e1) {
227                 
228                         e1.printStackTrace();
229                 } 
230   }
231   private void jButton2_actionPerformed(ActionEvent e)
232   {
233     this.setVisible(false);
234   }
235   
236  private void jTextField3_focusLost()
237  {
238    try
239   {
240     new Integer (jTextField3.getText());
241     jLabel5.setText("");
242   }
243   catch (NumberFormatException ex)
244   {
245     jLabel5.setText("Error: Introduce a number");
246   }
247  }
248 }