hermes.browser.components.ClasspathGroupTable.java Source code

Java tutorial

Introduction

Here is the source code for hermes.browser.components.ClasspathGroupTable.java

Source

/* 
 * Copyright 2003,2004 Colin Crist
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */

package hermes.browser.components;

import hermes.browser.HermesBrowser;
import hermes.browser.dialog.PreferencesDialog;
import hermes.browser.model.ClasspathGroupTableModel;
import hermes.config.ClasspathGroupConfig;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import javax.swing.table.TableModel;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.jidesoft.grid.HierarchicalTable;

/**
 * @author colincrist@hermesjms.com last changed by: $Author: colincrist $
 * @version $Id: ClasspathGroupTable.java,v 1.3 2005/04/08 15:54:20 colincrist
 *          Exp $
 */
public class ClasspathGroupTable extends HierarchicalTable {
    /**
     * 
     */
    private static final long serialVersionUID = -6816153288315919899L;

    private static final Logger log = Logger.getLogger(ClasspathGroupTable.class);

    private ClasspathGroupTableModel model;
    private PreferencesDialog dialog;
    private MouseAdapter mouseAdapter;

    public ClasspathGroupTable(PreferencesDialog dialog, ClasspathGroupTableModel model) {
        super(model);
        this.dialog = dialog;
        this.model = model;

        setComponentFactory(model);

        init();
    }

    public ClasspathGroupTable(PreferencesDialog dialog) {
        this(dialog, null);
    }

    public ClasspathGroupTableModel getClasspathGroupTableModel() {
        return model;
    }

    public void setModel(TableModel model) {
        super.setModel(model);

        this.model = (ClasspathGroupTableModel) model;
        setComponentFactory((ClasspathGroupTableModel) model);
    }

    public MouseAdapter getMouseAdapter() {
        return mouseAdapter;
    }

    private void init() {
        final JPopupMenu popupMenu = new JPopupMenu();
        final JMenuItem addItem = new JMenuItem("Add Group");
        final JMenuItem removeItem = new JMenuItem("Remove Group");
        final JMenuItem renameItem = new JMenuItem("Rename");

        popupMenu.add(addItem);
        popupMenu.add(removeItem);
        popupMenu.add(renameItem);

        addItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try {
                    doAddGroup();
                    dialog.setDirty();
                } catch (Exception ex) {
                    log.error(ex.getMessage(), ex);
                }
            }
        });

        removeItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                if (getSelectedRowCount() > 0) {
                    for (int row : getSelectedRows()) {
                        getClasspathGroupTableModel().removeRow(row);
                    }
                    dialog.setDirty();
                }
            }
        });

        renameItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (getSelectedRow() != -1) {
                    doRename();
                }
            }
        });

        mouseAdapter = new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e)) {
                    removeItem.setEnabled(getClasspathGroupTableModel().getRowCount() != 0);
                    renameItem.setEnabled(getClasspathGroupTableModel().getRowCount() != 0);
                    popupMenu.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        };

        addMouseListener(mouseAdapter);
        getTableHeader().addMouseListener(mouseAdapter);

        if (dialog != null) {
            addPropertyChangeListener(new PropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent evt) {
                    //
                    // Think this is ok, seems 2 do the job.

                    if (evt.getPropertyName().equals("tableCellEditor")) {
                        dialog.setDirty();
                    }
                }
            });
        }
    }

    public void doRename() {
        final ClasspathGroupConfig config = getClasspathGroupTableModel().getRow(getSelectedRow());
        final String name = JOptionPane.showInputDialog(HermesBrowser.getBrowser(), "New name:", config.getId());

        if (!config.getId().equals(name)) {
            config.setId(name);
            dialog.setDirty();
        }
    }

    public void doAddGroup() {
        final String name = JOptionPane.showInputDialog(HermesBrowser.getBrowser(), "Classpath group name:", "");

        if (!StringUtils.isEmpty(name)) {
            final ClasspathGroupConfig config = new ClasspathGroupConfig();

            config.setId(name);
            getClasspathGroupTableModel().addRow(config);
            expandRow(getClasspathGroupTableModel().getRowCount() - 1);
        }
    }

}