package eu.telecom.sudparis.dpwsim.view; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.Icon; import javax.swing.JFileChooser; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; 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; /** * Popup menu handler for devices * * @author Son Han * @date 2013/09/20 * @version 2.0 */ public class DevicePopupMenu extends JPopupMenu implements ActionListener{ private static final long serialVersionUID = 7011246339317624000L; public static final String SAVE = "Save"; public static final String MOVE = "Move"; public static final String DELETE = "Delete"; public static final String CONTROL_PANEL = "Control Panel"; public static final String TOGGLE_ON = "Start"; public static final String TOGGLE_OFF = "Stop"; public DevicePopupMenu(int mode){ JMenuItem menuItem; menuItem = new JMenuItem(DevicePopupMenu.TOGGLE_ON, SwingUtilities.createImageIcon("/res/icon_start.png", 16)); menuItem.addActionListener(this); this.add(menuItem); this.addSeparator(); menuItem = new JMenuItem(DevicePopupMenu.CONTROL_PANEL, SwingUtilities.createImageIcon("/res/icon_info.png", 16)); menuItem.addActionListener(this); this.add(menuItem); menuItem = new JMenuItem(DevicePopupMenu.SAVE, SwingUtilities.createImageIcon("/res/icon_save.png", 16)); menuItem.addActionListener(this); this.add(menuItem); if (mode == DPWSimMainWindow.MODE_SPACE_CREATED) { /* Popup menu item: move device */ menuItem = new JMenuItem(DevicePopupMenu.MOVE, SwingUtilities .createImageIcon("/res/icon_move.png", 16)); menuItem.addActionListener(this); this.add(menuItem); this.addSeparator(); /* Popup menu item: delete device */ menuItem = new JMenuItem(DevicePopupMenu.DELETE, SwingUtilities.createImageIcon("/res/icon_trash.png", 16)); menuItem.addActionListener(this); this.add(menuItem); } } @Override public void actionPerformed(ActionEvent e) { DPWSimMainWindow main_window = MediatorComponent.getInstance().getMainWidow(); DPWSimDevice device = (DPWSimDevice) this.getInvoker(); String command = e.getActionCommand(); main_window.setActiveDevice(device); if (command == MOVE){ //((DPWSimMainWindow) owner).setActiveDevice(device); main_window.setMode(DPWSimMainWindow.MODE_ADDING_DEVICE); } else if (command == DELETE){ int confirm = JOptionPane.showConfirmDialog(null, "Are you sure to delete this device?", "Delete Device", JOptionPane.YES_NO_OPTION); if (confirm == JOptionPane.YES_OPTION){ if (device.getDevice().isRunning()){ try { device.getDevice().stop(); } catch (IOException e1) { e1.printStackTrace(); } } main_window.devices.remove(device); main_window.remove(device); main_window.revalidate(); main_window.repaint(); } } else if (command == CONTROL_PANEL){ DeviceDialog device_dialog = MediatorComponent.getInstance().getDeviceDialog(); DeviceControlPanel control_panel = MediatorComponent.getInstance().getControlPanel(); control_panel.loadDeviceInfo(device); device_dialog.setContentPane(control_panel); device_dialog.setTitle("Device Control Panel"); device_dialog.setSize(520, 320); device_dialog.setVisible(true); } else if (command == TOGGLE_ON){ try { device.getDevice().start(); ((JMenuItem) e.getSource()).setText(TOGGLE_OFF); ((JMenuItem) e.getSource()).setIcon(SwingUtilities.createImageIcon("/res/icon_stop.png", 16)); // Start all the automatic events Iterator<EventProvider> itr = device.getEvs().iterator(); while (itr.hasNext()){ EventProvider ev = itr.next(); if (ev.getFrequency() > 0) ev.start(); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } else if (command == TOGGLE_OFF){ try { device.getDevice().stop(); //device.setRunning(false); ((JMenuItem) e.getSource()).setText(TOGGLE_ON); ((JMenuItem) e.getSource()).setIcon(SwingUtilities.createImageIcon("/res/icon_start.png", 16)); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } else if (command == SAVE){ JFileChooser fc = new JFileChooser("."); int returnVal = fc.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION){ File file = fc.getSelectedFile(); try{ FileOutputStream fout = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fout); oos.writeObject(device); oos.close(); SwingUtilities.showInformationMessage(null, "Device saved!"); }catch(Exception ex){ ex.printStackTrace(); SwingUtilities.showInformationMessage(null, ex.getMessage()); } } } } }