com.salas.bb.reports.AbstractTableReport.java Source code

Java tutorial

Introduction

Here is the source code for com.salas.bb.reports.AbstractTableReport.java

Source

// BlogBridge -- RSS feed reader, manager, and web based service
// Copyright (C) 2002-2007 by R. Pito Salas
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software Foundation;
// either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this program;
// if not, write to the Free Software Foundation, Inc., 59 Temple Place,
// Suite 330, Boston, MA 02111-1307 USA
//
// Contact: R. Pito Salas
// mailto:pitosalas@users.sourceforge.net
// More information: about BlogBridge
// http://www.blogbridge.com
// http://sourceforge.net/projects/blogbridge
//
// $Id: AbstractTableReport.java,v 1.5 2008/04/01 12:51:27 spyromus Exp $
//

package com.salas.bb.reports;

import com.jgoodies.forms.layout.CellConstraints;
import com.salas.bb.utils.i18n.Strings;
import com.salas.bb.utils.uif.BBFormBuilder;
import com.salas.bb.utils.uif.LinkLabel;
import com.salas.bb.utils.uif.UifUtilities;

import javax.swing.*;
import java.awt.*;

/**
 * Abstract report with the table and the header.
 */
abstract class AbstractTableReport extends AbstractReport {
    /** Number of entities to show at first. */
    private static final int TOP_ENTITIES_COUNT = 10;
    /** Table. */
    private JPanel table;

    /** Prepares the view for the display. Should be called after the initializeData() method. */
    protected void doLayoutView() {
        // Initialize component
        if (table == null)
            table = new JPanel();

        createDataTable(table, TOP_ENTITIES_COUNT);

        JScrollPane sp = new JScrollPane(table);
        sp.setBorder(null);

        setBackground(Color.WHITE);
        table.setBackground(Color.WHITE);

        // Build the layout
        BBFormBuilder builder = new BBFormBuilder("p:grow", this);
        builder.setDefaultDialogBorder();
        builder.append(UifUtilities.boldFont(new JLabel(getReportName())), 1, CellConstraints.CENTER,
                CellConstraints.DEFAULT);
        builder.appendRelatedComponentsGapRow(2);
        builder.appendRow("50dlu:grow");
        builder.append(sp, 1, CellConstraints.FILL, CellConstraints.FILL);
        builder.append(new SeeAllLinkLabel(Strings.message("report.see.all")));
    }

    /**
     * Creates a table for stats display.
     *
     * @param table table component to initialize.
     * @param max maximum number of rows.
     *
     * @return table.
     */
    protected abstract JPanel createDataTable(JPanel table, int max);

    /**
     * Called to create a label component for an entity.
     *
     * @param id    entity ID.
     * @param title entity title.
     *
     * @return component.
     */
    protected JComponent createLabel(long id, String title) {
        return new JLabel(title);
    }

    /**
     * A link label to open the complete report.
     */
    private class SeeAllLinkLabel extends LinkLabel {
        /**
         * Creates pure link label without link.
         *
         * @param text text to put.
         */
        private SeeAllLinkLabel(String text) {
            super(text);
        }

        @Override
        protected void doAction() {
            setEnabled(false);

            table.removeAll();
            createDataTable(table, Integer.MAX_VALUE);
            table.revalidate();
        }
    }
}