package eu.telecom.sudparis.dpwsim.handler;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import eu.telecom.sudparis.dpws.GenericEvent;
import eu.telecom.sudparis.dpws.GenericOperation;
import eu.telecom.sudparis.dpwsim.upgrade.DPWSimDevice;
import eu.telecom.sudparis.dpwsim.upgrade.DPWSimOperationCommand;
import eu.telecom.sudparis.dpwsim.upgrade.EventProvider;
import eu.telecom.sudparis.dpwsim.upgrade.MediatorComponent;
import eu.telecom.sudparis.dpwsim.upgrade.NewEventPanel;
import eu.telecom.sudparis.dpwsim.upgrade.NewParameterPanel;
import eu.telecom.sudparis.dpwsim.upgrade.OperationParam;
import eu.telecom.sudparis.dpwsim.view.DPWSimMainWindow;
import eu.telecom.sudparis.dpwsim.view.DeviceControlPanel;
import eu.telecom.sudparis.dpwsim.view.DeviceDialog;
import eu.telecom.sudparis.dpwsim.view.tools.SwingUtilities;
public class DeviceControlHandler implements ActionListener{
final JFileChooser fc = new JFileChooser(".");
private File file = null;
@Override
public void actionPerformed(ActionEvent e) {
DeviceControlPanel control_panel = MediatorComponent.getInstance().getControlPanel();
DPWSimMainWindow main_window = MediatorComponent.getInstance().getMainWidow();
DPWSimDevice device = main_window.getActiveDevice();
Object ob = e.getSource();
if (ob == control_panel.getAddOp()){
String name = JOptionPane.showInputDialog("New Operation Name");
if (name != null) {
if (name.equals("")){
SwingUtilities.showErrorMessage(null, "No operation name!");
return;
}
JComboBox combo = control_panel.getOpCombo();
DPWSimOperationCommand command = new DPWSimOperationCommand(device);
GenericOperation op = new GenericOperation(name, device.getDevice().getNamespace(), command);
device.addOperation(op);
combo.setModel(new DefaultComboBoxModel(device.getOperationNames().toArray()));
combo.setSelectedIndex(combo.getItemCount() - 1);
updateFieldsOfOperation(op);
System.out.println(device.getDevice().getFriendlyName("en-US"));
}
} else if (ob == control_panel.getAddPa()){
GenericOperation op = (GenericOperation) device.getOps().get(control_panel.getOpCombo().getSelectedIndex());
DPWSimOperationCommand command = (DPWSimOperationCommand) op.getCommand();
NewParameterPanel panel = new NewParameterPanel();
int confirm = JOptionPane.showConfirmDialog(null, panel, "New param value setup", JOptionPane.OK_CANCEL_OPTION);
if (confirm == JOptionPane.OK_OPTION){
String request = panel.getParamVal().getText();
String response = panel.getReponseMsg().getText();
String url = panel.getIconURL();
if (request.equals("")){
SwingUtilities.showErrorMessage(null, "No operation name provided!");
return;
}
OperationParam param = new OperationParam(request, response, url);
command.getParams().add(param);
updateFieldsOfParam(command.getParams().size() - 1, command);
}
} else if (ob == control_panel.getEditPa()){
GenericOperation op = (GenericOperation) device.getOps().get(control_panel.getOpCombo().getSelectedIndex());
DPWSimOperationCommand command = (DPWSimOperationCommand) op.getCommand();
int index = control_panel.getOpParamCombo().getSelectedIndex();
OperationParam param = command.getParams().get(index);
NewParameterPanel panel = new NewParameterPanel();
panel.getParamVal().setText(param.getRequest());
panel.getReponseMsg().setText(param.getResponse());
SwingUtilities.loadImage(panel.getIconPreview(), param.getUrl(), 24);
panel.setIconURL(param.getUrl());
int confirm = JOptionPane.showConfirmDialog(null, panel, "Edit param value", JOptionPane.OK_CANCEL_OPTION);
if (confirm == JOptionPane.OK_OPTION){
String request = panel.getParamVal().getText();
String response = panel.getReponseMsg().getText();
String url = panel.getIconURL();
if (request.equals("")){
SwingUtilities.showErrorMessage(null, "No operation name provided!");
return;
}
param.setRequest(request);
param.setResponse(response);
param.setUrl(url);
updateFieldsOfParam(index, command);
SwingUtilities.showInformationMessage(null, "Changes saved!");
}
} else if (ob == control_panel.getAddEv()){
NewEventPanel panel = new NewEventPanel();
int confirm = JOptionPane.showConfirmDialog(null, panel, "New event", JOptionPane.OK_CANCEL_OPTION);
if (confirm == JOptionPane.OK_OPTION){
String eventName = panel.getEventName().getText();
String eventMsg = panel.getEventMessage().getText();
int eventFreq = 0;
try {
eventFreq = Integer.parseInt(panel.getEventFrequency().getText());
} catch (Exception ee){
}
if (eventName.equals("")){
SwingUtilities.showErrorMessage(null, "No event name provided!");
return;
}
device.addEvent(eventName, eventMsg, eventFreq);
int i = device.getEvs().size() - 1;
EventProvider event = device.getEvs().get(i);
control_panel.getEvCombo().setModel(new DefaultComboBoxModel(device.getEventNames().toArray()));
control_panel.getEvCombo().setSelectedIndex(i);
updateFieldsOfEvent(event);
}
} else if (ob == control_panel.getEditEv()){
JComboBox comboEvt = control_panel.getEvCombo();
int index = comboEvt.getSelectedIndex();
EventProvider event = device.getEvs().get(index);
NewEventPanel panel = new NewEventPanel();
panel.getEventName().setText(event.getEvent().getName());
panel.getEventName().setEditable(false);
panel.getEventMessage().setText(event.getMessage());
panel.getEventFrequency().setText(event.getFrequency() + "");
int confirm = JOptionPane.showConfirmDialog(null, panel, "Edit event", JOptionPane.OK_CANCEL_OPTION);
if (confirm == JOptionPane.OK_OPTION){
String eventName = panel.getEventName().getText();
String eventMsg = panel.getEventMessage().getText();
int eventFreq = 0;
try {
eventFreq = Integer.parseInt(panel.getEventFrequency().getText());
} catch (Exception ee){
}
event.setMessage(eventMsg);
event.setFrequency(eventFreq);
updateFieldsOfEvent(event);
SwingUtilities.showInformationMessage(null, "Changes saved!");
}
} else if (ob == control_panel.getOpCombo()){
GenericOperation op = (GenericOperation) device.getOps().get(control_panel.getOpCombo().getSelectedIndex());
updateFieldsOfOperation(op);
} else if (ob == control_panel.getOpParamCombo()){
GenericOperation op = (GenericOperation) device.getOps().get(control_panel.getOpCombo().getSelectedIndex());
DPWSimOperationCommand command = (DPWSimOperationCommand) op.getCommand();
updateFieldsOfParam(control_panel.getOpParamCombo().getSelectedIndex(), command);
} else if (ob == control_panel.getEvCombo()){
EventProvider evtProvider = (EventProvider) device.getEvs().get(control_panel.getEvCombo().getSelectedIndex());
updateFieldsOfEvent(evtProvider);
} else if (ob == control_panel.getFireEvent()){
control_panel.getActiveEvent().fireEvent();
}
else if (ob == control_panel.getDeletePa()){
int confirm = JOptionPane.showConfirmDialog(null, "Do you really want to delete this value?");
if (confirm == JOptionPane.YES_OPTION){
int index = control_panel.getOpParamCombo().getSelectedIndex();
GenericOperation op = (GenericOperation) device.getOps().get(control_panel.getOpCombo().getSelectedIndex());
DPWSimOperationCommand command = (DPWSimOperationCommand) op.getCommand();
command.getParams().remove(index);
updateFieldsOfOperation(op);
SwingUtilities.showInformationMessage(null, "Request value deleted!");
}
} else if (ob == control_panel.getStartDevice()){
if (e.getActionCommand().equals("Start")){
try {
device.getDevice().start();
((JButton) ob).setText("Stop");
((JButton) ob).setIcon(SwingUtilities.createImageIcon("/res/icon_stop.png", 16));
Iterator<EventProvider> itr = device.getEvs().iterator();
while (itr.hasNext()){
EventProvider ev = itr.next();
if (ev.getFrequency() > 0) ev.start();
}
} catch (IOException e1) {
e1.printStackTrace();
}
} else if (e.getActionCommand().equals("Stop")){
try {
device.getDevice().stop();
((JButton) ob).setText("Start");
((JButton) ob).setIcon(SwingUtilities.createImageIcon("/res/icon_start.png", 16));
} catch (IOException e1) {
e1.printStackTrace();
}
}
} else if (ob == control_panel.getCloseButton()){
DeviceDialog device_dialog = MediatorComponent.getInstance().getDeviceDialog();
device_dialog.dispose();
}
System.out.println(e.getActionCommand());
}
public static void updateFieldsOfOperation(GenericOperation op) {
DeviceControlPanel control_panel = MediatorComponent.getInstance().getControlPanel();
JComboBox comboParam = control_panel.getOpParamCombo();
DPWSimOperationCommand command = (DPWSimOperationCommand) op.getCommand();
comboParam.setModel(new DefaultComboBoxModel(command.getParams().toArray()));
control_panel.getAddPa().setEnabled(true);
int n = comboParam.getItemCount() - 1;
comboParam.setSelectedIndex(n);
updateFieldsOfParam(n, command);
}
public static void updateFieldsOfParam(int n, DPWSimOperationCommand command) {
DeviceControlPanel control_panel = MediatorComponent.getInstance().getControlPanel();
control_panel.getOpParamCombo().setModel(new DefaultComboBoxModel(command.getParams().toArray()));
control_panel.getOpParamCombo().setSelectedIndex(n);
if (n >= 0) {
OperationParam param = (OperationParam) command.getParams().get(n);
control_panel.getOpOutputField().setText(param.getResponse());
SwingUtilities.loadImage(control_panel.getIconPreview(), param.getUrl(), 20);
control_panel.getEditPa().setEnabled(true);
control_panel.getDeletePa().setEnabled(true);
} else {
control_panel.getOpOutputField().setText("");
//control_panel.getUrlField().setText(SwingUtilities.DEFAULT_IMAGE_TEXT);
control_panel.getIconPreview().setIcon(null);
control_panel.getEditPa().setEnabled(false);
control_panel.getDeletePa().setEnabled(false);
}
}
public static void updateFieldsOfEvent(EventProvider evtProvider) {
DeviceControlPanel control_panel = MediatorComponent.getInstance().getControlPanel();
DPWSimMainWindow main_window = MediatorComponent.getInstance().getMainWidow();
DPWSimDevice device = main_window.getActiveDevice();
//control_panel.getEvCombo().setModel(new DefaultComboBoxModel(device.getEventNames().toArray()));
if (evtProvider != null) {
control_panel.setActiveEvent(evtProvider);
control_panel.getEvMessageField().setText(evtProvider.getMessage());
control_panel.getEvFreqField().setText(evtProvider.getFrequency() + "");
if (evtProvider.getFrequency() > 0) control_panel.getFireEvent().setEnabled(false);
else if (device.getDevice().isRunning()) control_panel.getFireEvent().setEnabled(true);
control_panel.getEditEv().setEnabled(true);
} else {
control_panel.getEvMessageField().setText("");
control_panel.getEvFreqField().setText("");
control_panel.getFireEvent().setEnabled(false);
control_panel.getEditEv().setEnabled(false);
}
}
}