Coverage Report - org.homeunix.thecave.buddi.view.panels.MyReportsPanel
 
Classes in this File Line Coverage Branch Coverage Complexity
MyReportsPanel
88%
32/36
60%
6/10
3.5
MyReportsPanel$1
100%
7/7
100%
4/4
3.5
MyReportsPanel$2
10%
1/10
0%
0/4
3.5
 
 1  
 /*
 2  
  * Created on May 6, 2006 by wyatt
 3  
  */
 4  
 package org.homeunix.thecave.buddi.view.panels;
 5  
 
 6  
 import java.awt.BorderLayout;
 7  
 import java.awt.Component;
 8  
 import java.awt.FlowLayout;
 9  
 import java.awt.event.ActionEvent;
 10  
 import java.awt.event.ActionListener;
 11  
 import java.util.List;
 12  
 import java.util.Vector;
 13  
 
 14  
 import javax.swing.BoxLayout;
 15  
 import javax.swing.DefaultListCellRenderer;
 16  
 import javax.swing.JComboBox;
 17  
 import javax.swing.JLabel;
 18  
 import javax.swing.JList;
 19  
 import javax.swing.JPanel;
 20  
 import javax.swing.JScrollPane;
 21  
 
 22  
 import org.homeunix.thecave.buddi.i18n.BuddiKeys;
 23  
 import org.homeunix.thecave.buddi.i18n.keys.PluginReportDateRangeChoices;
 24  
 import org.homeunix.thecave.buddi.model.Document;
 25  
 import org.homeunix.thecave.buddi.model.prefs.PrefsModel;
 26  
 import org.homeunix.thecave.buddi.plugin.BuddiPluginFactory;
 27  
 import org.homeunix.thecave.buddi.plugin.BuddiPluginHelper;
 28  
 import org.homeunix.thecave.buddi.plugin.BuddiPluginHelper.DateChoice;
 29  
 import org.homeunix.thecave.buddi.plugin.api.BuddiReportPlugin;
 30  
 import org.homeunix.thecave.buddi.plugin.api.util.TextFormatter;
 31  
 import org.homeunix.thecave.buddi.util.InternalFormatter;
 32  
 import org.homeunix.thecave.buddi.view.MainFrame;
 33  
 import org.homeunix.thecave.buddi.view.dialogs.CustomDateDialog;
 34  
 
 35  
 import ca.digitalcave.moss.swing.MossPanel;
 36  
 import ca.digitalcave.moss.swing.exception.WindowOpenException;
 37  
 
 38  
 /**
 39  
  * @author wyatt
 40  
  */
 41  0
 public class MyReportsPanel extends MossPanel {
 42  
         public static final long serialVersionUID = 0;
 43  
         
 44  
         private final MainFrame parent;
 45  
         
 46  
         public MyReportsPanel(MainFrame parent){
 47  3025
                 super(true);
 48  3025
                 this.parent = parent;
 49  
                 
 50  3025
                 open();
 51  3025
         }
 52  
         
 53  
         @SuppressWarnings("unchecked")
 54  
         public void init() {
 55  3025
                 super.init();
 56  
                 
 57  3025
                 JPanel pluginsPanel = new JPanel();
 58  3025
                 pluginsPanel.setLayout(new BoxLayout(pluginsPanel, BoxLayout.Y_AXIS));
 59  
                                                 
 60  3025
                 for (BuddiReportPlugin report : (List<BuddiReportPlugin>) BuddiPluginFactory.getPlugins(BuddiReportPlugin.class)) {
 61  
                         //Select the correct options for the dropdown, based on the plugin
 62  
                         Vector<DateChoice> dateChoices;
 63  15125
                         if (report.getDateRangeChoice().equals(PluginReportDateRangeChoices.INTERVAL))
 64  12100
                                 dateChoices = BuddiPluginHelper.getInterval((Document) parent.getDocument());
 65  3025
                         else if (report.getDateRangeChoice().equals(PluginReportDateRangeChoices.START_ONLY))
 66  3025
                                 dateChoices = BuddiPluginHelper.getStartOnly((Document) parent.getDocument());
 67  0
                         else if (report.getDateRangeChoice().equals(PluginReportDateRangeChoices.END_ONLY))
 68  0
                                 dateChoices = BuddiPluginHelper.getEndOnly((Document) parent.getDocument());
 69  
                         else
 70  0
                                 dateChoices = new Vector<DateChoice>();
 71  
 
 72  15125
                         final JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
 73  15125
                         final JLabel label = new JLabel(PrefsModel.getInstance().getTranslator().get(report.getDescription()));
 74  15125
                         final JComboBox dateChooser = new JComboBox(dateChoices);
 75  15125
                         dateChooser.setPreferredSize(InternalFormatter.getComboBoxSize(dateChooser));
 76  15125
                         dateChooser.setRenderer(new DefaultListCellRenderer(){
 77  
                                 public static final long serialVersionUID = 0;
 78  
                                 
 79  
                                 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
 80  189895
                                         super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
 81  189895
                                         if (value == null) 
 82  16855
                                                 this.setText("<html><font color='gray'>" + TextFormatter.getTranslation(BuddiKeys.REPORTS_SELECT_DATE_RANGE) + "</font></html>");
 83  189895
                                         if (index == -1)
 84  189205
                                                 this.setText(TextFormatter.getTranslation(BuddiKeys.REPORTS_SELECT_DATE_RANGE));
 85  189895
                                         return this;
 86  
                                 }
 87  
                         });
 88  
                                 
 89  15125
                         panel.add(label);
 90  15125
                         panel.add(dateChooser);
 91  
                         
 92  15125
                         final BuddiReportPlugin finalReport = report;
 93  
                         
 94  15125
                         dateChooser.addActionListener(new ActionListener(){
 95  
                                 public void actionPerformed(ActionEvent e) {
 96  
                                         //Find out which item was clicked on
 97  0
                                         Object o = dateChooser.getSelectedItem();
 98  
 
 99  
                                         //If the object was a date choice, access the encoded dates
 100  0
                                         if (o instanceof DateChoice){
 101  0
                                                 DateChoice choice = (DateChoice) o;
 102  
 
 103  
                                                 //As long as the choice is not custom, our job is easy
 104  0
                                                 if (!choice.isCustom()){
 105  
                                                         //Launch a new reports window with given parameters                                                        
 106  0
                                                         BuddiPluginHelper.openReport(parent, finalReport, choice.getStartDate(), choice.getEndDate());
 107  
                                                 }
 108  
                                                 //If they want a custom window, it's a little 
 109  
                                                 // harder... we need to open the custom date
 110  
                                                 // window, which then launches the plugin.
 111  
                                                 else{
 112  
                                                         try {
 113  0
                                                                 new CustomDateDialog(parent, finalReport).openWindow();
 114  
                                                         }
 115  0
                                                         catch (WindowOpenException woe){}
 116  
                                                 }
 117  
                                         }
 118  
 
 119  0
                                         dateChooser.setSelectedItem(null);
 120  0
                                 }
 121  
                         });
 122  
                         
 123  15125
                         if (report.isPluginActive())
 124  15125
                                 pluginsPanel.add(panel);
 125  15125
                 }
 126  
                 
 127  3025
                 JPanel panel = new JPanel(new BorderLayout());
 128  3025
                 panel.add(pluginsPanel, BorderLayout.NORTH);
 129  
                 
 130  3025
                 JScrollPane scrollPane = new JScrollPane(panel);
 131  3025
                 scrollPane.setBorder(null);
 132  3025
                 scrollPane.setOpaque(false);
 133  
                 
 134  3025
                 this.setLayout(new BorderLayout());
 135  3025
                 this.add(scrollPane, BorderLayout.CENTER);
 136  3025
         }
 137  
 }