org.openthinclient.console.nodes.pkgmgr.DialogPackageDetailView.java Source code

Java tutorial

Introduction

Here is the source code for org.openthinclient.console.nodes.pkgmgr.DialogPackageDetailView.java

Source

/*******************************************************************************
 * openthinclient.org ThinClient suite
 * 
 * Copyright (C) 2004, 2007 levigo holding GmbH. All Rights Reserved.
 * 
 * 
 * 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.
 ******************************************************************************/
package org.openthinclient.console.nodes.pkgmgr;

import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.util.Collection;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import org.openide.ErrorManager;
import org.openide.explorer.ExplorerManager;
import org.openide.nodes.Node;
import org.openide.util.WeakListeners;
import org.openide.windows.TopComponent;
import org.openthinclient.console.AbstractDetailView;
import org.openthinclient.console.DetailView;
import org.openthinclient.console.DetailViewProvider;
import org.openthinclient.console.Messages;
import org.openthinclient.console.util.StringFilterTableModel;
import org.openthinclient.pkgmgr.PackageManagerException;
import org.openthinclient.util.dpkg.Package;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.levigo.util.swing.IconManager;
import com.levigo.util.swing.table.SunTableSorter;

public class DialogPackageDetailView extends AbstractDetailView {
    private static DialogPackageDetailView detailView;

    public static DialogPackageDetailView getInstance() {

        if (null == detailView)
            detailView = new DialogPackageDetailView();
        return detailView;
    }

    private int rowSelectedInTable = -1;
    private JTextField queryField;
    public JTable packagesTable;
    private MouseAdapter listener;
    private boolean showDebFile;
    private JComponent mainComponent;
    private StringFilterTableModel tableModel;
    private SunTableSorter sts;
    private Node packnode;
    private Node[] selection;
    private TopComponent tc;
    public static final int INSTALL = 0;
    public static final int CACHE = 1;
    public static final int BOTH = 2;

    private boolean allowSelection = false;
    private PackageManagerDelegation pkgmgr;

    /*
     * @see org.openthinclient.console.AbstractDetailView#getHeaderComponent()
     */
    @Override
    public JComponent getHeaderComponent() {
        // make sure that the main component has been initialized
        getMainComponent();

        final DefaultFormBuilder dfb = new DefaultFormBuilder(new FormLayout("p, 10dlu, r:p, 3dlu, f:p:g")); //$NON-NLS-1$
        dfb.setDefaultDialogBorder();
        dfb.setLeadingColumnOffset(2);
        dfb.setColumn(3);

        queryField = new JTextField();
        dfb.append(Messages.getString("DirObjectListNode.filter"), queryField); //$NON-NLS-1$
        dfb.nextLine();

        queryField.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                tableModel.setFilter(queryField.getText());
            }

            public void removeUpdate(DocumentEvent e) {
                tableModel.setFilter(queryField.getText());
            }

            public void insertUpdate(DocumentEvent e) {
                tableModel.setFilter(queryField.getText());
            }

            @Override
            protected void finalize() throws Throwable {
                tableModel.setFilter("");
                packagesTable.clearSelection();
                super.finalize();
            }

        });

        dfb.add(new JLabel(
                IconManager.getInstance(DetailViewProvider.class, "icons").getIcon("tree." + "PackageListQuery")), //$NON-NLS-1$ //$NON-NLS-2$
                new CellConstraints(1, 1, 1, dfb.getRowCount(), CellConstraints.CENTER, CellConstraints.TOP));

        return dfb.getPanel();
    }

    /*
     * @see org.openthinclient.console.DetailView#getRepresentation()
     */
    public JComponent getMainComponent() {
        if (null == mainComponent) {
            packagesTable = new JTable();
            tableModel = new StringFilterTableModel();
            sts = new SunTableSorter(tableModel);
            sts.setTableHeader(packagesTable.getTableHeader());
            packagesTable.setModel(sts);
            mainComponent = new JScrollPane(packagesTable);
            mainComponent.setBackground(UIManager.getColor("TextField.background")); //$NON-NLS-1$
        }
        return mainComponent;
    }

    /*
     * @see org.openthinclient.console.DetailView#init(org.openide.nodes.Node[])
     */
    public void init(Node[] selection, TopComponent tc) {

        this.selection = selection;
        this.tc = tc;
        for (final Node node : selection)
            if (node instanceof PackageListNode) {
                packnode = node;
                setPackageList((PackageListNode) node, tc, null);

                break;
            }

    }

    /**
     * @param pln
     * @param tc
     * @param node TODO
     */
    private void setPackageList(final PackageListNode pln, final TopComponent tc, final Node node) {

        showDebFile = false;
        if (pln.getName().equalsIgnoreCase(Messages.getString("node.AvailablePackagesNode")))
            showDebFile = true;
        getMainComponent();
        tableModel.setTableModel(new PackageListTableModel(pln, allowSelection, showDebFile));
        sts.setSortingStatus(1, SunTableSorter.ASCENDING);
        if (null != tc && tc instanceof ExplorerManager.Provider) {
            listener = new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getClickCount() > 1) {
                        final int selectedRow = packagesTable.getSelectedRow();
                        if (selectedRow < 0)
                            return;
                        final Node nodeAtRow = (Node) packagesTable.getModel().getValueAt(selectedRow, -1);

                        // navigate explorer to node and, if it was a
                        // double-click,
                        // execute the default action
                        if (null != nodeAtRow)
                            try {
                                ((ExplorerManager.Provider) tc).getExplorerManager()
                                        .setSelectedNodes(new Node[] { nodeAtRow });

                                if (e.getClickCount() > 1)
                                    SwingUtilities.invokeLater(new Runnable() {
                                        public void run() {
                                            nodeAtRow.getPreferredAction()
                                                    .actionPerformed(new ActionEvent(nodeAtRow, 1, "open")); //$NON-NLS-1$
                                        }
                                    });
                            } catch (final PropertyVetoException e1) {
                                e1.printStackTrace();
                                ErrorManager.getDefault().notify(e1);
                            }
                    }
                }
            };
            packagesTable.addMouseListener(
                    (MouseListener) WeakListeners.create(MouseListener.class, listener, packagesTable));
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.openthinclient.console.AbstractDetailView#getFooterComponent()
     */
    @Override
    public JComponent getFooterComponent() {
        if (tableModel.getTableModel().getClass() == PackageListTableModel.class) {
            if (rowSelectedInTable > -1 && rowSelectedInTable < packagesTable.getRowCount()) {
                boolean isSet = false;
                final Node[] droehnung = new Node[1];
                for (final Node nodele : selection)
                    if (null != nodele)
                        for (final Node nodelele : nodele.getChildren().getNodes())
                            if (null != nodelele)
                                if (nodelele.getName().equalsIgnoreCase(
                                        (String) packagesTable.getValueAt(rowSelectedInTable, 1))) {
                                    droehnung[0] = nodelele;
                                    isSet = true;
                                }
                if (isSet) {
                    Package pkg = null;
                    for (int i = 0; i < packagesTable.getRowCount(); i++)
                        if (droehnung[0].getName().equalsIgnoreCase(
                                (String) ((PackageListTableModel) tableModel.getTableModel()).getValueAt(i, 1)))
                            pkg = ((PackageListTableModel) tableModel.getTableModel()).getPackageAtRow(i);
                    final DetailView detail = new PackageNode(packnode, pkg).getDetailView();

                    detail.init(droehnung, tc);

                    final JComponent jco = detail.getMainComponent();
                    return jco;
                } else
                    return new JLabel(Messages.getString("PackageDetailView.noRowSelected"));
            } else
                return new JLabel(Messages.getString("PackageDetailView.noRowSelected"));
        } else
            return new JLabel(Messages.getString("PackageDetailView.noRowSelected"));
    }

    /**
     * 
     * @return JComponent with informations about the used Space of the selected
     *         Package item's
     * @throws PackageManagerException
     */
    public JComponent infoFooter() throws PackageManagerException {
        final CellConstraints cc = new CellConstraints();
        final JPanel jpl = new JPanel();
        jpl.setLayout(new FormLayout("f:p:g", "30dlu"));
        try {
            if (packnode.getName().equalsIgnoreCase(Messages.getString("node.AvailablePackagesNode")))
                jpl.add(getInstallSize(BOTH), cc.xy(1, 1));
            else if (packnode.getName().equalsIgnoreCase(Messages.getString("node.DebianFilePackagesNode")))
                jpl.add(getInstallSize(CACHE), cc.xy(1, 1));
            else
                jpl.add(getInstallSize(INSTALL), cc.xy(1, 1));
        } catch (final IOException e) {
            e.printStackTrace();
            ErrorManager.getDefault().notify(e);
        }
        return jpl;
    }

    /*
     * @see org.openthinclient.console.ObjectEditorPart#getTitle()
     */
    public String getTitle() {
        return null;
    }

    public boolean isAllowSelection() {
        return allowSelection;
    }

    public void setAllowSelection(boolean allowSelection) {
        this.allowSelection = allowSelection;
    }

    public Collection<Package> getSlecetedItems() {
        return ((PackageListTableModel) tableModel.getTableModel()).getSelectedPackages();
    }

    /**
     * 
     * @param i describes which space index is needed
     * @return JComponent with the different capacity informations
     * @throws IOException
     * @throws PackageManagerException
     */
    public JComponent getInstallSize(int i) throws IOException, PackageManagerException {
        final CellConstraints cc = new CellConstraints();
        final JPanel jpl = new JPanel();

        if (i == BOTH) {
            jpl.setLayout(new FormLayout("85dlu,60dlu,85dlu,60dlu", "15dlu,15dlu"));
            jpl.add(new JLabel(Messages.getString("size.InstalledSize")), cc.xy(1, 1));
            jpl.add(new JLabel(((PackageListTableModel) tableModel.getTableModel()).getUsedInstallSpace()),
                    cc.xy(2, 1));
            jpl.add(new JLabel(Messages.getString("size.CacheSize")), cc.xy(3, 1));
            jpl.add(new JLabel(((PackageListTableModel) tableModel.getTableModel()).getUsedCacheSpace()),
                    cc.xy(4, 1));
        } else {
            jpl.setLayout(new FormLayout("85dlu,60dlu", "15dlu,15dlu"));
            if (i == INSTALL) {
                jpl.add(new JLabel(Messages.getString("size.InstalledSize")), cc.xy(1, 1));
                jpl.add(new JLabel(((PackageListTableModel) tableModel.getTableModel()).getUsedInstallSpace()),
                        cc.xy(2, 1));
            } else if (i == CACHE) {
                jpl.add(new JLabel(Messages.getString("size.CacheSize")), cc.xy(1, 1));
                jpl.add(new JLabel(((PackageListTableModel) tableModel.getTableModel()).getUsedCacheSpace()),
                        cc.xy(2, 1));
            }
        }
        jpl.add(new JLabel(Messages.getString("size.freeDiskSpace")), cc.xy(1, 2));
        // try{
        pkgmgr = ((PackageManagementNode) packnode.getParentNode().getParentNode()).getPackageManagerDelegation();
        jpl.add(new JLabel(String.valueOf((float) Math.round((pkgmgr.getFreeDiskSpace() / 1024f))) + " "
                + Messages.getString("size.unit")), cc.xy(2, 2));
        // }
        // catch (PackageManagerException e) {
        // e.printStackTrace();
        // jpl.add(new JLabel(e.toString()));
        // ErrorManager.getDefault().notify(e);
        // }
        return jpl;
    }

    public void setRowSelectedInTable(int rowSelectedInTable) {
        this.rowSelectedInTable = rowSelectedInTable;
    }

    public int getTableHight() {
        return packagesTable.getRowHeight() * (packagesTable.getRowCount() + 1);
    }

    public void setValueAt(int i) {
        tableModel.setValueAt(true, i, 0);
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}