blob: 2303b0717633f1e5bce2c3ab23ec0f02cda2fd16 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.netbeans.modules.form.wizard;
import java.beans.*;
import java.util.*;
import javax.swing.event.*;
import org.openide.util.NbBundle;
import org.netbeans.modules.form.*;
/**
* The UI component of the ConnectionWizardPanel2.
*
* @author Tomas Pavek
*/
class ConnectionPanel2 extends javax.swing.JPanel {
private ConnectionWizardPanel2 wizardPanel;
private Object[] propertyListData;
private Object[] methodListData;
private MethodDescriptor[] methodDescriptors;
private PropertyDescriptor[] propDescriptors;
java.util.ResourceBundle bundle;
/** Creates new form ConnectionPanel2 */
ConnectionPanel2(ConnectionWizardPanel2 wizardPanel) {
this.wizardPanel = wizardPanel;
initComponents();
bundle = NbBundle.getBundle(ConnectionPanel2.class);
setName(bundle.getString("CTL_CW_Step2_Title")); // NOI18N
javax.swing.ButtonGroup gr = new javax.swing.ButtonGroup();
gr.add(propertyButton);
gr.add(methodButton);
gr.add(codeButton);
targetComponentName.setText(wizardPanel.getTargetComponent().getName());
actionList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
actionList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
if (!evt.getValueIsAdjusting())
ConnectionPanel2.this.wizardPanel.fireStateChanged();
}
});
// localization code
targetNameLabel.setText(
bundle.getString("CTL_CW_TargetComponent")); // NOI18N
targetNameLabel.setDisplayedMnemonic(
bundle.getString("CTL_CW_TargetComponent_Mnemonic").charAt(0)); // NOI18N
targetComponentName.setToolTipText(
bundle.getString("CTL_CW_TargetComponent_Hint")); // NOI18N
propertyButton.setText(bundle.getString("CTL_CW_SetProperty")); // NOI18N
propertyButton.setMnemonic(
bundle.getString("CTL_CW_SetProperty_Mnemonic").charAt(0)); // NOI18N
propertyButton.setToolTipText(
bundle.getString("CTL_CW_SetProperty_Hint")); // NOI18N
methodButton.setText(bundle.getString("CTL_CW_MethodCall")); // NOI18N
methodButton.setMnemonic(
bundle.getString("CTL_CW_MethodCall_Mnemonic").charAt(0)); // NOI18N
methodButton.setToolTipText(bundle.getString("CTL_CW_MethodCall_Hint"));
codeButton.setText(bundle.getString("CTL_CW_XUserCode")); // NOI18N
codeButton.setMnemonic(
bundle.getString("CTL_CW_XUserCode_Mnemonic").charAt(0)); // NOI18N
codeButton.setToolTipText(
bundle.getString("CTL_CW_XUserCode_Hint")); // NOI18N
targetComponentName.getAccessibleContext().setAccessibleDescription(
bundle.getString("ACSD_CW_TargetComponent")); // NOI18N
propertyButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("ACSD_CW_SetProperty")); // NOI18N
methodButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("ACSD_CW_MethodCall")); // NOI18N
codeButton.getAccessibleContext().setAccessibleDescription(
bundle.getString("ACSD_CW_XUserCode")); // NOI18N
actionList.getAccessibleContext().setAccessibleDescription(
bundle.getString("ACSD_CW_ActionList")); // NOI18N
getAccessibleContext().setAccessibleDescription(
bundle.getString("ACSD_CW_ConnectionPanel2")); // NOI18N
updateActionList();
putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, new Integer(1)); // NOI18N
}
public java.awt.Dimension getPreferredSize() {
return new java.awt.Dimension(450, 300);
}
int getActionType() {
if (methodButton.isSelected())
return ConnectionWizardPanel2.METHOD_TYPE;
else if (propertyButton.isSelected())
return ConnectionWizardPanel2.PROPERTY_TYPE;
else
return ConnectionWizardPanel2.CODE_TYPE;
}
MethodDescriptor getSelectedMethod() {
if (!methodButton.isSelected() || actionList.getSelectedIndex() == -1)
return null;
return methodDescriptors[actionList.getSelectedIndex()];
}
PropertyDescriptor getSelectedProperty() {
if (!propertyButton.isSelected() || actionList.getSelectedIndex() == -1)
return null;
return propDescriptors[actionList.getSelectedIndex()];
}
private void updateActionList() {
if (codeButton.isSelected()) {
actionList.setListData(new String [] {
bundle.getString("CTL_CW_UserCodeText1"), // NOI18N
bundle.getString("CTL_CW_UserCodeText2") }); // NOI18N
actionList.setEnabled(false);
actionList.getAccessibleContext().setAccessibleName(codeButton.getText());
}
else if (propertyButton.isSelected()) {
// properties list
actionList.setEnabled(true);
if (propertyListData == null) {
BeanInfo targetBeanInfo =
wizardPanel.getTargetComponent().getBeanInfo();
PropertyDescriptor[] descs = targetBeanInfo.getPropertyDescriptors();
// filter out read-only properties // [FUTURE: provide also indexed properties]
ArrayList list = new ArrayList();
for (int i = 0; i < descs.length; i++) {
if (descs[i].getWriteMethod() != null) {
list.add(descs[i]);
}
}
// sort the properties by name
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return((PropertyDescriptor)o1).getName().compareTo(((PropertyDescriptor)o2).getName());
}
});
propDescriptors = new PropertyDescriptor [list.size()];
list.toArray(propDescriptors);
propertyListData = new String [propDescriptors.length];
for (int i = 0; i < propDescriptors.length; i++) {
propertyListData [i] = propDescriptors [i].getName();
}
}
actionList.setListData(propertyListData);
actionList.getAccessibleContext().setAccessibleName(propertyButton.getText());
}
else {
// methods list
actionList.setEnabled(true);
if (methodListData == null) {
BeanInfo targetBeanInfo =
wizardPanel.getTargetComponent().getBeanInfo();
methodDescriptors = targetBeanInfo.getMethodDescriptors();
ArrayList list = new ArrayList();
for (int i = 0; i < methodDescriptors.length; i++) {
list.add(methodDescriptors[i]);
}
// sort the methods by name
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return((MethodDescriptor)o1).getName().compareTo(((MethodDescriptor)o2).getName());
}
});
// copy it back to the array as it is used later
list.toArray(methodDescriptors);
methodListData = new String [list.size()];
int i = 0;
for (Iterator it = list.iterator(); it.hasNext();) {
methodListData [i++] = getMethodName((MethodDescriptor)it.next());
}
}
actionList.setListData(methodListData);
actionList.getAccessibleContext().setAccessibleName(methodButton.getText());
}
actionList.revalidate();
actionList.repaint();
}
private static String getMethodName(MethodDescriptor desc) {
StringBuffer sb = new StringBuffer(desc.getName());
Class[] params = desc.getMethod().getParameterTypes();
if ((params == null) ||(params.length == 0)) {
sb.append("()"); // NOI18N
} else {
for (int i = 0; i < params.length; i++) {
if (i == 0) sb.append("("); // NOI18N
else sb.append(", "); // NOI18N
sb.append(org.openide.util.Utilities.getShortClassName(params[i]));
}
sb.append(")"); // NOI18N
}
return sb.toString();
}
/** 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.
*/
private void initComponents() {//GEN-BEGIN:initComponents
targerInfoPanel = new javax.swing.JPanel();
targetNamePanel = new javax.swing.JPanel();
targetNameLabel = new javax.swing.JLabel();
targetComponentName = new javax.swing.JTextField();
actionTypePanel = new javax.swing.JPanel();
propertyButton = new javax.swing.JRadioButton();
methodButton = new javax.swing.JRadioButton();
codeButton = new javax.swing.JRadioButton();
actionPanel = new javax.swing.JScrollPane();
actionList = new javax.swing.JList();
setLayout(new java.awt.BorderLayout(0, 2));
targerInfoPanel.setLayout(new java.awt.BorderLayout(0, 6));
targetNamePanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
targetNameLabel.setLabelFor(targetComponentName);
targetNameLabel.setText("Target Component:");
targetNameLabel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(0, 0, 0, 6)));
targetNamePanel.add(targetNameLabel);
targetComponentName.setEditable(false);
targetComponentName.setText("jTextField1");
targetNamePanel.add(targetComponentName);
targerInfoPanel.add(targetNamePanel, java.awt.BorderLayout.NORTH);
actionTypePanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 0, 0));
propertyButton.setSelected(true);
propertyButton.setText("Set Property");
propertyButton.setMargin(new java.awt.Insets(2, 2, 2, 10));
propertyButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ConnectionPanel2.this.actionTypeButtonPressed(evt);
}
});
actionTypePanel.add(propertyButton);
methodButton.setText("Method Call");
methodButton.setMargin(new java.awt.Insets(2, 2, 2, 10));
methodButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ConnectionPanel2.this.actionTypeButtonPressed(evt);
}
});
actionTypePanel.add(methodButton);
codeButton.setText("User Code");
codeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ConnectionPanel2.this.actionTypeButtonPressed(evt);
}
});
actionTypePanel.add(codeButton);
targerInfoPanel.add(actionTypePanel, java.awt.BorderLayout.CENTER);
add(targerInfoPanel, java.awt.BorderLayout.NORTH);
actionPanel.setViewportView(actionList);
add(actionPanel, java.awt.BorderLayout.CENTER);
}//GEN-END:initComponents
private void actionTypeButtonPressed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actionTypeButtonPressed
updateActionList();
wizardPanel.fireStateChanged();
if (evt.getSource() != codeButton)
actionList.requestFocus();
}//GEN-LAST:event_actionTypeButtonPressed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JRadioButton codeButton;
private javax.swing.JList actionList;
private javax.swing.JRadioButton methodButton;
private javax.swing.JScrollPane actionPanel;
private javax.swing.JPanel targetNamePanel;
private javax.swing.JRadioButton propertyButton;
private javax.swing.JPanel targerInfoPanel;
private javax.swing.JLabel targetNameLabel;
private javax.swing.JTextField targetComponentName;
private javax.swing.JPanel actionTypePanel;
// End of variables declaration//GEN-END:variables
}