/Users/johnr/Desktop/IA_14_-_Stage_P_Upload_all_2021-04-08/IBCompSciInternalAssessment Lara April 6th/src/ibcompsciinternalassessment/TableOfRequests.java
  1 /*
  2  * To change this license header, choose License Headers in Project Properties.
  3  * To change this template file, choose Tools | Templates
  4  * and open the template in the editor.
  5  */
  6 package ibcompsciinternalassessment;
  7 
  8 import java.io.IOException;
  9 import java.util.ArrayList;
 10 import java.util.logging.Level;
 11 import java.util.logging.Logger;
 12 
 13 /**
 14  *
 15  * @author 21258
 16  */
 17 public class TableOfRequests extends javax.swing.JFrame {
 18 
 19     /**
 20      * Creates new form TableOfRequests
 21      */
 22     private ArrayList <Contribution> contributions;
 23     private Contribution[] recommendationList = new Contribution[3];
 24     private final ExportData exporter = new ExportData();
 25     private final SortingSearchingComplex s = new SortingSearchingComplex();
 26     
 27     public TableOfRequests() {
 28         initComponents();
 29         sortErrorMsg.setVisible(false);
 30         searchErrorMsg.setVisible(false);
 31         sortingButtonGroup.add(sortNameButton);
 32         sortingButtonGroup.add(sortGeoButton);
 33         sortingButtonGroup.add(sortAmountButton);
 34         searchNotFound.setVisible(false);
 35     }
 36 
 37     /**
 38      * This method is called from within the constructor to initialize the form.
 39      * WARNING: Do NOT modify this code. The content of this method is always
 40      * regenerated by the Form Editor.
 41      */
 42     @SuppressWarnings("unchecked")
 43     // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
 44     private void initComponents() {
 45 
 46         sortingButtonGroup = new javax.swing.ButtonGroup();
 47         jScrollPane1 = new javax.swing.JScrollPane();
 48         contributionTable = new javax.swing.JTable();
 49         refreshButton = new javax.swing.JButton();
 50         sortButton = new javax.swing.JButton();
 51         jScrollPane2 = new javax.swing.JScrollPane();
 52         recommendedTable = new javax.swing.JTable();
 53         jLabel1 = new javax.swing.JLabel();
 54         jLabel2 = new javax.swing.JLabel();
 55         ExportButton = new javax.swing.JButton();
 56         sortNameButton = new javax.swing.JRadioButton();
 57         sortAmountButton = new javax.swing.JRadioButton();
 58         sortGeoButton = new javax.swing.JRadioButton();
 59         CloseTableButton = new javax.swing.JButton();
 60         sortErrorMsg = new javax.swing.JLabel();
 61         searchKeyTF = new javax.swing.JTextField();
 62         nameSearchButton = new javax.swing.JButton();
 63         countrySearchButton = new javax.swing.JButton();
 64         jSeparator1 = new javax.swing.JSeparator();
 65         jSeparator2 = new javax.swing.JSeparator();
 66         searchErrorMsg = new javax.swing.JLabel();
 67         searchNotFound = new javax.swing.JLabel();
 68         saveChangeButton = new javax.swing.JButton();
 69 
 70         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 71 
 72         contributionTable.setModel(new javax.swing.table.DefaultTableModel(
 73             new Object [][] {
 74                 {null, null, null, null, null, null,  new Boolean(false), null, null, null, null, null, null, null},
 75                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 76                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 77                 {null, null, null, null, null, null,  new Boolean(false), null, null, null, null, null, null, null},
 78                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 79                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 80                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 81                 {null, null, null, null, null, null,  new Boolean(false), null, null, null, null, null, null, null},
 82                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 83                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 84                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 85                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 86                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 87                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 88                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 89                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 90                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 91                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 92                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 93                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 94                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 95                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 96                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 97                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 98                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
 99                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
100                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
101                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
102                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
103                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
104                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
105                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
106                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
107                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
108                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
109                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
110                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
111                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
112                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
113                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null}
114             },
115             new String [] {
116                 "Name", "Amount", "Due Diligence", "DD Comments", "Budget year", "Budget Comments", "Retroactivity", "Retro. Comments", "Geo Interest", "Geo comments", "Thematic Interest", "Reporting", "Visibility", "Other"
117             }
118         ) {
119             Class[] types = new Class [] {
120                 java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
121             };
122 
123             public Class getColumnClass(int columnIndex) {
124                 return types [columnIndex];
125             }
126         });
127         contributionTable.setGridColor(new java.awt.Color(0, 0, 0));
128         contributionTable.setShowGrid(true);
129         jScrollPane1.setViewportView(contributionTable);
130 
131         refreshButton.setFont(new java.awt.Font("Malayalam MN", 0, 18)); // NOI18N
132         refreshButton.setText("Refresh");
133         refreshButton.addMouseListener(new java.awt.event.MouseAdapter() {
134             public void mouseReleased(java.awt.event.MouseEvent evt) {
135                 refreshButtonMouseReleased(evt);
136             }
137         });
138 
139         sortButton.setText("Sort");
140         sortButton.addMouseListener(new java.awt.event.MouseAdapter() {
141             public void mouseReleased(java.awt.event.MouseEvent evt) {
142                 sortButtonMouseReleased(evt);
143             }
144         });
145 
146         recommendedTable.setBorder(javax.swing.BorderFactory.createEtchedBorder());
147         recommendedTable.setModel(new javax.swing.table.DefaultTableModel(
148             new Object [][] {
149                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
150                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
151                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null},
152                 {null, null, null, null, null, null, null, null, null, null, null, null, null, null}
153             },
154             new String [] {
155                 "Name", "Amount", "Due Diligence", "DD Comments", "Budget", "Budget Comments", "Retroactivity", "Retro. Comments", "Geo Interest", "Geo Comments", "Thematic Interest", "Reporting", "Visibilty", "Other"
156             }
157         ) {
158             Class[] types = new Class [] {
159                 java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
160             };
161 
162             public Class getColumnClass(int columnIndex) {
163                 return types [columnIndex];
164             }
165         });
166         recommendedTable.setGridColor(new java.awt.Color(51, 51, 51));
167         recommendedTable.setShowGrid(true);
168         jScrollPane2.setViewportView(recommendedTable);
169 
170         jLabel1.setFont(new java.awt.Font("Malayalam MN", 1, 18)); // NOI18N
171         jLabel1.setText("Recommended Contributions");
172 
173         jLabel2.setFont(new java.awt.Font("Malayalam MN", 1, 36)); // NOI18N
174         jLabel2.setText("All Contributions");
175 
176         ExportButton.setFont(new java.awt.Font("Lao MN", 0, 24)); // NOI18N
177         ExportButton.setText("Export to Excel");
178         ExportButton.addMouseListener(new java.awt.event.MouseAdapter() {
179             public void mouseReleased(java.awt.event.MouseEvent evt) {
180                 ExportButtonMouseReleased(evt);
181             }
182         });
183 
184         sortNameButton.setText("by name of donor");
185 
186         sortAmountButton.setText("by amount estimated");
187 
188         sortGeoButton.setText("by geographical interest");
189 
190         CloseTableButton.setText("X close");
191         CloseTableButton.addMouseListener(new java.awt.event.MouseAdapter() {
192             public void mouseReleased(java.awt.event.MouseEvent evt) {
193                 CloseTableButtonMouseReleased(evt);
194             }
195         });
196 
197         sortErrorMsg.setForeground(new java.awt.Color(255, 0, 0));
198         sortErrorMsg.setText("*please select a sort method");
199 
200         nameSearchButton.setText("Search for name");
201         nameSearchButton.addMouseListener(new java.awt.event.MouseAdapter() {
202             public void mouseReleased(java.awt.event.MouseEvent evt) {
203                 nameSearchButtonMouseReleased(evt);
204             }
205         });
206 
207         countrySearchButton.setText("Search for country");
208         countrySearchButton.addMouseListener(new java.awt.event.MouseAdapter() {
209             public void mouseReleased(java.awt.event.MouseEvent evt) {
210                 countrySearchButtonMouseReleased(evt);
211             }
212         });
213 
214         jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
215 
216         jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL);
217 
218         searchErrorMsg.setForeground(new java.awt.Color(255, 0, 0));
219         searchErrorMsg.setText("*please enter the key term you are searching for");
220 
221         searchNotFound.setFont(new java.awt.Font("Lucida Grande", 0, 14)); // NOI18N
222         searchNotFound.setForeground(new java.awt.Color(255, 0, 0));
223         searchNotFound.setText("CONTRIBUTION NOT FOUND");
224 
225         saveChangeButton.setBackground(new java.awt.Color(204, 255, 255));
226         saveChangeButton.setFont(new java.awt.Font("Malayalam MN", 0, 18)); // NOI18N
227         saveChangeButton.setText("Save Changes");
228         saveChangeButton.addMouseListener(new java.awt.event.MouseAdapter() {
229             public void mouseReleased(java.awt.event.MouseEvent evt) {
230                 saveChangeButtonMouseReleased(evt);
231             }
232         });
233 
234         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
235         getContentPane().setLayout(layout);
236         layout.setHorizontalGroup(
237             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
238             .addGroup(layout.createSequentialGroup()
239                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
240                     .addGroup(layout.createSequentialGroup()
241                         .addGap(16, 16, 16)
242                         .addComponent(saveChangeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE))
243                     .addGroup(layout.createSequentialGroup()
244                         .addGap(30, 30, 30)
245                         .addComponent(refreshButton)))
246                 .addGap(18, 18, 18)
247                 .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
248                 .addGap(44, 44, 44)
249                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
250                     .addComponent(countrySearchButton)
251                     .addComponent(nameSearchButton, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE))
252                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
253                     .addGroup(layout.createSequentialGroup()
254                         .addGap(3, 3, 3)
255                         .addComponent(searchErrorMsg))
256                     .addGroup(layout.createSequentialGroup()
257                         .addGap(33, 33, 33)
258                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
259                             .addComponent(searchNotFound, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE)
260                             .addComponent(searchKeyTF, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE))))
261                 .addGap(40, 40, 40)
262                 .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
263                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
264                     .addGroup(layout.createSequentialGroup()
265                         .addGap(34, 34, 34)
266                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
267                             .addGroup(layout.createSequentialGroup()
268                                 .addGap(138, 138, 138)
269                                 .addComponent(sortGeoButton)
270                                 .addGap(405, 405, 405))
271                             .addGroup(layout.createSequentialGroup()
272                                 .addComponent(sortButton)
273                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
274                                 .addComponent(sortNameButton)
275                                 .addGap(18, 18, 18)
276                                 .addComponent(sortAmountButton)
277                                 .addGap(295, 295, 295))))
278                     .addGroup(layout.createSequentialGroup()
279                         .addGap(156, 156, 156)
280                         .addComponent(sortErrorMsg)
281                         .addGap(0, 0, Short.MAX_VALUE))))
282             .addGroup(layout.createSequentialGroup()
283                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
284                     .addGroup(layout.createSequentialGroup()
285                         .addGap(18, 18, 18)
286                         .addComponent(jLabel1))
287                     .addGroup(layout.createSequentialGroup()
288                         .addContainerGap()
289                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290                             .addGroup(layout.createSequentialGroup()
291                                 .addComponent(CloseTableButton)
292                                 .addGap(348, 348, 348)
293                                 .addComponent(jLabel2)
294                                 .addGap(77, 77, 77)
295                                 .addComponent(ExportButton, javax.swing.GroupLayout.PREFERRED_SIZE, 192, javax.swing.GroupLayout.PREFERRED_SIZE))
296                             .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
297                                 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1431, Short.MAX_VALUE)
298                                 .addComponent(jScrollPane2)))))
299                 .addGap(0, 0, Short.MAX_VALUE))
300         );
301         layout.setVerticalGroup(
302             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
303             .addGroup(layout.createSequentialGroup()
304                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
305                     .addGroup(layout.createSequentialGroup()
306                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
307                             .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
308                                 .addContainerGap()
309                                 .addComponent(CloseTableButton)
310                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
311                             .addGroup(layout.createSequentialGroup()
312                                 .addGap(16, 16, 16)
313                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
314                                     .addComponent(ExportButton)
315                                     .addComponent(jLabel2))
316                                 .addGap(28, 28, 28)))
317                         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 404, javax.swing.GroupLayout.PREFERRED_SIZE)
318                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
319                             .addGroup(layout.createSequentialGroup()
320                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
321                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
322                                     .addGroup(layout.createSequentialGroup()
323                                         .addComponent(jSeparator2)
324                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
325                                     .addGroup(layout.createSequentialGroup()
326                                         .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE)
327                                         .addGap(0, 0, Short.MAX_VALUE))
328                                     .addGroup(layout.createSequentialGroup()
329                                         .addGap(14, 14, 14)
330                                         .addComponent(refreshButton, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
331                                         .addGap(18, 18, 18)
332                                         .addComponent(saveChangeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
333                                         .addGap(38, 38, 38))))
334                             .addGroup(layout.createSequentialGroup()
335                                 .addGap(23, 23, 23)
336                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
337                                     .addGroup(layout.createSequentialGroup()
338                                         .addGap(12, 12, 12)
339                                         .addComponent(searchKeyTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
340                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
341                                         .addComponent(searchNotFound, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
342                                         .addGap(19, 19, 19)
343                                         .addComponent(searchErrorMsg))
344                                     .addGroup(layout.createSequentialGroup()
345                                         .addComponent(countrySearchButton)
346                                         .addGap(18, 18, 18)
347                                         .addComponent(nameSearchButton)))
348                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
349                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
350                         .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
351                         .addComponent(sortErrorMsg)
352                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
353                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
354                             .addComponent(sortButton)
355                             .addComponent(sortNameButton)
356                             .addComponent(sortAmountButton))
357                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
358                         .addComponent(sortGeoButton)
359                         .addGap(43, 43, 43)))
360                 .addComponent(jLabel1)
361                 .addGap(8, 8, 8)
362                 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE)
363                 .addGap(14, 14, 14))
364         );
365 
366         pack();
367     }// </editor-fold>                        
368 
369     private void refreshButtonMouseReleased(java.awt.event.MouseEvent evt) {                                            
370         // refresh the table and show all the contributions in the table:
371         refreshTime();
372         //more complex recommendation based sort
373         
374         System.out.println("starting complex sort");
375         recommendationList = s.ComplexSortRecs(contributions);
376         
377         System.out.println("ending complex sort" + recommendationList[0].getDonorName());
378         for (int i = 0; i<recommendationList.length;i++) {
379             if(!recommendationList[i].isEmpty())
380                 System.out.println(recommendationList[i].getDonorName() + "");
381             else
382                 System.out.println("the array was empty");
383         }
384         refreshSmallList();
385         sortErrorMsg.setVisible(false);
386         searchNotFound.setVisible(false);
387         searchErrorMsg.setVisible(false);
388         
389     }                                           
390 
391     private void sortButtonMouseReleased(java.awt.event.MouseEvent evt) {                                         
392         
393         sortErrorMsg.setVisible(false);
394         if(sortNameButton.isSelected()){            //donor name alphabetical sort
395             s.sortByName(contributions);
396         }
397         else if(sortAmountButton.isSelected()){     //sort amount estimated largest to smallest
398             s.sortByAmount(contributions);
399         }
400         else if(sortGeoButton.isSelected()){        //alphabetical sort of countries with non-earmarked contr. at the end
401             s.sortByCountry(contributions, Contribution.getNumberOfNonEarmarkedForms());
402         }
403         else
404             sortErrorMsg.setVisible(true);
405         
406         refreshTime();
407         sortNameButton.setSelected(false);
408         sortGeoButton.setSelected(false);
409         sortAmountButton.setSelected(false);
410         
411         // TODO add your handling code here:
412     }                                        
413 
414     private void CloseTableButtonMouseReleased(java.awt.event.MouseEvent evt) {                                               
415         setVisible(false);
416     }                                              
417 
418     private void countrySearchButtonMouseReleased(java.awt.event.MouseEvent evt) {                                                  
419         int index = -9;
420         if(searchKeyTF.getText().equals(""))
421             searchErrorMsg.setVisible(true);
422         else{
423             searchErrorMsg.setVisible(false);
424             s.sortByCountry(contributions, Contribution.getNumberOfNonEarmarkedForms());
425             index = s.searchByCountry(contributions, Contribution.getNumberOfNonEarmarkedForms(), searchKeyTF.getText());
426             afterSearchShowingAndHidingList(index);
427             searchKeyTF.setText("");
428 
429         }
430         
431     }                                                 
432 
433     private void nameSearchButtonMouseReleased(java.awt.event.MouseEvent evt) {                                               
434         int index = -9;
435         if(searchKeyTF.getText().equals(""))
436             searchErrorMsg.setVisible(true);
437         else{
438             searchErrorMsg.setVisible(false);
439             s.sortByName(contributions);
440             index = s.searchByName(contributions, searchKeyTF.getText());
441             afterSearchShowingAndHidingList(index);
442             searchKeyTF.setText("");
443         }
444         System.out.println("index is"+index);
445         
446             
447     }                                              
448 
449     private void saveChangeButtonMouseReleased(java.awt.event.MouseEvent evt) {                                               
450         Contribution newCont;
451         int count = 0;
452         for(int row = 0; row < contributions.size(); row++){
453             
454             if(contributionTable.getValueAt(row, 8).equals("non-earmarked contribution")){
455                 newCont = new NonEarmarkedContribution();
456                 System.out.println("non-earmarked contrib save");
457             }
458             else{
459                 newCont = new EarmarkedContribution();
460                 System.out.println("earmarked contrib save");
461             }
462             
463             
464             newCont.setDonorName(contributionTable.getModel().getValueAt(row, 0)+"");
465             newCont.setAmountEstimated(contributionTable.getModel().getValueAt(row, 1)+"");
466             
467             DateSelfMade datePlaceholder = new DateSelfMade(contributionTable.getModel().getValueAt(row, 2)+""); 
468             newCont.setDueDiligence(datePlaceholder);
469             
470             newCont.setdDComments(contributionTable.getModel().getValueAt(row, 3)+"");
471             
472             datePlaceholder.setYearRange(contributionTable.getModel().getValueAt(row, 4)+"");
473             newCont.setBudgetYear(datePlaceholder);
474             
475             newCont.setbYComments(contributionTable.getModel().getValueAt(row, 5)+"");
476             
477             boolean retroActive = (Boolean)contributionTable.getValueAt(row, 6);
478             newCont.setIsRetroactivityAccepted(retroActive);
479             
480             newCont.setRetroComments(contributionTable.getModel().getValueAt(row, 7)+"");
481             
482             newCont.setGeoInterestName(contributionTable.getModel().getValueAt(row, 8)+"");
483             
484             newCont.setGeoComments(contributionTable.getModel().getValueAt(row, 9)+"");
485             
486             newCont.setThematicInterest(contributionTable.getModel().getValueAt(row, 10)+"");
487             
488             newCont.setReportingRequirements(contributionTable.getModel().getValueAt(row, 11)+"");
489             
490             newCont.setVisibilityRequirements(contributionTable.getModel().getValueAt(row, 11)+"");
491             
492             newCont.setOtherComments(contributionTable.getModel().getValueAt(row, 13)+"");
493             
494             contributions.set(count, newCont);
495             count++;
496         }
497         refreshTime();
498         
499     }                                              
500 
501     private void ExportButtonMouseReleased(java.awt.event.MouseEvent evt) {                                           
502         try {
503             exporter.exportToExcel(contributions);
504         } catch (IOException ex) {
505             Logger.getLogger(TableOfRequests.class.getName()).log(Level.SEVERE, null, ex);
506             System.out.println("fatal error with the exporter");
507         }
508     }                                          
509 
510     public void receiveContributions(ArrayList <Contribution> contributions){
511         this.contributions = contributions;
512     }
513     
514     
515     private void refreshSmallList(){        //shows the items in recommendation table
516         for(int i = 0; i<3;i++){
517             if(!recommendationList[i].getDonorName().equals("N/A")){
518                 recommendedTable.setValueAt(recommendationList[i].getDonorName(), i, 0);
519                 recommendedTable.setValueAt(recommendationList[i].getAmountEstimated(), i, 1);
520                 recommendedTable.setValueAt(recommendationList[i].getDueDiligence(),i , 2);
521                 recommendedTable.setValueAt(recommendationList[i].getdDComments(), i, 3);
522                 recommendedTable.setValueAt(recommendationList[i].getBudgetYear(), i, 4);
523                 recommendedTable.setValueAt(recommendationList[i].getbYComments(), i, 5);
524                 recommendedTable.setValueAt(recommendationList[i].isIsRetroactivityAccepted(), i, 6);
525                 recommendedTable.setValueAt(recommendationList[i].getRetroComments(), i, 7);
526                 recommendedTable.setValueAt(recommendationList[i].getGeoInterestName(), i, 8);
527                 recommendedTable.setValueAt(recommendationList[i].getGeoComments(), i, 9);
528                 recommendedTable.setValueAt(recommendationList[i].getThematicInterest(), i, 10);
529                 recommendedTable.setValueAt(recommendationList[i].getReportingRequirements(), i, 11);
530                 recommendedTable.setValueAt(recommendationList[i].getVisibilityRequirements(), i, 12);
531                 recommendedTable.setValueAt(recommendationList[i].getOtherComments(), i, 13);
532             }
533         }
534     }
535     
536     private void afterSearchShowingAndHidingList(int index){   //after a search this method hides all items other than the requested one
537         if(index>-1){
538             searchNotFound.setVisible(false);
539             contributionTable.setValueAt(contributions.get(index).getDonorName(), 0, 0);
540             contributionTable.setValueAt(contributions.get(index).getAmountEstimated(), 0, 1);
541             contributionTable.setValueAt(contributions.get(index).getDueDiligence(), 0, 2);
542             contributionTable.setValueAt(contributions.get(index).getdDComments(), 0, 3);
543             contributionTable.setValueAt(contributions.get(index).getBudgetYear(), 0, 4);
544             contributionTable.setValueAt(contributions.get(index).getbYComments(), 0, 5);
545             contributionTable.setValueAt(contributions.get(index).isIsRetroactivityAccepted(), 0, 6);
546             contributionTable.setValueAt(contributions.get(index).getRetroComments(), 0, 7);
547             contributionTable.setValueAt(contributions.get(index).getGeoInterestName(), 0, 8);
548             contributionTable.setValueAt(contributions.get(index).getGeoComments(), 0, 9);
549             contributionTable.setValueAt(contributions.get(index).getThematicInterest(), 0, 10);
550             contributionTable.setValueAt(contributions.get(index).getReportingRequirements(), 0, 11);
551             contributionTable.setValueAt(contributions.get(index).getVisibilityRequirements(), 0, 12);
552             contributionTable.setValueAt(contributions.get(index).getOtherComments(), 0, 13);
553             
554             for(int row = 1; row < contributions.size(); row++){
555                 contributionTable.setValueAt("", row, 0);
556                 contributionTable.setValueAt("", row, 1);
557                 contributionTable.setValueAt("", row, 2);
558                 contributionTable.setValueAt("", row, 3);
559                 contributionTable.setValueAt("", row, 4);
560                 contributionTable.setValueAt("", row, 5);
561                 contributionTable.setValueAt(false, row, 6);
562                 contributionTable.setValueAt("", row, 7);
563                 contributionTable.setValueAt("", row, 8);
564                 contributionTable.setValueAt("", row, 9);
565                 contributionTable.setValueAt("", row, 10);
566                 contributionTable.setValueAt("", row, 11);
567                 contributionTable.setValueAt("", row, 12);
568                 contributionTable.setValueAt("", row, 13);
569 
570             }
571         }
572         else
573             searchNotFound.setVisible(true);
574             
575     }
576     
577     private void refreshTime(){     //updates all elements in the main table
578         for(int row = 0; row < contributions.size(); row++){
579             contributionTable.setValueAt(contributions.get(row).getDonorName(), row, 0);
580             contributionTable.setValueAt(contributions.get(row).getAmountEstimated(), row, 1);
581             contributionTable.setValueAt(contributions.get(row).getDueDiligence(), row, 2);
582             contributionTable.setValueAt(contributions.get(row).getdDComments(), row, 3);
583             contributionTable.setValueAt(contributions.get(row).getBudgetYear(), row, 4);
584             contributionTable.setValueAt(contributions.get(row).getbYComments(), row, 5);
585             contributionTable.setValueAt(contributions.get(row).isIsRetroactivityAccepted(), row, 6);
586             contributionTable.setValueAt(contributions.get(row).getRetroComments(), row, 7);
587             contributionTable.setValueAt(contributions.get(row).getGeoInterestName(), row, 8);
588             contributionTable.setValueAt(contributions.get(row).getGeoComments(), row, 9);
589             contributionTable.setValueAt(contributions.get(row).getThematicInterest(), row, 10);
590             contributionTable.setValueAt(contributions.get(row).getReportingRequirements(), row, 11);
591             contributionTable.setValueAt(contributions.get(row).getVisibilityRequirements(), row, 12);
592             contributionTable.setValueAt(contributions.get(row).getOtherComments(), row, 13);
593             
594         }
595     }
596     
597     /**
598      * @param args the command line arguments
599      */
600     public static void main(String args[]) {
601         /* Set the Nimbus look and feel */
602         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
603         /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
604          * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
605          */
606         try {
607             for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
608                 if ("Nimbus".equals(info.getName())) {
609                     javax.swing.UIManager.setLookAndFeel(info.getClassName());
610                     break;
611                 }
612             }
613         } catch (ClassNotFoundException ex) {
614             java.util.logging.Logger.getLogger(TableOfRequests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
615         } catch (InstantiationException ex) {
616             java.util.logging.Logger.getLogger(TableOfRequests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
617         } catch (IllegalAccessException ex) {
618             java.util.logging.Logger.getLogger(TableOfRequests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
619         } catch (javax.swing.UnsupportedLookAndFeelException ex) {
620             java.util.logging.Logger.getLogger(TableOfRequests.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
621         }
622         //</editor-fold>
623 
624         /* Create and display the form */
625         java.awt.EventQueue.invokeLater(new Runnable() {
626             public void run() {
627                 new TableOfRequests().setVisible(true);
628             }
629         });
630     }
631 
632     // Variables declaration - do not modify                     
633     private javax.swing.JButton CloseTableButton;
634     private javax.swing.JButton ExportButton;
635     private javax.swing.JTable contributionTable;
636     private javax.swing.JButton countrySearchButton;
637     private javax.swing.JLabel jLabel1;
638     private javax.swing.JLabel jLabel2;
639     private javax.swing.JScrollPane jScrollPane1;
640     private javax.swing.JScrollPane jScrollPane2;
641     private javax.swing.JSeparator jSeparator1;
642     private javax.swing.JSeparator jSeparator2;
643     private javax.swing.JButton nameSearchButton;
644     private javax.swing.JTable recommendedTable;
645     private javax.swing.JButton refreshButton;
646     private javax.swing.JButton saveChangeButton;
647     private javax.swing.JLabel searchErrorMsg;
648     private javax.swing.JTextField searchKeyTF;
649     private javax.swing.JLabel searchNotFound;
650     private javax.swing.JRadioButton sortAmountButton;
651     private javax.swing.JButton sortButton;
652     private javax.swing.JLabel sortErrorMsg;
653     private javax.swing.JRadioButton sortGeoButton;
654     private javax.swing.JRadioButton sortNameButton;
655     private javax.swing.ButtonGroup sortingButtonGroup;
656     // End of variables declaration                   
657 }
658