/*
* TeleStax, Open Source Cloud Communications Copyright 2012.
* and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.protocols.ss7.tools.simulatorgui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Date;
import java.util.Vector;
import javax.management.Notification;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.LineBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import org.mobicents.protocols.ss7.tools.simulator.management.TesterHost;
import org.mobicents.protocols.ss7.tools.simulator.management.TesterHostMBean;
/**
*
* @author sergey vetyutnev
*
*/
public class TestingForm extends JDialog {
private static final long serialVersionUID = -3725574796168603069L;
private DefaultTableModel model = new DefaultTableModel();
private EventForm eventForm;
private SimulatorGuiForm mainForm;
private javax.swing.Timer tm;
private JPanel panel;
protected TesterHostMBean host;
private JTextField tbL1State;
private JTable tNotif;
private JButton btStart;
private JButton btStop;
private JButton btRefresh;
private JPanel panel_b;
protected JPanel panel_c;
private JPanel panel_a_1;
private JLabel lblLState_1;
private JPanel panel_a_but;
private JPanel panel_a;
private JScrollPane scrollPane;
private JLabel lblLState;
private JTextField tbL2State;
private JLabel lblLState_2;
private JTextField tbL3State;
private JLabel lblTestingState;
private JLabel lbTestState;
private JButton btnOpenEventWindow;
private JPanel panel_1;
private JPanel panel_2;
private JPanel panel_3;
public TestingForm(JFrame owner) {
super(owner, true);
setModal(false);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
if (getDefaultCloseOperation() == JDialog.DO_NOTHING_ON_CLOSE) {
JOptionPane.showMessageDialog(getJFrame(), "Before exiting you must Stop the testing process");
} else {
closingWindow();
}
}
});
setBounds(100, 100, 772, 677);
panel = new JPanel();
getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(3, 1, 0, 0));
panel_a = new JPanel();
panel.add(panel_a);
panel_a.setLayout(new BorderLayout(0, 0));
panel_a_1 = new JPanel();
panel_a.add(panel_a_1);
panel_a_1.setLayout(new BoxLayout(panel_a_1, BoxLayout.Y_AXIS));
panel_2 = new JPanel();
panel_a_1.add(panel_2);
GridBagLayout gbl_panel_2 = new GridBagLayout();
gbl_panel_2.columnWidths = new int[] { 0, 0, 0 };
gbl_panel_2.rowHeights = new int[] { 0, 0, 0, 0 };
gbl_panel_2.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE };
gbl_panel_2.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
panel_2.setLayout(gbl_panel_2);
lblLState_1 = new JLabel("L1 state");
GridBagConstraints gbc_lblLState_1 = new GridBagConstraints();
gbc_lblLState_1.insets = new Insets(0, 0, 5, 5);
gbc_lblLState_1.gridx = 0;
gbc_lblLState_1.gridy = 0;
panel_2.add(lblLState_1, gbc_lblLState_1);
tbL1State = new JTextField();
GridBagConstraints gbc_tbL1State = new GridBagConstraints();
gbc_tbL1State.fill = GridBagConstraints.HORIZONTAL;
gbc_tbL1State.insets = new Insets(0, 0, 5, 0);
gbc_tbL1State.gridx = 1;
gbc_tbL1State.gridy = 0;
panel_2.add(tbL1State, gbc_tbL1State);
tbL1State.setMinimumSize(new Dimension(100, 20));
tbL1State.setPreferredSize(new Dimension(400, 20));
tbL1State.setEditable(false);
tbL1State.setColumns(10);
lblLState = new JLabel("L2 state");
GridBagConstraints gbc_lblLState = new GridBagConstraints();
gbc_lblLState.insets = new Insets(0, 0, 5, 5);
gbc_lblLState.gridx = 0;
gbc_lblLState.gridy = 1;
panel_2.add(lblLState, gbc_lblLState);
tbL2State = new JTextField();
GridBagConstraints gbc_tbL2State = new GridBagConstraints();
gbc_tbL2State.fill = GridBagConstraints.HORIZONTAL;
gbc_tbL2State.insets = new Insets(0, 0, 5, 0);
gbc_tbL2State.gridx = 1;
gbc_tbL2State.gridy = 1;
panel_2.add(tbL2State, gbc_tbL2State);
tbL2State.setPreferredSize(new Dimension(400, 20));
tbL2State.setMinimumSize(new Dimension(100, 20));
tbL2State.setEditable(false);
tbL2State.setColumns(10);
lblLState_2 = new JLabel("L3 state");
GridBagConstraints gbc_lblLState_2 = new GridBagConstraints();
gbc_lblLState_2.insets = new Insets(0, 0, 0, 5);
gbc_lblLState_2.gridx = 0;
gbc_lblLState_2.gridy = 2;
panel_2.add(lblLState_2, gbc_lblLState_2);
tbL3State = new JTextField();
GridBagConstraints gbc_tbL3State = new GridBagConstraints();
gbc_tbL3State.fill = GridBagConstraints.HORIZONTAL;
gbc_tbL3State.gridx = 1;
gbc_tbL3State.gridy = 2;
panel_2.add(tbL3State, gbc_tbL3State);
tbL3State.setPreferredSize(new Dimension(400, 20));
tbL3State.setMinimumSize(new Dimension(100, 20));
tbL3State.setEditable(false);
tbL3State.setColumns(10);
panel_3 = new JPanel();
panel_a_1.add(panel_3);
GridBagLayout gbl_panel_3 = new GridBagLayout();
gbl_panel_3.columnWidths = new int[] { 0, 0, 0 };
gbl_panel_3.rowHeights = new int[] { 0, 0 };
gbl_panel_3.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE };
gbl_panel_3.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
panel_3.setLayout(gbl_panel_3);
lblTestingState = new JLabel("Testing state");
GridBagConstraints gbc_lblTestingState = new GridBagConstraints();
gbc_lblTestingState.insets = new Insets(0, 0, 0, 5);
gbc_lblTestingState.gridx = 0;
gbc_lblTestingState.gridy = 0;
panel_3.add(lblTestingState, gbc_lblTestingState);
lbTestState = new JLabel("-");
GridBagConstraints gbc_lbTestState = new GridBagConstraints();
gbc_lbTestState.gridx = 1;
gbc_lbTestState.gridy = 0;
panel_3.add(lbTestState, gbc_lbTestState);
panel_a_but = new JPanel();
panel_a.add(panel_a_but, BorderLayout.SOUTH);
btStart = new JButton("Start");
panel_a_but.add(btStart);
btStop = new JButton("Stop");
panel_a_but.add(btStop);
btStop.setEnabled(false);
btRefresh = new JButton("Refresh state");
panel_a_but.add(btRefresh);
btnOpenEventWindow = new JButton("Open event window");
btnOpenEventWindow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openEventWindow();
}
});
panel_a_but.add(btnOpenEventWindow);
btRefresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
refreshState();
}
});
btStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
host.stop();
} catch (Throwable e1) {
JOptionPane.showMessageDialog(getJFrame(), "Exception: " + e1.toString());
}
btStart.setEnabled(true);
btStop.setEnabled(false);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
});
btStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btStart.setEnabled(false);
btStop.setEnabled(true);
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
try {
host.start();
} catch (Throwable e1) {
JOptionPane.showMessageDialog(getJFrame(), "Exception: " + e1.toString());
}
}
});
panel_b = new JPanel();
panel.add(panel_b);
panel_b.setLayout(new GridLayout(1, 1, 0, 0));
tNotif = new JTable();
tNotif.setFillsViewportHeight(true);
tNotif.setBorder(new LineBorder(new Color(0, 0, 0)));
tNotif.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tNotif.setModel(new DefaultTableModel(new Object[][] {}, new String[] { "TimeStamp", "Source", "Message", "UserData" }) {
Class[] columnTypes = new Class[] { String.class, String.class, String.class, String.class };
public Class getColumnClass(int columnIndex) {
return columnTypes[columnIndex];
}
boolean[] columnEditables = new boolean[] { false, false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
tNotif.getColumnModel().getColumn(0).setPreferredWidth(46);
tNotif.getColumnModel().getColumn(1).setPreferredWidth(89);
tNotif.getColumnModel().getColumn(2).setPreferredWidth(221);
tNotif.getColumnModel().getColumn(3).setPreferredWidth(254);
scrollPane = new JScrollPane(tNotif);
panel_b.add(scrollPane);
model = (DefaultTableModel) tNotif.getModel();
tNotif.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
if (eventForm == null)
return;
// ����� ������� ������ �������
setEventMsg();
}
});
panel_c = new JPanel();
panel.add(panel_c);
panel_c.setLayout(new BorderLayout(0, 0));
panel_1 = new JPanel();
panel_c.add(panel_1, BorderLayout.CENTER);
}
private void setEventMsg() {
ListSelectionModel l = tNotif.getSelectionModel();
if (!l.isSelectionEmpty()) {
int index = l.getMinSelectionIndex();
String s1 = (String) model.getValueAt(index, 0);
String s2 = (String) model.getValueAt(index, 1);
String s3 = (String) model.getValueAt(index, 2);
String s4 = (String) model.getValueAt(index, 3);
eventForm.setData(s1, s2, s3, s4);
}
}
public void setData(SimulatorGuiForm mainForm, final TesterHostMBean host) {
this.host = host;
this.mainForm = mainForm;
this.tm = new javax.swing.Timer(5000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
refreshState();
}
});
this.tm.start();
}
private JDialog getJFrame() {
return this;
}
public void refreshState() {
if (this.host instanceof TesterHost) {
TesterHost thost = (TesterHost)host;
thost.execute();
}
tbL1State.setText(this.host.getL1State());
tbL2State.setText(this.host.getL2State());
tbL3State.setText(this.host.getL3State());
lbTestState.setText(this.host.getTestTaskState());
}
public void sendNotif(Notification notif) {
Date d1 = new Date(notif.getTimeStamp());
String s1 = d1.toLocaleString();
Vector newRow = new Vector();
newRow.add(s1);
newRow.add(notif.getType());
newRow.add(notif.getMessage());
newRow.add(notif.getUserData());
model.getDataVector().add(0, newRow);
model.newRowsAdded(new TableModelEvent(model));
}
public void eventFormClose() {
this.eventForm = null;
}
private void openEventWindow() {
if (this.eventForm != null)
return;
this.eventForm = new EventForm(this);
this.eventForm.setVisible(true);
setEventMsg();
}
private void closingWindow() {
this.mainForm.testingFormClose();
}
}