/*
* 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) ;
}
}
}