package de.unimuenchen.informatik.mnm.masa.agent.voyagermasagateway; import java.awt.*; import java.awt.event.*; import com.sun.java.swing.*; import com.sun.java.swing.event.*; import de.unimuenchen.informatik.mnm.masa.agentSystem.*; import de.unimuenchen.informatik.mnm.masa.agent.*; import de.unimuenchen.informatik.mnm.masa.tools.*; public class VoyagerMasaGatewayApplet extends AgentApplet { /** * AgentSystemService */ AgentSystemService _ass; /** * VoyagerMasaGateway */ VoyagerMasaGateway _voyagerMasaGateway; /** * GUI Elements */ private GridBagLayout _gridLayout = new GridBagLayout(); private JTabbedPane _jtp_panels = new JTabbedPane(); private JTextArea _jta_output = new JTextArea(); private JScrollPane _jscr_output; private JButton _jb_create = new JButton("Create"); private JButton _jb_create_clear = new JButton("Clear"); private JTextField _jt_create_classname = new JTextField("FOOVoyagerAgent",20); private JTextField _jt_create_package = new JTextField("voyageragent",20); private JTextField _jt_create_agentname = new JTextField(20); private JComboBox _jc_create_server = new JComboBox(); private JButton _jb_execute = new JButton("Execute"); private JComboBox _jc_execute_agents= new JComboBox(); private JTextField _jt_execute_method = new JTextField(40); private JTextField _jt_execute_arguments = new JTextField(40); private JButton _jb_migrate = new JButton("Migrate"); private JComboBox _jc_migrate_agents = new JComboBox(); private JComboBox _jc_migrate_server = new JComboBox(); private JTextField _jt_migrate_method = new JTextField(40); private JTextField _jt_migrate_arguments = new JTextField(40); private JComboBox _jc_info_agents = new JComboBox(); private JLabel _jl_info_voyagerserver; private JButton _jb_terminate = new JButton("Terminate"); private JComboBox _jc_terminate_agents= new JComboBox(); /** * Initialize the GUI, init and add elements tu applet */ private void init_gui(){ // create constraint for gridbaglayout, not yet used GridBagConstraints c = new GridBagConstraints(); /////////////////////// // create create-panel ////////////////////// JPanel jpanel_create = new JPanel(false); jpanel_create.setLayout(_gridLayout); // set action listener _jb_create.addActionListener(new AppletActionListener()); _jt_create_agentname.addCaretListener(new AppletCaretListener()); // create labels JLabel jl_create_titel = new JLabel("Create Voyager Agent"); JLabel jl_create_agentname = new JLabel("Agentname:"); JLabel jl_create_classname = new JLabel("Classname:"); JLabel jl_create_package = new JLabel("Package:"); JLabel jl_create_server = new JLabel("Server:"); // set constraints // labels c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(10,10,1,10); _gridLayout.setConstraints(jl_create_agentname,c); _gridLayout.setConstraints(jl_create_classname,c); _gridLayout.setConstraints(jl_create_package,c); _gridLayout.setConstraints(jl_create_server,c); c.insets = new Insets(10,10,10,10); c.anchor = GridBagConstraints.CENTER; _gridLayout.setConstraints(jl_create_titel,c); // elements for user input c.insets = new Insets(1,10,10,10); c.anchor = GridBagConstraints.WEST; _gridLayout.setConstraints(_jc_create_server,c); c.fill = GridBagConstraints.HORIZONTAL; _gridLayout.setConstraints(_jt_create_agentname,c); _gridLayout.setConstraints(_jt_create_classname,c); _gridLayout.setConstraints(_jt_create_package,c); c.insets = new Insets(10,10,10,10); c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.NONE; _gridLayout.setConstraints(_jb_create,c); // set size _jc_create_server.setMaximumSize(new Dimension(getContentPane().getSize().width,_jc_create_server.getSize().height)); // add elements to panel jpanel_create.add(jl_create_titel); jpanel_create.add(jl_create_agentname); jpanel_create.add(_jt_create_agentname); jpanel_create.add(jl_create_classname); jpanel_create.add(_jt_create_classname); jpanel_create.add(jl_create_package); jpanel_create.add(_jt_create_package); jpanel_create.add(jl_create_server); jpanel_create.add(_jc_create_server); jpanel_create.add(_jb_create); // create and add panel to contentpane _jtp_panels.addTab("create",jpanel_create); //////////////////////// // execute panel /////////////////////// JPanel jpanel_execute = new JPanel(false); jpanel_execute.setLayout(_gridLayout); // set actnio listener _jb_execute.addActionListener(new AppletActionListener()); _jt_execute_method.addCaretListener(new AppletCaretListener()); // create labels JLabel jl_execute_titel = new JLabel("Execute Method of Voyager Agent"); JLabel jl_execute_agentname = new JLabel("Agentname:"); JLabel jl_execute_method = new JLabel("Method:"); JLabel jl_execute_arguments = new JLabel("Arguments:"); JLabel jl_execute_descript = new JLabel("(seperated by comma, e.g. \"java.lang.Short 4,java.lang.String Message\")"); // set constraints // labels c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(10,10,1,10); _gridLayout.setConstraints(jl_execute_agentname,c); _gridLayout.setConstraints(jl_execute_method,c); _gridLayout.setConstraints(jl_execute_arguments,c); c.insets = new Insets(1,10,1,10); _gridLayout.setConstraints(jl_execute_descript,c); c.insets = new Insets(10,10,10,10); c.anchor = GridBagConstraints.CENTER; _gridLayout.setConstraints(jl_execute_titel,c); // elements for user input c.insets = new Insets(1,10,10,10); c.anchor = GridBagConstraints.WEST; _gridLayout.setConstraints(_jc_execute_agents,c); c.fill = GridBagConstraints.HORIZONTAL; _gridLayout.setConstraints(_jt_execute_method,c); _gridLayout.setConstraints(_jt_execute_arguments,c); c.anchor = GridBagConstraints.CENTER; c.insets = new Insets(10,10,10,10); c.fill = GridBagConstraints.NONE; _gridLayout.setConstraints(_jb_execute,c); // set size _jc_execute_agents.setMaximumSize(new Dimension(jpanel_execute.getSize().width,_jc_execute_agents.getSize().height)); // add elements to panel jpanel_execute.add(jl_execute_titel); jpanel_execute.add(jl_execute_agentname); jpanel_execute.add(_jc_execute_agents); jpanel_execute.add(jl_execute_method); jpanel_execute.add(_jt_execute_method); jpanel_execute.add(jl_execute_arguments); jpanel_execute.add(jl_execute_descript); jpanel_execute.add(_jt_execute_arguments); jpanel_execute.add(_jb_execute); _jtp_panels.addTab("execute",jpanel_execute); //////////////////////// // migrate panel /////////////////////// JPanel jpanel_migrate = new JPanel(false); jpanel_migrate.setLayout(_gridLayout); // init button _jb_migrate.addActionListener(new AppletActionListener()); // create labels JLabel jl_migrate_titel = new JLabel("Migrate Voyager Agent to Server and Execute Method"); JLabel jl_migrate_agentname = new JLabel("Agentname:"); JLabel jl_migrate_server = new JLabel("Server:"); JLabel jl_migrate_method = new JLabel("Method:"); JLabel jl_migrate_arguments = new JLabel("Arguments:"); JLabel jl_migrate_descript = new JLabel("(seperated by comma, e.g. \"java.lang.Short 4,java.lang.String Message\")"); // set constraints // labels c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.WEST; c.insets = new Insets(10,10,1,10); _gridLayout.setConstraints(jl_migrate_agentname,c); _gridLayout.setConstraints(jl_migrate_server,c); _gridLayout.setConstraints(jl_migrate_method,c); _gridLayout.setConstraints(jl_migrate_arguments,c); c.insets = new Insets(1,10,1,10); _gridLayout.setConstraints(jl_migrate_descript,c); c.insets = new Insets(10,10,10,10); c.anchor = GridBagConstraints.CENTER; _gridLayout.setConstraints(jl_migrate_titel,c); // elements for user input c.insets = new Insets(1,10,10,10); c.anchor = GridBagConstraints.WEST; _gridLayout.setConstraints(_jc_migrate_agents,c); _gridLayout.setConstraints(_jc_migrate_server,c); c.fill = GridBagConstraints.HORIZONTAL; _gridLayout.setConstraints(_jt_migrate_method,c); _gridLayout.setConstraints(_jt_migrate_arguments,c); c.anchor = GridBagConstraints.CENTER; c.insets = new Insets(10,10,10,10); c.fill = GridBagConstraints.NONE; _gridLayout.setConstraints(_jb_migrate,c); // set size _jc_migrate_agents.setMaximumSize(new Dimension(jpanel_migrate.getSize().width,_jc_migrate_agents.getSize().height)); _jc_migrate_server.setMaximumSize(new Dimension(jpanel_migrate.getSize().width,_jc_migrate_server.getSize().height)); // add elements to panel jpanel_migrate.add(jl_migrate_titel); jpanel_migrate.add(jl_migrate_agentname); jpanel_migrate.add(_jc_migrate_agents); jpanel_migrate.add(jl_migrate_server); jpanel_migrate.add(_jc_migrate_server); jpanel_migrate.add(jl_migrate_method); jpanel_migrate.add(_jt_migrate_method); jpanel_migrate.add(jl_migrate_arguments); jpanel_migrate.add(jl_migrate_descript); jpanel_migrate.add(_jt_migrate_arguments); jpanel_migrate.add(_jb_migrate); _jtp_panels.addTab("migrate",jpanel_migrate); //////////////////////// // terminate panel /////////////////////// JPanel jpanel_terminate = new JPanel(false); jpanel_terminate.setLayout(_gridLayout); // set action listener _jb_terminate.addActionListener(new AppletActionListener()); // create label JLabel jl_terminate_titel = new JLabel("Terminate Voyager Agent"); JLabel jl_terminate_agentname = new JLabel("Agentname:"); // set constraints c.anchor = GridBagConstraints.CENTER; _gridLayout.setConstraints(jl_terminate_titel,c); c.anchor = GridBagConstraints.WEST; c.insets = new Insets(10,10,1,10); _gridLayout.setConstraints(jl_terminate_agentname,c); c.gridwidth = GridBagConstraints.REMAINDER; c.insets = new Insets(1,10,10,10); _gridLayout.setConstraints(_jc_terminate_agents,c); c.anchor = GridBagConstraints.CENTER; c.insets = new Insets(10,10,10,10); c.fill = GridBagConstraints.NONE; _gridLayout.setConstraints(_jb_terminate,c); // set size _jc_terminate_agents.setMaximumSize(new Dimension(jpanel_terminate.getSize().width,_jc_execute_agents.getSize().height)); // add elements to panel jpanel_terminate.add(jl_terminate_titel); jpanel_terminate.add(jl_terminate_agentname); jpanel_terminate.add(_jc_terminate_agents); jpanel_terminate.add(_jb_terminate); // add panel to tabbed panel _jtp_panels.addTab("terminate",jpanel_terminate); ///////////////////////////// // info panel //////////////////////////// JPanel jpanel_info = new JPanel(false); jpanel_info.setLayout(_gridLayout); // set action listener _jc_info_agents.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ // update info if(_jc_info_agents.getSelectedItem() != null) _jl_info_voyagerserver.setText(_voyagerMasaGateway.get_server((String) _jc_info_agents.getSelectedItem())); } }); // create label _jl_info_voyagerserver = new JLabel(); JLabel jl_info_titel = new JLabel("Location of Voyager Agent"); JLabel jl_info_isrun = new JLabel("is running on"); // set constraints // labels c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.CENTER; c.insets = new Insets(10,10,10,10); _gridLayout.setConstraints(jl_info_titel,c); c.insets = new Insets(10,10,1,10); _gridLayout.setConstraints(_jc_info_agents,c); c.insets = new Insets(1,10,1,10); _gridLayout.setConstraints(jl_info_isrun,c); c.insets = new Insets(1,10,10,10); _gridLayout.setConstraints(_jl_info_voyagerserver,c); jpanel_info.add(jl_info_titel); jpanel_info.add(_jc_info_agents); jpanel_info.add(jl_info_isrun); jpanel_info.add(_jl_info_voyagerserver); // add panel to tabbed panel _jtp_panels.addTab("info",jpanel_info); /////////////////////////// // init content pane /////////////////////////// getContentPane().setLayout(_gridLayout); // init text area for output _jta_output.setMargin(new Insets(5,5,5,5)); _jta_output.setEditable(false); Color color = new Color(188,210,238); _jta_output.setBackground(color); _jscr_output = new JScrollPane(_jta_output, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); _jscr_output.setBorder(BorderFactory.createTitledBorder("Output")); _jscr_output.setMinimumSize(new Dimension(getContentPane().getSize().width,100)); // init control panel // _jtp_panels.setBorder(BorderFactory.createTitledBorder("Control Agents")); // set constraints c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.CENTER; _gridLayout.setConstraints(_jtp_panels,c); c.fill = GridBagConstraints.BOTH; c.weighty = 2; _gridLayout.setConstraints(_jscr_output,c); // add elements to content pane getContentPane().add(_jtp_panels); getContentPane().add(_jscr_output); } /** * Update the gui after values, like list of agents, have chenged */ private void update_gui(){ String [] agents = _voyagerMasaGateway.list_all_agents(); String [] server = _voyagerMasaGateway.list_all_voyagerserver(); // update comboboxes if (_jc_create_server.getItemCount()!=0) _jc_create_server.removeAllItems(); if (_jc_migrate_agents.getItemCount()!=0) _jc_migrate_agents.removeAllItems(); if (_jc_migrate_server.getItemCount()!=0) _jc_migrate_server.removeAllItems(); if (_jc_terminate_agents.getItemCount()!=0) _jc_terminate_agents.removeAllItems(); if (_jc_execute_agents.getItemCount()!=0) _jc_execute_agents.removeAllItems(); if (_jc_info_agents.getItemCount()!=0) _jc_info_agents.removeAllItems(); // list of agents for(int i=0;i<agents.length;i++){ _jc_migrate_agents.addItem(agents[i]); _jc_terminate_agents.addItem(agents[i]); _jc_execute_agents.addItem(agents[i]); _jc_info_agents.addItem(agents[i]); } //list of voyager server for(int i=0;i<server.length;i++){ _jc_create_server.addItem(server[i]); _jc_migrate_server.addItem(server[i]); } set_buttons(); } /** * Enables or disables buttons depending on the user input */ public void set_buttons(){ // enable or disable buttons // enables create button if user has specified agent name and there is a Voyager server for the agent _jb_create.setEnabled((_jt_create_agentname.getText().length()!=0)&&(_jc_create_server.getItemCount()!= 0)); // enables execute button only if ther is a agent and a method specified _jb_execute.setEnabled((_jc_execute_agents.getItemCount()!= 0)&&(_jt_execute_method.getText().length()!=0)); // enbled if there is an agent and a server to migrate to _jb_migrate.setEnabled((_jc_migrate_agents.getItemCount()!= 0)&&(_jc_migrate_server.getItemCount()!= 0)); // only enabled if there is an agent _jb_terminate.setEnabled(_jc_terminate_agents.getItemCount()!= 0); } /** * Initializes applet: gets AgenSystemService and adds GUI elements to applet */ public void init(){ // get voyager masa gaetway try { org.omg.CORBA.Object obj = initCORBA("VoyagerMasaGateway"); _voyagerMasaGateway = VoyagerMasaGatewayHelper.narrow(obj); }catch(Exception e){ e.printStackTrace(); } init_gui(); update_gui(); } /** * Handles GUI events */ private class AppletActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ // create agent event if(e.getActionCommand().equals("Create")){ try{ String name = _voyagerMasaGateway.create_agent(_jt_create_agentname.getText(), _jt_create_classname.getText(), _jt_create_package.getText(), (String) _jc_create_server.getSelectedItem()); _jta_output.append(_jt_create_agentname.getText() + " as " + name + " created.\n"); }catch(Exception ex){ // user output _jta_output.append("Creation failed: " + ex + "!\n"); } } // migrate agent event else if(e.getActionCommand().equals("Migrate")){ try{ _voyagerMasaGateway.migrate_agent((String) _jc_migrate_agents.getSelectedItem(), (String) _jc_migrate_server.getSelectedItem(), _jt_migrate_method.getText(), _jt_migrate_arguments.getText()); _jta_output.append((String) _jc_migrate_agents.getSelectedItem() + " migrated to " + (String) _jc_migrate_server.getSelectedItem() + ".\n"); }catch(Exception ex){ // user output _jta_output.append("Migration failed: " + ex + "!\n"); } } // terminate agent event else if((e.getActionCommand().equals("Terminate"))){ try{ _voyagerMasaGateway.terminate_agent((String) _jc_terminate_agents.getSelectedItem()); _jta_output.append((String) _jc_terminate_agents.getSelectedItem() + " terminated.\n"); }catch(Exception ex){ // user output _jta_output.append("Termination failed: " + ex + "!\n"); } } // execute method else if((e.getActionCommand().equals("Execute"))){ try{ String result = _voyagerMasaGateway.execute_agent((String) _jc_execute_agents.getSelectedItem(),_jt_execute_method.getText(),_jt_execute_arguments.getText()); _jta_output.append((String) _jc_execute_agents.getSelectedItem() + "." +_jt_execute_method.getText() + "(" + _jt_execute_arguments.getText() + ") executed, result: " + result + "\n"); }catch(Exception ex){ // user output _jta_output.append("Execution failed: " + ex + "!\n"); } } // Update list of agents and voyager server in comboboxes update_gui(); } } /** * ActionListener for the text areas to check whether there was an input * and to update buttons */ private class AppletCaretListener implements CaretListener{ public void caretUpdate(CaretEvent e) { set_buttons(); } } }