summaryrefslogtreecommitdiff
path: root/sources/client/inputforms/EditExistingEvent.java
blob: 6c65aeb248cb0d719ed9296b01aceea71e3fc328 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package client.inputforms;

import java.awt.event.*;
import java.util.*;

import javax.swing.*;

import client.NetCalendarClient;
import client.ServerRequester;
import client.helper.DateSpinner;
import client.helper.GUIHelper;


import shared.*;
import shared.remotecall.*;

/**
 * This class contains all the GUI components of the edit event dialog.
 * Its used for editing existing events of the calendar database.
 * @author buetow
 *
 */
public class EditExistingEvent extends InputForm {
  private final static long serialVersionUID = 1L;

  // Static elements which are the same on all AdvancedSearching objects!
  private final static String BUTTON_DELETE = "Delete";
  private final static String[] labels =
    { "Event ID: ", "Description: ", "Category: ", "Place: ", "Yearly: ", "Date: "};
  private final static int iNumPairs = labels.length;
  private final static int iTextFields = iNumPairs - 2;
  private final static int iCheckBoxes = iNumPairs - 1;

  private CalendarEvent originalCalendarEvent;
  private Date date;

  /**
   * Create the input form window and show it.
   * @param netCalendarClient Specifies the current calendar client session window.
   * @param originalCalendarEvent Specifies the calendar event to modify.
   */
  public EditExistingEvent(NetCalendarClient netCalendarClient, CalendarEvent originalCalendarEvent) {
    super("Edit event", netCalendarClient);
    this.originalCalendarEvent = originalCalendarEvent;
    this.date = originalCalendarEvent.getDate();
    initComponents();
    setFieldValues();
    pack();
    setVisible(true);
  }

  /**
   * Initializes all the GUI components.
   */
  protected void initComponents() {
    super.initComponents();

    JPanel jPanel = new JPanel(new SpringLayout());

    ActionListener actionListenerTextFields = new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        submit();
      }
    };

    vecFields = new Vector();
    for (int i = 0; i < iNumPairs; ++i) {
      JLabel jLable = new JLabel(labels[i], JLabel.TRAILING);
      jPanel.add(jLable);
      JComponent jComponent = null;
      if ( i < iTextFields) {
        JTextField textField = new JTextField(InputForm.TEXTFIELD_LENGTH);
        textField.addActionListener(actionListenerTextFields);
        jComponent = textField;

      } else if (i < iCheckBoxes) {
        jComponent = new JCheckBox();

      } else {
        jComponent = new DateSpinner(date);
      }

      jLable.setLabelFor(jComponent);
      jPanel.add(jComponent);
      vecFields.add(jComponent);
    }

    //Lay out the panel.
    GUIHelper.makeCompactGrid(jPanel,
                              iNumPairs, 2, 	// iRows, iCols
                              6, 6,        	// iInitX, iInitY
                              6, 6);       	// iXPad, iYPad

    JButton jButtonDelete = new JButton(BUTTON_DELETE);

    ActionListener actionListenerButtons = new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        if (event.getActionCommand().equals(BUTTON_CLEAR)) {
          for (int i = 1; i < iNumPairs -2; ++i)
            ((JTextField) vecFields.get(i)).setText("");

        } else if (event.getActionCommand().equals(BUTTON_DELETE)) {
          netCalendarClient.deleteEvent(originalCalendarEvent);
          dispose();
        }
      }
    };

    jButtonDelete.addActionListener(actionListenerButtons);
    jButtonClear.addActionListener(actionListenerButtons);
    jPanelButtons.add(jButtonDelete);

    JSplitPane jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    jSplitPane.setTopComponent(jPanel);
    jSplitPane.setBottomComponent(jPanelButtons);
    jSplitPane.setDividerSize(0);

    setContentPane(jSplitPane);
  }

  /**
   * This method sets the fields of the edit frame according to the originalCalendarEvent object.
   * The date is not set by this method. Its done by the initComponents method.
   */
  private void setFieldValues() {
    JTextField jTextFieldEventID = (JTextField) vecFields.get(0);
    jTextFieldEventID.setText(""+originalCalendarEvent.getEventID());
    jTextFieldEventID.setEditable(false);

    ((JTextField) vecFields.get(1)).setText(originalCalendarEvent.getDescription());
    ((JTextField) vecFields.get(2)).setText(originalCalendarEvent.getCategoryName());
    ((JTextField) vecFields.get(3)).setText(originalCalendarEvent.getPlace());
    ((JCheckBox) vecFields.get(4)).setSelected(originalCalendarEvent.isYearly());
  }

  /**
   * This method is invoked if the enter key is pressed or if the submit button
   * has been pressed. It starts a client request relating to the user's input of
   * the text fields.
   */
  protected void submit() {
    String sCategoryName = ((JTextField) vecFields.get(2)).getText();
    CalendarEvent calendarEvent = new CalendarEvent(sCategoryName);
    calendarEvent.setDescription(((JTextField) vecFields.get(1)).getText());
    calendarEvent.setPlace(((JTextField) vecFields.get(3)).getText());
    calendarEvent.setYearly(((JCheckBox) vecFields.get(4)).isSelected());
    calendarEvent.setDate(((DateSpinner) vecFields.get(5)).getDate());
    calendarEvent.setEventID(originalCalendarEvent.getEventID());

    ClientRequest clientRequest = new ClientRequest(ClientRequest.MODIFY_EVENT);
    clientRequest.setEvent(calendarEvent);

    ServerRequester.sendClientRequest(clientRequest);
    netCalendarClient.updateLast();
  }
}