package me.legrange.panstamp.gui;
import gnu.io.CommPortIdentifier;
import java.awt.CardLayout;
import java.awt.Frame;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import me.legrange.panstamp.Network;
import me.legrange.panstamp.gui.model.HexDocument;
import me.legrange.panstamp.gui.model.IntegerDocument;
import me.legrange.panstamp.gui.model.Model;
import me.legrange.panstamp.gui.task.CreateSerialTask;
import me.legrange.panstamp.gui.task.CreateTcpNetworkTask;
/**
*
* @author gideon
*/
public class NetworkAddDialog extends javax.swing.JDialog {
private enum State {
SELECT_TYPE, SELECT_SERIAL, ENTER_TCP, ENTER_NETWORK, END;
};
/**
* Creates new form PanStampSettingsDialog
*/
public NetworkAddDialog(Frame parent, Model model) {
super(parent, true);
this.parent = parent;
this.model = model;
initComponents();
setLocationRelativeTo(null);
state.push(State.SELECT_TYPE);
applyState();
}
/**
* 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() {
typeButtonGroup = new javax.swing.ButtonGroup();
jLabel2 = new javax.swing.JLabel();
outerSplitPane = new javax.swing.JSplitPane();
headerPanel = new javax.swing.JPanel();
innerSplitPane = new javax.swing.JSplitPane();
contentPanel = new javax.swing.JPanel();
createNetworkPanel = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
configTcpPanel = new javax.swing.JPanel();
hostLabel = new javax.swing.JLabel();
tcpPortLabel = new javax.swing.JLabel();
tcpPortTextField = new javax.swing.JTextField();
hostTextField = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
selectTypePanel = new javax.swing.JPanel();
serialRadioButton = new javax.swing.JRadioButton();
tcpRadioButton = new javax.swing.JRadioButton();
jLabel1 = new javax.swing.JLabel();
configSerialPanel = new javax.swing.JPanel();
portLabel = new javax.swing.JLabel();
speedLabel = new javax.swing.JLabel();
speedComboBox = new javax.swing.JComboBox();
portComboBox = new javax.swing.JComboBox();
jLabel4 = new javax.swing.JLabel();
configNetworkPanel = new javax.swing.JPanel();
frequencyLabel = new javax.swing.JLabel();
channelTextField = new javax.swing.JTextField();
networkIDLabel = new javax.swing.JLabel();
networkTextField = new javax.swing.JTextField();
addressLabel = new javax.swing.JLabel();
addressTextField = new javax.swing.JTextField();
securityLabel = new javax.swing.JLabel();
securityTextField = new javax.swing.JTextField();
buttonPanel = new javax.swing.JPanel();
backButton = new javax.swing.JButton();
nextButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
finishButton = new javax.swing.JButton();
jLabel2.setText("Add a PanStamp network:");
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Add Network");
setResizable(false);
getContentPane().setLayout(new java.awt.FlowLayout());
outerSplitPane.setBorder(null);
outerSplitPane.setDividerSize(0);
outerSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
outerSplitPane.setRightComponent(headerPanel);
innerSplitPane.setBorder(null);
innerSplitPane.setDividerSize(0);
innerSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
contentPanel.setLayout(new java.awt.CardLayout());
createNetworkPanel.setName("create-network-panel"); // NOI18N
jLabel6.setText("Network Summary");
jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel7.setText("To create your new network, click 'Finish'");
javax.swing.GroupLayout createNetworkPanelLayout = new javax.swing.GroupLayout(createNetworkPanel);
createNetworkPanel.setLayout(createNetworkPanelLayout);
createNetworkPanelLayout.setHorizontalGroup(
createNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(createNetworkPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(createNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE))
.addContainerGap())
);
createNetworkPanelLayout.setVerticalGroup(
createNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(createNetworkPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel6)
.addGap(18, 18, 18)
.addComponent(jLabel7)
.addContainerGap(162, Short.MAX_VALUE))
);
contentPanel.add(createNetworkPanel, "create-network-panel");
configTcpPanel.setName("config-tcp-panel"); // NOI18N
hostLabel.setText("Host name/address:");
hostLabel.setToolTipText("");
tcpPortLabel.setText("TCP Port:");
tcpPortLabel.setToolTipText("");
tcpPortTextField.setColumns(4);
tcpPortTextField.setDocument(new IntegerDocument(1,65535));
tcpPortTextField.setText("3333");
tcpPortTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tcpPortTextFieldActionPerformed(evt);
}
});
tcpPortTextField.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
tcpPortTextFieldPropertyChange(evt);
}
});
hostTextField.setColumns(127);
hostTextField.setText("localhost");
hostTextField.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
hostTextFieldPropertyChange(evt);
}
});
jLabel5.setText("Enter hostname and TCP port");
javax.swing.GroupLayout configTcpPanelLayout = new javax.swing.GroupLayout(configTcpPanel);
configTcpPanel.setLayout(configTcpPanelLayout);
configTcpPanelLayout.setHorizontalGroup(
configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(configTcpPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(configTcpPanelLayout.createSequentialGroup()
.addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(configTcpPanelLayout.createSequentialGroup()
.addGroup(configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(hostLabel)
.addComponent(tcpPortLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(hostTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 258, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(tcpPortTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
);
configTcpPanelLayout.setVerticalGroup(
configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(configTcpPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)
.addGap(16, 16, 16)
.addGroup(configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(hostLabel)
.addComponent(hostTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(configTcpPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(tcpPortLabel)
.addComponent(tcpPortTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
contentPanel.add(configTcpPanel, "config-tcp-panel");
selectTypePanel.setName("select-type-panel"); // NOI18N
typeButtonGroup.add(serialRadioButton);
serialRadioButton.setSelected(true);
serialRadioButton.setText("Serial Network");
serialRadioButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
serialRadioButtonActionPerformed(evt);
}
});
typeButtonGroup.add(tcpRadioButton);
tcpRadioButton.setText("TCP/IP Network");
jLabel1.setText("Select the type of PanStamp network to create");
jLabel1.setVerticalAlignment(javax.swing.SwingConstants.TOP);
javax.swing.GroupLayout selectTypePanelLayout = new javax.swing.GroupLayout(selectTypePanel);
selectTypePanel.setLayout(selectTypePanelLayout);
selectTypePanelLayout.setHorizontalGroup(
selectTypePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(selectTypePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(selectTypePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(selectTypePanelLayout.createSequentialGroup()
.addGroup(selectTypePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tcpRadioButton)
.addComponent(serialRadioButton))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
selectTypePanelLayout.setVerticalGroup(
selectTypePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(selectTypePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(serialRadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tcpRadioButton)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
contentPanel.add(selectTypePanel, "select-type-panel");
configSerialPanel.setName("config-serial-panel"); // NOI18N
portLabel.setText("Port:");
portLabel.setName("config-serial-panel"); // NOI18N
speedLabel.setText("Speed (bps):");
speedLabel.setName("config-serial-panel"); // NOI18N
speedComboBox.setModel(speedListModel());
speedComboBox.setName("config-serial-panel"); // NOI18N
speedComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
speedComboBoxActionPerformed(evt);
}
});
portComboBox.setModel(portListModel());
portComboBox.setName("config-serial-panel"); // NOI18N
portComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
portComboBoxActionPerformed(evt);
}
});
jLabel4.setText("Select serial port and baud rate");
javax.swing.GroupLayout configSerialPanelLayout = new javax.swing.GroupLayout(configSerialPanel);
configSerialPanel.setLayout(configSerialPanelLayout);
configSerialPanelLayout.setHorizontalGroup(
configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(configSerialPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(configSerialPanelLayout.createSequentialGroup()
.addGroup(configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(speedLabel)
.addComponent(portLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(speedComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(portComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 249, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
configSerialPanelLayout.setVerticalGroup(
configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(configSerialPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(portComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(portLabel))
.addGap(16, 16, 16)
.addGroup(configSerialPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(speedLabel)
.addComponent(speedComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
contentPanel.add(configSerialPanel, "config-serial-panel");
configNetworkPanel.setName("config-network-panel"); // NOI18N
frequencyLabel.setText("Frequency channel:");
frequencyLabel.setToolTipText("");
channelTextField.setColumns(4);
channelTextField.setDocument(new IntegerDocument(0,255));
channelTextField.setText("0");
channelTextField.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
channelTextFieldPropertyChange(evt);
}
});
networkIDLabel.setText("Network ID:");
networkTextField.setDocument(new HexDocument(0,65535));
networkTextField.setText("b547");
networkTextField.setToolTipText("Network ID in hexadecimal");
networkTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
networkTextFieldActionPerformed(evt);
}
});
networkTextField.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
networkTextFieldPropertyChange(evt);
}
});
addressLabel.setText("Device address:");
addressTextField.setDocument(new IntegerDocument(0, 255));
addressTextField.setText("1");
addressTextField.setToolTipText("Local device address in decimal");
addressTextField.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
addressTextFieldPropertyChange(evt);
}
});
securityLabel.setText("Security option:");
securityTextField.setDocument(new IntegerDocument(0,255));
securityTextField.setText("0");
securityTextField.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
securityTextFieldPropertyChange(evt);
}
});
javax.swing.GroupLayout configNetworkPanelLayout = new javax.swing.GroupLayout(configNetworkPanel);
configNetworkPanel.setLayout(configNetworkPanelLayout);
configNetworkPanelLayout.setHorizontalGroup(
configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(configNetworkPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(frequencyLabel)
.addComponent(networkIDLabel)
.addComponent(addressLabel)
.addComponent(securityLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 138, Short.MAX_VALUE)
.addGroup(configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(networkTextField)
.addComponent(securityTextField)
.addComponent(addressTextField)
.addComponent(channelTextField))
.addContainerGap(157, Short.MAX_VALUE))
);
configNetworkPanelLayout.setVerticalGroup(
configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(configNetworkPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(frequencyLabel)
.addComponent(channelTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(networkIDLabel)
.addComponent(networkTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(addressLabel)
.addComponent(addressTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(configNetworkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(securityTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(securityLabel))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
contentPanel.add(configNetworkPanel, "config-network-panel");
innerSplitPane.setLeftComponent(contentPanel);
backButton.setText("< Back");
backButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
backButtonActionPerformed(evt);
}
});
nextButton.setText("Next >");
nextButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
nextButtonActionPerformed(evt);
}
});
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
finishButton.setText("Finish");
finishButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
finishButtonActionPerformed(evt);
}
});
javax.swing.GroupLayout buttonPanelLayout = new javax.swing.GroupLayout(buttonPanel);
buttonPanel.setLayout(buttonPanelLayout);
buttonPanelLayout.setHorizontalGroup(
buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(buttonPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(backButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(nextButton)
.addGap(124, 124, 124)
.addComponent(cancelButton)
.addGap(5, 5, 5)
.addComponent(finishButton))
);
buttonPanelLayout.setVerticalGroup(
buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(buttonPanelLayout.createSequentialGroup()
.addGap(5, 5, 5)
.addGroup(buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(buttonPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nextButton)
.addComponent(backButton))
.addComponent(cancelButton)
.addComponent(finishButton)))
);
innerSplitPane.setRightComponent(buttonPanel);
outerSplitPane.setLeftComponent(innerSplitPane);
getContentPane().add(outerSplitPane);
pack();
}// </editor-fold>//GEN-END:initComponents
private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed
backward();
}//GEN-LAST:event_backButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
private void nextButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextButtonActionPerformed
forward();
}//GEN-LAST:event_nextButtonActionPerformed
private void finishButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishButtonActionPerformed
if (createNetwork()) {
dispose();
}
}//GEN-LAST:event_finishButtonActionPerformed
private void serialRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serialRadioButtonActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_serialRadioButtonActionPerformed
private void tcpPortTextFieldPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_tcpPortTextFieldPropertyChange
// TODO add your handling code here:
}//GEN-LAST:event_tcpPortTextFieldPropertyChange
private void hostTextFieldPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_hostTextFieldPropertyChange
// TODO add your handling code here:
}//GEN-LAST:event_hostTextFieldPropertyChange
private void tcpPortTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tcpPortTextFieldActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_tcpPortTextFieldActionPerformed
private void portComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_portComboBoxActionPerformed
//config.setPortName((String) portComboBox.getModel().getSelectedItem());
}//GEN-LAST:event_portComboBoxActionPerformed
private void speedComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_speedComboBoxActionPerformed
//config.setPortSpeed((Integer) speedComboBox.getModel().getSelectedItem());
}//GEN-LAST:event_speedComboBoxActionPerformed
private void channelTextFieldPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_channelTextFieldPropertyChange
String text = channelTextField.getText().trim();
if ((text != null) && !text.equals("")) {
// config.setChannel(Integer.parseInt(text));
}
}//GEN-LAST:event_channelTextFieldPropertyChange
private void networkTextFieldPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_networkTextFieldPropertyChange
String text = networkTextField.getText().trim();
if ((text != null) && !text.equals("")) {
// config.setNetworkID(Integer.parseInt(text, 16));
}
}//GEN-LAST:event_networkTextFieldPropertyChange
private void addressTextFieldPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_addressTextFieldPropertyChange
String text = addressTextField.getText().trim();
if ((text != null) && !text.equals("")) {
// config.setDeviceAddress(Integer.parseInt(text));
}
}//GEN-LAST:event_addressTextFieldPropertyChange
private void securityTextFieldPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_securityTextFieldPropertyChange
String text = securityTextField.getText().trim();
if ((text != null) && !text.equals("")) {
// config.setSecurityOption(Integer.parseInt(text));
}
}//GEN-LAST:event_securityTextFieldPropertyChange
private void networkTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_networkTextFieldActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_networkTextFieldActionPerformed
private void forward() {
switch (getState()) {
case ENTER_TCP:
case SELECT_SERIAL:
state.push(State.ENTER_NETWORK);
break;
case SELECT_TYPE:
if (typeIsSerial()) {
state.push(State.SELECT_SERIAL);
} else {
state.push(State.ENTER_TCP);
}
break;
case ENTER_NETWORK:
state.push(State.END);
break;
}
applyState();
}
private void backward() {
state.pop();
applyState();
}
private void applyState() {
backButton.setEnabled(getState() != State.SELECT_TYPE);
nextButton.setEnabled(getState() != State.END);
finishButton.setEnabled(getState() == State.END);
// select content for wizard based on state
JPanel content;
switch (getState()) {
case SELECT_TYPE:
content = selectTypePanel;
break;
case ENTER_TCP:
content = configTcpPanel;
break;
case SELECT_SERIAL:
content = configSerialPanel;
break;
case ENTER_NETWORK:
content = configNetworkPanel;
break;
case END:
content = createNetworkPanel;
break;
default:
return;
}
CardLayout clo = (CardLayout) contentPanel.getLayout();
clo.show(contentPanel, content.getName());
}
private State getState() {
return state.peek();
}
private boolean createNetwork() {
WaitDialog wd;
if (typeIsSerial()) {
wd = new WaitDialog(parent, new CreateSerialTask(getSerialPort(), getSerialSpeed(), getChannel(), getDeviceAddress(), getNetworkID()));
} else {
wd = new WaitDialog(parent, new CreateTcpNetworkTask(getTcpHost(), getTcpPort(), getChannel(), getDeviceAddress(), getNetworkID()));
}
try {
model.addGateway((Network) wd.start());
return true;
} catch (Throwable ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
return false;
}
}
private String getSerialPort() {
return portComboBox.getSelectedItem().toString();
}
private int getSerialSpeed() {
return Integer.parseInt(speedComboBox.getSelectedItem().toString());
}
private String getTcpHost() {
return hostTextField.getText();
}
private int getTcpPort() {
return Integer.parseInt(tcpPortTextField.getText());
}
private boolean typeIsSerial() {
return serialRadioButton.isSelected();
}
private int getChannel() {
return Integer.parseInt(channelTextField.getText());
}
private int getDeviceAddress() {
return Integer.parseInt(addressTextField.getText());
}
private int getNetworkID() {
return Integer.parseInt(networkTextField.getText(), 16);
}
private String[] getPorts() {
List<String> serials = new LinkedList<>();
Enumeration<CommPortIdentifier> ports = CommPortIdentifier.getPortIdentifiers();
while (ports.hasMoreElements()) {
CommPortIdentifier cpi = ports.nextElement();
if (cpi.getPortType() == CommPortIdentifier.PORT_SERIAL) {
serials.add(cpi.getName());
}
}
return serials.toArray(new String[]{});
}
private ComboBoxModel<String> portListModel() {
DefaultComboBoxModel<String> mod = new DefaultComboBoxModel<>();
for (String port : getPorts()) {
mod.addElement(port);
}
return mod;
}
private Integer[] getSpeeds() {
return new Integer[]{38400, 19200, 9600};
}
private ComboBoxModel<Integer> speedListModel() {
DefaultComboBoxModel<Integer> mod = new DefaultComboBoxModel<>();
for (Integer speed : getSpeeds()) {
mod.addElement(speed);
}
return mod;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel addressLabel;
private javax.swing.JTextField addressTextField;
private javax.swing.JButton backButton;
private javax.swing.JPanel buttonPanel;
private javax.swing.JButton cancelButton;
private javax.swing.JTextField channelTextField;
private javax.swing.JPanel configNetworkPanel;
private javax.swing.JPanel configSerialPanel;
private javax.swing.JPanel configTcpPanel;
private javax.swing.JPanel contentPanel;
private javax.swing.JPanel createNetworkPanel;
private javax.swing.JButton finishButton;
private javax.swing.JLabel frequencyLabel;
private javax.swing.JPanel headerPanel;
private javax.swing.JLabel hostLabel;
private javax.swing.JTextField hostTextField;
private javax.swing.JSplitPane innerSplitPane;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel networkIDLabel;
private javax.swing.JTextField networkTextField;
private javax.swing.JButton nextButton;
private javax.swing.JSplitPane outerSplitPane;
private javax.swing.JComboBox portComboBox;
private javax.swing.JLabel portLabel;
private javax.swing.JLabel securityLabel;
private javax.swing.JTextField securityTextField;
private javax.swing.JPanel selectTypePanel;
private javax.swing.JRadioButton serialRadioButton;
private javax.swing.JComboBox speedComboBox;
private javax.swing.JLabel speedLabel;
private javax.swing.JLabel tcpPortLabel;
private javax.swing.JTextField tcpPortTextField;
private javax.swing.JRadioButton tcpRadioButton;
private javax.swing.ButtonGroup typeButtonGroup;
// End of variables declaration//GEN-END:variables
private final Frame parent;
private final Model model;
private final Stack<State> state = new Stack<>();
}