/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* ApplicationTypeOptionsPanel.java
*
* Created on Nov 3, 2008, 1:33:55 PM
*/
package com.sun.tools.visualvm.modules.customtype.options;
import com.sun.tools.visualvm.modules.customtype.ApplicationType;
import com.sun.tools.visualvm.modules.customtype.ApplicationTypeManager;
import com.sun.tools.visualvm.modules.customtype.ui.ApplicationTypeForm;
import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
/**
*
* @author Jaroslav Bachorik
*/
public class ApplicationTypeOptionsPanel extends javax.swing.JPanel {
private static class AppTypeTableMode extends AbstractTableModel {
final private List<ApplicationType> types = new ArrayList<ApplicationType>();
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
synchronized (types) {
return types.size();
}
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
synchronized (types) {
switch (columnIndex) {
case 0: {
return types.get(rowIndex).getName();
}
case 1: {
return true;
}
default: {
return null;
}
}
}
}
ApplicationType getTypeAt(int selectedIndex) {
synchronized (types) {
return types.get(selectedIndex);
}
}
void update() {
synchronized (types) {
types.clear();
types.addAll(ApplicationTypeManager.getDefault().listTypes());
fireTableDataChanged();
}
}
}
final private AppTypeTableMode tableModel = new AppTypeTableMode();
/** Creates new form ApplicationTypeOptionsPanel */
public ApplicationTypeOptionsPanel() {
initComponents();
appTypeTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
menuEdit.setEnabled(appTypeTable.getSelectedRowCount() == 1);
menuDelete.setEnabled(appTypeTable.getSelectedRowCount() > 0);
}
}
});
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
tablePopupMenu = new javax.swing.JPopupMenu();
menuNew = new javax.swing.JMenuItem();
menuEdit = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JSeparator();
menuDelete = new javax.swing.JMenuItem();
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
appTypeTable = new javax.swing.JTable();
menuNew.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_INSERT, java.awt.event.InputEvent.CTRL_MASK));
menuNew.setMnemonic('C');
menuNew.setText(org.openide.util.NbBundle.getMessage(ApplicationTypeOptionsPanel.class, "ApplicationTypeOptionsPanel.menuNew.text")); // NOI18N
menuNew.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuNewActionPerformed(evt);
}
});
tablePopupMenu.add(menuNew);
menuEdit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER, java.awt.event.InputEvent.CTRL_MASK));
menuEdit.setMnemonic('E');
menuEdit.setText(org.openide.util.NbBundle.getMessage(ApplicationTypeOptionsPanel.class, "ApplicationTypeOptionsPanel.menuEdit.text")); // NOI18N
menuEdit.setEnabled(false);
menuEdit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editApplicationType(evt);
}
});
tablePopupMenu.add(menuEdit);
tablePopupMenu.add(jSeparator1);
menuDelete.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, 0));
menuDelete.setMnemonic('D');
menuDelete.setText(org.openide.util.NbBundle.getMessage(ApplicationTypeOptionsPanel.class, "ApplicationTypeOptionsPanel.menuDelete.text")); // NOI18N
menuDelete.setEnabled(false);
menuDelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteApptype(evt);
}
});
tablePopupMenu.add(menuDelete);
jLabel1.setFont(new java.awt.Font("DejaVu Sans", 1, 13));
jLabel1.setText(org.openide.util.NbBundle.getMessage(ApplicationTypeOptionsPanel.class, "ApplicationTypeOptionsPanel.jLabel1.text")); // NOI18N
appTypeTable.setAutoCreateRowSorter(true);
appTypeTable.setModel(tableModel);
appTypeTable.setComponentPopupMenu(tablePopupMenu);
appTypeTable.setOpaque(false);
appTypeTable.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
jScrollPane1.setViewportView(appTypeTable);
appTypeTable.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
appTypeTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ApplicationTypeOptionsPanel.class, "ApplicationTypeOptionsPanel.appTypeTable.columnModel.title0")); // NOI18N
appTypeTable.getColumnModel().getColumn(1).setHeaderValue(org.openide.util.NbBundle.getMessage(ApplicationTypeOptionsPanel.class, "ApplicationTypeOptionsPanel.appTypeTable.columnModel.title1")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE)
.addComponent(jLabel1))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void editApplicationType(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editApplicationType
final ApplicationType at = tableModel.getTypeAt(appTypeTable.getSelectedRow());
final ApplicationTypeForm form = new ApplicationTypeForm(at);
final DialogDescriptor[] dd = new DialogDescriptor[1];
dd[0] = new DialogDescriptor(form, "Application Type Details", true, new Object[]{form.getValidationSupport().getOkButton(), DialogDescriptor.CANCEL_OPTION}, form.getValidationSupport().getOkButton(), DialogDescriptor.DEFAULT_ALIGN, null, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == form.getValidationSupport().getOkButton() && form.storeData()) {
dd[0].setClosingOptions(new Object[]{form.getValidationSupport().getOkButton()});
}
}
});
dd[0].setClosingOptions(new Object[]{DialogDescriptor.CANCEL_OPTION});
Dialog dlg = DialogDisplayer.getDefault().createDialog(dd[0]);
dlg.setVisible(true);
if (dd[0].getValue() == form.getValidationSupport().getOkButton()) {
try {
ApplicationTypeManager.getDefault().storeType(at);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}//GEN-LAST:event_editApplicationType
private void menuNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuNewActionPerformed
ApplicationType eat = ApplicationTypeManager.getDefault().newType("");
final ApplicationTypeForm form = new ApplicationTypeForm(eat);
final DialogDescriptor[] dd = new DialogDescriptor[1];
dd[0] = new DialogDescriptor(form, "New Application Type Details", true, new Object[]{form.getValidationSupport().getOkButton(), DialogDescriptor.CANCEL_OPTION}, form.getValidationSupport().getOkButton(), DialogDescriptor.DEFAULT_ALIGN, null, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(form.getValidationSupport().getOkButton()) && form.storeData()) {
dd[0].setClosingOptions(new Object[]{form.getValidationSupport().getOkButton()});
}
}
});
dd[0].setClosingOptions(new Object[]{DialogDescriptor.CANCEL_OPTION});
Dialog dlg = DialogDisplayer.getDefault().createDialog(dd[0]);
dlg.setVisible(true);
if (dd[0].getValue() == form.getValidationSupport().getOkButton()) {
try {
ApplicationTypeManager.getDefault().storeType(eat);
} catch (IOException ex) {
ex.printStackTrace();
}
}
tableModel.update();
}//GEN-LAST:event_menuNewActionPerformed
private void deleteApptype(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteApptype
final ApplicationType at = tableModel.getTypeAt(appTypeTable.getSelectedRow());
ApplicationTypeManager.getDefault().removeType(at);
tableModel.update();
}//GEN-LAST:event_deleteApptype
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTable appTypeTable;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JMenuItem menuDelete;
private javax.swing.JMenuItem menuEdit;
private javax.swing.JMenuItem menuNew;
private javax.swing.JPopupMenu tablePopupMenu;
// End of variables declaration//GEN-END:variables
void load() {
tableModel.update();
}
void store() {
System.err.println("Store");
}
}