private void setDate(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        YearlyReport dp = new YearlyReport(c.get(Calendar.YEAR));
        Hashtable totals = dp.getTotals();
        Hashtable stationTotals = dp.getStationTotals();
        Hashtable userTotals = dp.getUserTotals();
        Hashtable quantityTotals = dp.getBestSellersByQuantity();
        Hashtable dollarTotals = dp.getBestSellersByDollar();
        Map.Entry[] stationEntries = Sorter.getSortedHashtableEntries(stationTotals, false);
        Map.Entry[] userEntries = Sorter.getSortedHashtableEntries(userTotals, false);
        Map.Entry[] quantityEntries = Sorter.getSortedHashtableEntries(
                quantityTotals, false);
        Map.Entry[] dollarEntries = Sorter.getSortedHashtableEntries(
                dollarTotals, false);

        SimpleDateFormat df = new SimpleDateFormat("yyyy");
        report = I18N.getLabelString("Yearly Report")+": " + df.format(date) + "\n\n";

        Iterator keys = totals.keySet().iterator();
        while (keys.hasNext()) {
            String key = (String) keys.next();
            report += key + ": ";
            if (!key.equals(I18N.getLabelString("Number of Items"))) {
                report += "$";
            }
            report += totals.get(key) + "\n";
        }

        report += "\n"+I18N.getLabelString("Sales by User")+"\n";

        for (int i = 0; i < userEntries.length; i++) {
            String key = (String) userEntries[i].getKey();
            report += (i + 1) + ". " + key + ": $" + userEntries[i].getValue() +
                    "\n";
        }

        report += "\n"+I18N.getLabelString("Sales by Station")+"\n";

        for (int i = 0; i < stationEntries.length; i++) {
            String key = (String) stationEntries[i].getKey();
            report += (i + 1) + ". " + key + ": $" + stationEntries[i].getValue() +
                    "\n";
        }

        report += "\n"+I18N.getLabelString("Top 5 Bestsellers by Quantity")+"\n";

        Hashtable qb = new Hashtable();
        int items = ((Integer) totals.get(I18N.getLabelString("Number of Items"))).intValue();
        int n = 0;

        for (int i = 0; i < quantityEntries.length; i++) {
            String key = (String) quantityEntries[i].getKey();
            int pos = key.indexOf(" ");
            report += (i + 1) + ". " + key.substring(0, pos) + ": " +
                    quantityEntries[i].getValue() +
                    "\n";
            report += key.substring(pos + 1) + "\n";
            int val = ((Integer) quantityEntries[i].getValue()).intValue();
            qb.put(key.substring(pos + 1), new Double(val));
            n += val;
        }

        if (n < items) {
            qb.put(I18N.getLabelString("Other"), new Double(items - n));
        }

        report += "\n"+I18N.getLabelString("Top 5 Bestsellers by Dollar")+"\n";

        Hashtable db = new Hashtable();
        double total = ((Double) totals.get(I18N.getLabelString("Sales Total"))).doubleValue();
        double m = 0;

        for (int i = 0; i < dollarEntries.length; i++) {
            String key = (String) dollarEntries[i].getKey();
            int pos = key.indexOf(" ");
            double val = ((Double) dollarEntries[i].getValue()).doubleValue();
            val = Math.round(val * 100.0) / 100.0;
            report += (i + 1) + ". " + key.substring(0, pos) + ": $" + val +
                    "\n";
            report += key.substring(pos + 1) + "\n";
            db.put(key.substring(pos + 1), new Double(val));
            m += val;
        }

        if (m < total) {
            db.put(I18N.getLabelString("Other"), new Double(total - m));
        }

        jTextArea1.setText(report);
        piePanel1.setWedges(userTotals);
        piePanel2.setWedges(stationTotals);
        piePanel3.setWedges(qb);
        piePanel4.setWedges(db);
        revalidate();
        repaint();
    }