package eu.telecom.sudparis.dpwsim.view;
import java.awt.GridBagConstraints;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import eu.telecom.sudparis.dpws.GenericOperation;
import eu.telecom.sudparis.dpwsim.handler.DeviceControlHandler;
import eu.telecom.sudparis.dpwsim.upgrade.DPWSimDevice;
import eu.telecom.sudparis.dpwsim.upgrade.EventProvider;
import eu.telecom.sudparis.dpwsim.upgrade.MediatorComponent;
import eu.telecom.sudparis.dpwsim.view.tools.SwingUtilities;
/**
* Device Control Panel
*
* @author Son Han
* @date 2013/12/07
* @version 1.0
*/
@SuppressWarnings("serial")
public class DeviceControlPanel extends JPanel implements PanelInterface {
public JTextField nameField = new JTextField();
public JTextField manField = new JTextField();
public JTextField ipField = new JTextField();
public JTextField httpPortField = new JTextField();
public JTextField typeField = new JTextField();
public JTextField nsField = new JTextField();
private JComboBox opCombo = new JComboBox();
private JComboBox opParamCombo = new JComboBox();
private JTextField paResponseField = new JTextField();
private JLabel iconPreview = new JLabel();
private JComboBox evCombo = new JComboBox();
private JTextField evMessageField = new JTextField();
private JTextField evFreqField = new JTextField();
private JButton fireEvent = new JButton("Fire event");
private JButton addOp = new JButton("+");
private JButton deleteOp = new JButton("-");
private JButton editOp = new JButton(SwingUtilities.createImageIcon("/res/icon_edit.png", 15));
private JButton addPa = new JButton("+");
private JButton deletePa = new JButton("-");
private JButton editPa = new JButton(SwingUtilities.createImageIcon("/res/icon_edit.png", 16));
private JButton addEv = new JButton("+");
private JButton deleteEv = new JButton("-");
private JButton editEv = new JButton(SwingUtilities.createImageIcon("/res/icon_edit.png", 16));
private JButton startDevice = new JButton("Start", SwingUtilities.createImageIcon("/res/icon_start.png", 16));
private JButton closeButton = new JButton("Close");
EventProvider activeEvent;
public DeviceControlPanel(DeviceControlHandler deviceControlHandler) {
super();
MediatorComponent.getInstance().setControlPanel(this);
initComponents(deviceControlHandler);
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
GridBagLayout gridbag = new GridBagLayout();
this.setLayout(gridbag);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(1, 1, 1, 1);
c.weightx = 1;
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridy = 0; this.add(createInfoPanel(), c);
c.gridy++; this.add(createOperationPanel(), c);
c.gridy++; this.add(createEventPanel(), c);
c.weighty = 1;
JPanel controlPanel = new JPanel();
controlPanel.add(startDevice);
controlPanel.add(closeButton);
c.gridy++; this.add(controlPanel, c);
}
private JPanel createInfoPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
//panel.setBorder(BorderFactory.createEtchedBorder());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(2, 2, 2, 2);
c.gridy = 0;
c.weightx = 0; panel.add(new JLabel("Device Name"), c);
c.weightx = 0.5; panel.add(nameField, c);
c.weightx = 0; panel.add(new JLabel("Manufacturer"), c);
c.weightx = 0.5; panel.add(manField, c);
c.gridy++;
c.weightx = 0; panel.add(new JLabel("Namespace"), c);
c.weightx = 0.5; panel.add(nsField, c);
c.weightx = 0; panel.add(new JLabel("IP Address"), c);
c.weightx = 0.5; panel.add(ipField, c);
c.gridy++;
c.weightx = 0; panel.add(new JLabel("HTTP Port"), c);
c.weightx = 0.5; panel.add(httpPortField, c);
c.weightx = 0; panel.add(new JLabel("Type"), c);
c.weightx = 0.5; panel.add(typeField, c);
return panel;
}
private JPanel createOperationPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.setBorder(BorderFactory.createTitledBorder("Operations"));
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(1, 1, 1, 1);
c.gridy = 0;
JPanel panelTemp = new JPanel();
panelTemp.setAlignmentX(LEFT_ALIGNMENT);
((FlowLayout) (panelTemp.getLayout())).setVgap(0);
((FlowLayout) (panelTemp.getLayout())).setHgap(0);
panelTemp.add(addOp, c); panelTemp.add(deleteOp, c); panelTemp.add(editOp);
c.weightx = 1; panel.add(opCombo, c);
c.fill = GridBagConstraints.VERTICAL;
c.weightx = 0; panel.add(panelTemp);
c.fill = GridBagConstraints.BOTH;
c.gridy++;
c.weightx = 1;
panel.add(new JLabel("Request Value"), c);
panel.add(new JLabel("Response Message"), c);
c.weightx = 0; panel.add(new JLabel("Status Image"), c);
c.gridy++;
c.weightx = 1; panel.add(opParamCombo, c);
c.weightx = 1; panel.add(paResponseField, c);
// panel.add(urlField, c);
c.weightx = 0; panel.add(iconPreview, c);
panel.add(addPa, c);
panel.add(deletePa, c);
panel.add(editPa, c);
return panel;
}
private JPanel createEventPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.setBorder(BorderFactory.createTitledBorder("Events"));
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(1, 1, 1, 1);
c.weightx = 1;
c.gridy = 0;
panel.add(new JLabel(""), c);
panel.add(new JLabel("Notification Message"), c);
panel.add(new JLabel("Frequency"), c);
c.gridy++;
panel.add(evCombo, c);
panel.add(evMessageField, c);
panel.add(evFreqField, c);
c.weightx = 0;
panel.add(fireEvent, c);
panel.add(addEv, c);
panel.add(deleteEv, c);
panel.add(editEv, c);
return panel;
}
private void initComponents(DeviceControlHandler deviceControlHandler) {
nameField.setEditable(false);
manField.setEditable(false);
ipField.setEditable(false);
httpPortField.setEditable(false);
typeField.setEditable(false);
nsField.setEditable(false);
iconPreview.setBorder(BorderFactory.createEtchedBorder());
iconPreview.setHorizontalAlignment(JLabel.CENTER);
opCombo.addActionListener(deviceControlHandler);
addOp.addActionListener(deviceControlHandler); addOp.setToolTipText("Add new operation");
opParamCombo.addActionListener(deviceControlHandler);
deletePa.addActionListener(deviceControlHandler); deletePa.setToolTipText("Delete request value");
editPa.addActionListener(deviceControlHandler); editPa.setToolTipText("Edit request value");
addPa.addActionListener(deviceControlHandler); addPa.setToolTipText("Add request value");
evCombo.addActionListener(deviceControlHandler);
fireEvent.addActionListener(deviceControlHandler);
addEv.addActionListener(deviceControlHandler); addEv.setToolTipText("Add new event");
editEv.addActionListener(deviceControlHandler); editEv.setToolTipText("Edit event");
startDevice.addActionListener(deviceControlHandler);
closeButton.addActionListener(deviceControlHandler);
paResponseField.setEditable(false);
evMessageField.setEditable(false);
evFreqField.setEditable(false);
addPa.setEnabled(false);
deletePa.setEnabled(false);
editPa.setEnabled(false);
editEv.setEnabled(false);
}
@Override
public void reset() {
// TODO Auto-generated method stub
}
@Override
public boolean invariant() {
// TODO Auto-generated method stub
return false;
}
public void loadDeviceInfo(DPWSimDevice device) {
nameField.setText(device.getDevice().getFriendlyName("en-US"));
manField.setText(device.getDevice().getManufacturer("en-US"));
nsField.setText(device.getDevice().getNamespace());
ipField.setText(device.getDevice().getHttpBindIP());
httpPortField.setText(device.getDevice().getPortDevice() + "");
typeField.setText(device.getDevice().getPortType());
opCombo.setModel(new DefaultComboBoxModel(device.getOperationNames().toArray()));
if (device.getOps().size() > 0){
DeviceControlHandler.updateFieldsOfOperation(device.getOps().get(0));
}
evCombo.setModel(new DefaultComboBoxModel(device.getEventNames().toArray()));
if (device.getEvs().size() > 0){
DeviceControlHandler.updateFieldsOfEvent(device.getEvs().get(0));
}
boolean isRunning = device.getDevice().isRunning();
addOp.setEnabled(!isRunning);
addEv.setEnabled(!isRunning);
fireEvent.setEnabled(isRunning);
if (isRunning) {
startDevice.setText("Stop");
startDevice.setIcon(SwingUtilities.createImageIcon("/res/icon_stop.png", 16));
}
else {
startDevice.setText("Start");
startDevice.setIcon(SwingUtilities.createImageIcon("/res/icon_start.png", 16));
}
}
public JTextField getNameField() {
return nameField;
}
public void setNameField(JTextField nameField) {
this.nameField = nameField;
}
public JTextField getManField() {
return manField;
}
public void setManField(JTextField manField) {
this.manField = manField;
}
public JTextField getIpField() {
return ipField;
}
public void setIpField(JTextField ipField) {
this.ipField = ipField;
}
public JTextField getHttpPortField() {
return httpPortField;
}
public void setHttpPortField(JTextField httpPortField) {
this.httpPortField = httpPortField;
}
public JTextField getTypeField() {
return typeField;
}
public void setTypeField(JTextField typeField) {
this.typeField = typeField;
}
public JTextField getNsField() {
return nsField;
}
public void setNsField(JTextField nsField) {
this.nsField = nsField;
}
public JComboBox getOpCombo() {
return opCombo;
}
public void setOpCombo(JComboBox opCombo) {
this.opCombo = opCombo;
}
public JComboBox getOpParamCombo() {
return opParamCombo;
}
public void setOpParamCombo(JComboBox opParamCombo) {
this.opParamCombo = opParamCombo;
}
public JTextField getOpOutputField() {
return paResponseField;
}
public void setOpOutputField(JTextField opOutputField) {
this.paResponseField = opOutputField;
}
// public JButton getOpSetButton() {
// return opSetButton;
// }
//
//
// public void setOpSetButton(JButton opSetButton) {
// this.opSetButton = opSetButton;
// }
//
//
// public JButton getOpDelButton() {
// return opDelButton;
// }
//
//
// public void setOpDelButton(JButton opDelButton) {
// this.opDelButton = opDelButton;
// }
public JLabel getIconPreview() {
return iconPreview;
}
public void setIconPreview(JLabel urlPreview) {
this.iconPreview = urlPreview;
}
public JComboBox getEvCombo() {
return evCombo;
}
public void setEvCombo(JComboBox evCombo) {
this.evCombo = evCombo;
}
public JTextField getEvMessageField() {
return evMessageField;
}
public void setEvMessageField(JTextField evMessageField) {
this.evMessageField = evMessageField;
}
public JTextField getEvFreqField() {
return evFreqField;
}
public void setEvFreqField(JTextField evFreqField) {
this.evFreqField = evFreqField;
}
public JButton getFireEvent() {
return fireEvent;
}
public void setFireEvent(JButton fireEvent) {
this.fireEvent = fireEvent;
}
// public JButton getEvSetButton() {
// return evSetButton;
// }
//
//
// public void setEvSetButton(JButton evSetButton) {
// this.evSetButton = evSetButton;
// }
//
//
// public JButton getEvDelButton() {
// return evDelButton;
// }
//
//
// public void setEvDelButton(JButton evDelButton) {
// this.evDelButton = evDelButton;
// }
public JButton getAddOp() {
return addOp;
}
public void setAddOp(JButton addOp) {
this.addOp = addOp;
}
public JButton getAddEv() {
return addEv;
}
public void setAddEv(JButton addEv) {
this.addEv = addEv;
}
public JButton getAddPa() {
return addPa;
}
public void setAddPa(JButton addPa) {
this.addPa = addPa;
}
public EventProvider getActiveEvent() {
return activeEvent;
}
public void setActiveEvent(EventProvider activeEvent) {
this.activeEvent = activeEvent;
}
public JButton getDeletePa() {
return deletePa;
}
public void setDeletePa(JButton deletePa) {
this.deletePa = deletePa;
}
public JButton getEditPa() {
return editPa;
}
public void setEditPa(JButton editPa) {
this.editPa = editPa;
}
public JButton getEditEv() {
return editEv;
}
public void setEditEv(JButton editEv) {
this.editEv = editEv;
}
public JButton getStartDevice() {
return startDevice;
}
public void setStartDevice(JButton startDevice) {
this.startDevice = startDevice;
}
public JButton getCloseButton() {
return closeButton;
}
public void setCloseButton(JButton closeButton) {
this.closeButton = closeButton;
}
}