1   package org.wcb.gui.forms;
2   
3   import org.wcb.model.vo.hibernate.AircraftBO;
4   import org.wcb.gui.table.model.AircraftSelectModel;
5   import org.wcb.gui.renderer.EditButtonTableCellEditor;
6   import org.wcb.gui.renderer.SelectButtonTableCellEditor;
7   import org.wcb.gui.renderer.DeleteButtonTableCellEditor;
8   import org.wcb.gui.dialog.AircraftTableDisplayDialog;
9   import org.wcb.gui.dialog.AircraftEditDialog;
10  import org.wcb.gui.component.WaveButton;
11  import org.wcb.gui.component.JXTitlePanel;
12  import org.wcb.gui.component.border.SearchFieldBorder;
13  import org.wcb.resources.MessageKey;
14  import org.wcb.resources.MessageResourceRegister;
15  import org.jdesktop.swingx.border.DropShadowBorder;
16  
17  import javax.swing.*;
18  import javax.swing.border.Border;
19  import javax.swing.border.CompoundBorder;
20  import java.awt.event.ActionListener;
21  import java.awt.event.ActionEvent;
22  import java.awt.event.KeyListener;
23  import java.awt.event.KeyEvent;
24  import java.awt.*;
25  
26  /**
27   * <small>
28   * Copyright (c)  2006  wbogaardt.
29   * This library is free software; you can redistribute it and/or
30   * modify it under the terms of the GNU Lesser General Public
31   * License as published by the Free Software Foundation; either
32   * version 2.1 of the License, or (at your option) any later version.
33   *
34   * This library is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
37   * Lesser General Public License for more details.
38   *
39   * You should have received a copy of the GNU Lesser General Public
40   * License along with this library; if not, write to the Free Software
41   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
42   * <p/>
43   * $File:  $ <br>
44   * $Change:  $ submitted by $Author: wbogaardt $ at $DateTime: Mar 28, 2006 8:32:37 AM $ <br>
45   * </small>
46   *
47   * @author wbogaardt
48   * @version 1
49   *          Date: Mar 28, 2006
50   *          Time: 8:32:37 AM
51   */
52  
53  public class AircraftTableDisplayForm extends JXTitlePanel implements ActionListener, KeyListener {
54  
55      // Variables declaration - do not modify
56      private JButton jButtonAddAircraft;
57      private JTable jTableAircraft;
58      private JTextField searchField;
59      private AircraftSelectModel tableModel;
60      private AircraftBO aircraft;
61      private AircraftTableDisplayDialog parentDialog;
62  
63      public AircraftTableDisplayForm(JDialog comp, boolean bDisplaySelect) {
64          super("Select an Aircraft", new Color(0x522aec));
65          Border shadow = new DropShadowBorder(Color.BLACK, 1, 5, .3f, 15, true, true, true, true);
66          setBorder(new CompoundBorder(shadow, getBorder()));
67          if (comp instanceof AircraftTableDisplayDialog)
68          {
69              parentDialog = (AircraftTableDisplayDialog) comp;
70          }
71          if(bDisplaySelect) {
72              tableModel = new AircraftSelectModel();
73              jTableAircraft = new JTable(tableModel);
74              new SelectButtonTableCellEditor(jTableAircraft, 0, this);
75              new EditButtonTableCellEditor(jTableAircraft, 3);
76              new DeleteButtonTableCellEditor(jTableAircraft, 4);
77          } else {
78              tableModel = new AircraftSelectModel(new String[] {"Registration", "Type", "",""});
79              jTableAircraft = new JTable(tableModel);
80              new EditButtonTableCellEditor(jTableAircraft, 2);
81              new DeleteButtonTableCellEditor(jTableAircraft, 3);
82          }
83          initComponents();
84      }
85  
86      private void initComponents() {
87          jButtonAddAircraft = new WaveButton(MessageResourceRegister.getInstance().getValue(MessageKey.BUTTON_ADD_AIRCRAFT));
88          searchField = new JTextField(20);
89          searchField.addKeyListener(this);
90          searchField.setBorder(new SearchFieldBorder());
91  
92          setLayout(new BorderLayout());
93  
94          JPanel jSearchPanel = new JPanel();
95          jSearchPanel.add(new JLabel(MessageResourceRegister.getInstance().getValue(MessageKey.LABEL_SEARCH_AIRCRAFT)));
96          jSearchPanel.add(searchField);
97          add(jSearchPanel, BorderLayout.NORTH);
98  
99          JScrollPane jScrollPane1 = new JScrollPane();
100         jScrollPane1.setBorder(BorderFactory.createTitledBorder("Aircrafts"));
101         jScrollPane1.setViewportView(jTableAircraft);
102 
103         add(jScrollPane1, BorderLayout.CENTER);
104 
105         JPanel jPanelSouth = new JPanel();
106         jPanelSouth.setLayout(new GridBagLayout());
107         GridBagConstraints gridBagConstraints = new GridBagConstraints();
108         gridBagConstraints.anchor = GridBagConstraints.EAST;
109         jPanelSouth.add(jButtonAddAircraft, gridBagConstraints);
110 
111         add(jPanelSouth, BorderLayout.SOUTH);
112         initListeners();
113     }
114 
115     private void initListeners() {
116         jButtonAddAircraft.addActionListener(this);
117     }
118 
119     public void refresh() {
120         tableModel.refreshModel();
121     }
122 
123     /**
124      * access to the selected row of the table.
125      * @return  The selected row.
126      */
127     public AircraftBO getSelectedRow() {
128         return aircraft;
129     }
130 
131     public void setSelectedRow(AircraftBO value) {
132         aircraft = value;
133         parentDialog.fireAircraftSelected();
134     }
135 
136     public void actionPerformed(ActionEvent evt) {
137         Object src = evt.getSource();
138         if (src.equals(jButtonAddAircraft))
139         {
140             AircraftEditDialog addAircraft = new AircraftEditDialog(this);
141             addAircraft.setVisible(true);
142         }
143     }
144 
145     private void search() {
146         String searchString = searchField.getText().toUpperCase();
147         if (searchString.length() > 0) {
148             for (int icount = 0; icount < tableModel.getRowCount(); icount++ ) {
149                 AircraftBO aircraft = tableModel.getItemAt(icount);
150                 if(aircraft.getRegistrationNumber().startsWith(searchString)) {
151                     jTableAircraft.setRowSelectionInterval(icount, icount);
152                     break;
153                 }
154             }
155         }
156     }
157 
158     public void keyTyped(KeyEvent kvt) {
159         this.search();
160     }
161 
162     public void keyPressed(KeyEvent evt) {
163         // this.search();
164     }
165 
166     public void keyReleased(KeyEvent evt) {
167         // this.search();
168     }
169 }