1   package org.wcb.gui.renderer;
2   
3   import org.wcb.resources.MessageResourceRegister;
4   import org.wcb.resources.MessageKey;
5   import org.wcb.model.vo.hibernate.Logbook;
6   import org.wcb.model.vo.hibernate.AircraftBO;
7   import org.wcb.model.vo.hibernate.AirportBO;
8   import org.wcb.model.vo.TotalLogEntriesVO;
9   import org.wcb.model.bd.LogbookDelegate;
10  import org.wcb.model.bd.AircraftDelegate;
11  import org.wcb.model.bd.AirportDelegate;
12  import org.wcb.model.util.SpringUtil;
13  import org.wcb.model.service.IServicesConstants;
14  import org.wcb.gui.table.model.AircraftSelectModel;
15  import org.wcb.gui.table.model.LogbookTableModel;
16  import org.wcb.gui.table.model.AirportModel;
17  
18  import javax.swing.*;
19  import javax.swing.table.TableCellRenderer;
20  import javax.swing.table.TableCellEditor;
21  import javax.swing.table.TableColumnModel;
22  import javax.swing.table.TableModel;
23  import java.awt.event.ActionListener;
24  import java.awt.event.ActionEvent;
25  import java.awt.*;
26  import java.net.URL;
27  import java.text.SimpleDateFormat;
28  
29  /**
30   * <small>
31   * Copyright (c)  2006  wbogaardt.
32   * This library is free software; you can redistribute it and/or
33   * modify it under the terms of the GNU Lesser General Public
34   * License as published by the Free Software Foundation; either
35   * version 2.1 of the License, or (at your option) any later version.
36   *
37   * This library is distributed in the hope that it will be useful,
38   * but WITHOUT ANY WARRANTY; without even the implied warranty of
39   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
40   * Lesser General Public License for more details.
41   *
42   * You should have received a copy of the GNU Lesser General Public
43   * License along with this library; if not, write to the Free Software
44   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
45   * <p/>
46   * $File:  $ <br>
47   * $Change:  $ submitted by $Author: wbogaardt $ at $DateTime: Mar 30, 2006 10:27:43 AM $ <br>
48   * </small>
49   *
50   * @author wbogaardt
51   * @version 1
52   *          Date: Mar 30, 2006
53   *          Time: 10:27:43 AM
54   */
55  
56  public class DeleteButtonTableCellEditor extends AbstractCellEditor
57          implements TableCellRenderer, TableCellEditor, ActionListener
58  {
59      private JButton renderButton;
60      private JButton deleteButton;
61      private Object tableObject;
62      private TableModel model;
63      private int selectedRow;
64      private JLabel blankLabel = new JLabel("");
65  
66      public DeleteButtonTableCellEditor(JTable table, int column)
67      {
68          super();
69          URL rptImageURL = DeleteButtonTableCellEditor.class.getClassLoader().getResource("org/wcb/resources/gui/delete.png");
70          ImageIcon deleteIcon = new ImageIcon(rptImageURL);
71          renderButton = new JButton(deleteIcon);
72          renderButton.setToolTipText(MessageResourceRegister.getInstance().getValue(MessageKey.BUTTON_DELETE));
73          deleteButton = new JButton(deleteIcon);
74          deleteButton.setToolTipText(MessageResourceRegister.getInstance().getValue(MessageKey.BUTTON_DELETE));
75          deleteButton.setFocusPainted(false);
76          deleteButton.addActionListener(this);
77          TableColumnModel columnModel = table.getColumnModel();
78          model = table.getModel();
79          columnModel.getColumn(column).setCellRenderer(this);
80          columnModel.getColumn(column).setCellEditor(this);
81          columnModel.getColumn(column).setMaxWidth(25);
82          table.setRowHeight(20);
83      }
84  
85      public Component getTableCellRendererComponent(
86              JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
87      {
88          if(value instanceof TotalLogEntriesVO)
89          {
90              blankLabel.setBackground(new Color(0x000a5a));
91              return blankLabel;
92          }
93          if (hasFocus)
94          {
95              renderButton.setForeground(table.getForeground());
96              renderButton.setBackground(UIManager.getColor("Button.background"));
97          }
98          else if (isSelected)
99          {
100             renderButton.setForeground(table.getSelectionForeground());
101             renderButton.setBackground(table.getSelectionBackground());
102         }
103         else
104         {
105             renderButton.setForeground(table.getForeground());
106             renderButton.setBackground(UIManager.getColor("Button.background"));
107         }
108         return renderButton;
109     }
110 
111     public Component getTableCellEditorComponent(
112             JTable table, Object value, boolean isSelected, int row, int column)
113     {
114         if(value instanceof TotalLogEntriesVO) {
115             tableObject = "";
116             blankLabel.setBackground(new Color(0x000a5a));
117             return blankLabel;
118         }
119         tableObject = value;
120         selectedRow = row;
121         return deleteButton;
122     }
123 
124     public Object getCellEditorValue()
125     {
126         return tableObject;
127     }
128 
129     public void actionPerformed(ActionEvent e)
130     {
131         fireEditingStopped();
132         if (tableObject instanceof Logbook)
133         {
134             deleteLogbookEntry();
135         }
136         if (tableObject instanceof AircraftBO)
137         {
138             confirmDeleteAircraftEntry();
139         }
140         if (tableObject instanceof AirportBO)
141         {
142             confirmDeleteAirportEntry();
143         }
144     }
145 
146     private void confirmDeleteAirportEntry() {
147         AirportBO itemSelected = (AirportBO) tableObject;
148         int optionselected = JOptionPane.showConfirmDialog(null,"Do you want to delete the airport " + itemSelected.getFaa() + "? \n It does not cause any reporting problems.", "Confirm Delete", JOptionPane.YES_NO_OPTION);
149         if (optionselected == JOptionPane.YES_OPTION) {
150             AirportDelegate delegate = (AirportDelegate) SpringUtil.getApplicationContext().getBean(IServicesConstants.AIRPORT_DELEGATE);
151             boolean success = delegate.deleteAirport(itemSelected);
152             if (success) {
153                 ((AirportModel)model).removeRow(selectedRow);
154             }
155         }
156     }
157 
158     private void confirmDeleteAircraftEntry() {
159         AircraftBO itemSelected = (AircraftBO) tableObject;
160         LogbookDelegate logDelegate = new LogbookDelegate();
161         if (logDelegate.isAirplaneInLogbook(itemSelected.getRegistrationNumber())) {
162             int optionselected = JOptionPane.showConfirmDialog(null, "Do you want to delete " + itemSelected.getRegistrationNumber() + "? \n This may cause issues on reports, such as the FAA 8710,\n because aircraft deleted are defaulted to AIRPLANE types.", "Confirm Delete", JOptionPane.YES_NO_OPTION);
163             if (optionselected == JOptionPane.YES_OPTION) {
164                 AircraftDelegate delegate = (AircraftDelegate) SpringUtil.getApplicationContext().getBean(IServicesConstants.AIRCRAFT_DELEGATE);
165                 boolean success = delegate.deleteAircraft(itemSelected);
166                 if (success) {
167                     ((AircraftSelectModel)model).removeRow(selectedRow);
168                 }
169             }
170         } else  {
171             AircraftDelegate delegate = (AircraftDelegate) SpringUtil.getApplicationContext().getBean(IServicesConstants.AIRCRAFT_DELEGATE);
172             boolean success = delegate.deleteAircraft(itemSelected);
173             if (success) {
174                 ((AircraftSelectModel)model).removeRow(selectedRow);
175             }
176         }
177     }
178 
179     private void deleteLogbookEntry() {
180         Logbook itemSelected = (Logbook) tableObject;
181         SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy");
182         int optionselected = JOptionPane.showConfirmDialog(null, "Do you want to delete the entry \nfor the date " + formatter.format(itemSelected.getEntryDate()) + "?", "Confirm Delete", JOptionPane.YES_NO_OPTION);
183         if (optionselected == JOptionPane.YES_OPTION) {
184             LogbookDelegate delegate = new LogbookDelegate();
185             boolean success = delegate.deleteLogEntry(itemSelected);
186             if (success) {
187                 ((LogbookTableModel)model).removeRow(selectedRow);
188             }
189         }
190     }
191 }