next up previous contents
Next: Listing des RegionManagementAgentApplets Up: No Title Previous: E Listing von CommonAppletHelpers

F Listing des AgentSystemApplets

package __MASA_PACKAGE_agent__(AgentSystem);

import __MASA_PACKAGE_agentSystem__(*);
import __MASA_PACKAGE_agent__(ASManagementAgent.*);
import __MASA_PACKAGE_agent__(AgentApplet);
import __MASA_PACKAGE_agent__(Migration);
import __MASA_PACKAGE_agent__(MigrationHelper);
import __MASA_PACKAGE__(tools.NameWrapper);
import __MASA_PACKAGE_CfMAF__(*);

import java.awt.*;
import java.applet.*;
import java.util.*;
import java.io.*;

import java.awt.event.*;
import com.sun.java.swing.*; 
import com.sun.java.swing.text.*;
import com.sun.java.swing.table.*;
import com.sun.java.swing.event.*;
import com.sun.java.swing.JOptionPane;

import org.omg.CosEventComm.*;
import org.omg.CosEventChannelAdmin.*;
import org.omg.CosNaming.*;


/**
 *      The applet of the agent system. This applet is loaded,
 *      when the webserver agent is contacted via http the first
 *      time.
 *
 *      <br>(See Mobile Agent Facility (MAF)
 *       of Open Management Group (OMG))
 *
 *      @author Stefan Gerber
 *      @see de.unimuenchen.informatik.mnm.masa.agent.webserver.WebserverStationaryAgent
 */

public class AgentSystemApplet extends AgentApplet
{
    /*
     * CORBA reference to the agent system
     */
    private AgentSystemService _ass;

    private ASManagementAgent _asm;

    private JButton _bt_create_agent;
    private JButton _bt_transferAgent;
    private JButton _bt_resume_agent;
    private JButton _bt_suspend_agent;
    private JButton _bt_terminate_agent;
    private JButton _bt_get_agent_system_info;
    private JButton _bt_terminate_agent_system;
    private JButton _bt_readAgentFromFile;
    private JButton _bt_writeAgentToFile;
    private JButton _bt_showwebpage;
    private JButton _bt_update_list;
    private JButton _bt_update_impl_agents;

    private JTextArea _ta_output_agent;
    private JTextArea _ta_output_agent_system;
    private JTextArea _ta_output_create_agent;

    private JTextField _tf_file;

    private JComboBox _ch_create_exclusive;
    private JComboBox _ch_impl_agents;
    private JComboBox _ch_constructors = null;

    private JLabel _label_exclusive;
    private JLabel _label_identity;
    private JLabel _label_file;
    private JLabel _label_agentTable;

    private AppletTableModel myModel;
    private JTable agentTable;
    private JScrollPane tableScrollPane;
    private ListSelectionModel listSelectionModel;
    private String agent_identity = null;
    private java.awt.Component parentComponent;

    private String impl_agent_list[];     //list of implemented agents generated by get_impl_agents
    private String impl_package_list[];   //other data concerning implemented agents list
    private String impl_type_list[];      // ""    ""    ""
    private ActionListener actionlistener_ch_impl_agents;

    private JLabel constructors;
    private String[] constructor_list;
    
    private ParameterTableModel paramTableModel;
    private JTable paramTable;
    private JScrollPane paramScrollPane;

    private String agent_system_name;
    private Vector[] param_matrix;
    private PushConsumerImpl pushConsumer = null;




    /**
   *      Initialize this applet and connect to agent system.
   *      <br>Sets and displays all JFC components and calls various methods to get initial information 
   *      about the agent system and itīs agents (e.g. list of running agents, list of implemented agents 
   *      and their parameters)
   *      <br>Connects to the agent system and to the ASManagementAgent
   *
   *      @see AgentSystemService
   *      @see ASManagementAgent
   */

    public void init()
    {

        // Connect to appropriate agent system 
        try {
            org.omg.CORBA.Object obj = initCORBA("AgentSystemService");
            _ass = AgentSystemServiceHelper.narrow(obj);
        }
        catch(java.net.MalformedURLException e) {//error
            _ta_output_agent_system.append(e.toString()+"\n");
        }
        catch(java.io.IOException ioe) {//error
            _ta_output_agent_system.append(ioe.toString()+"\n");
        }


        // Connect to ASManagement Agent
        try {
            org.omg.CORBA.Object objekt = initCORBA("ASManagementAgent");
            _asm = ASManagementAgentHelper.narrow(objekt);
        }
        catch(java.net.MalformedURLException e) {
            System.err.println(e.toString()+"\n");
            e.printStackTrace();
        }
        catch(java.io.IOException ioe) {//error
            System.err.println(ioe.toString()+"\n");
            ioe.printStackTrace();
        }

        // test if ASManagementAgent has been found
        // if not, then display warning message
        if (_asm == null) {
            JOptionPane.showMessageDialog(null, "ASManagementAgent could not be found.\nPlease load it and restart the applet.");
        }
        else {
            //Create tabbed Panel
            JTabbedPane tabbedPane = new JTabbedPane();

            // Set layout to GridBag
            GridBagLayout gridBag = new GridBagLayout();
            getContentPane().setLayout(gridBag);
            GridBagConstraints c_root = new GridBagConstraints();


            /**********************************************************
             *******  Panel for "Manage Agents"    *********************
             ***********************************************************/

            //Create Layout Manager for "Manage Agents" Part
            GridBagLayout manage_agents_gridBag = new GridBagLayout();
            GridBagConstraints c1 = new GridBagConstraints();

            // Create Panel for "Manage agents" part
            JPanel manage_agents_panel = new JPanel(manage_agents_gridBag);

            //Create JFC components and arrange them
            //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            c1.fill = GridBagConstraints.HORIZONTAL;
            c1.gridwidth = GridBagConstraints.RELATIVE;
            c1.gridx = 0;
            c1.weightx = 1;
            c1.weighty = 2.5;
            //c1.insets = new Insets(8,0,0,0);

            //c1.insets.top = 8;
            c1.insets = new Insets(8,0,0,0);
            c1.gridwidth = GridBagConstraints.REMAINDER;

            _label_agentTable = new JLabel("Agents on this Agent System");
            manage_agents_gridBag.setConstraints(_label_agentTable, c1);
            manage_agents_panel.add(_label_agentTable);

            c1.insets.top = 0;
            c1.weighty = 2.5;

            myModel = new AppletTableModel();
            agentTable = new JTable(myModel);
            myModel.addTableModelListener(agentTable);
            agentTable.setPreferredScrollableViewportSize(new Dimension(250,60));
            tableScrollPane = new JScrollPane(agentTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            tableScrollPane.setBorder(BorderFactory.createTitledBorder("Agents on this Agent System"));
            tableScrollPane.setMinimumSize(new Dimension(tabbedPane.getWidth(), 130));
            tableScrollPane.setPreferredSize(new Dimension(tabbedPane.getWidth(), 130));
      
            // Set selection model for agentTable
            listSelectionModel = agentTable.getSelectionModel();
            listSelectionModel.addListSelectionListener(new ListSelectionHandler());
            listSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

            //get list of running agents and their status and display in agentTable
            list_agent_names();
      
            manage_agents_gridBag.setConstraints(tableScrollPane, c1);
            manage_agents_panel.add(tableScrollPane);

            //create various buttons for managing the agents
            c1.insets = new Insets(8,25,0,25);
            c1.gridx = 0;
            c1.weighty = 0;
            c1.gridwidth = GridBagConstraints.RELATIVE;
  
            _bt_suspend_agent = new JButton("suspend agent");
            _bt_suspend_agent.setMnemonic('s');
            _bt_suspend_agent.setToolTipText("suspend the selected agent");
            _bt_suspend_agent.setActionCommand("button");
            _bt_suspend_agent.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_suspend_agent, c1);
            manage_agents_panel.add(_bt_suspend_agent);

            c1.gridx = GridBagConstraints.RELATIVE;
            c1.gridwidth = GridBagConstraints.REMAINDER;

            _bt_resume_agent = new JButton("resume agent");
            _bt_resume_agent.setMnemonic('u');
            _bt_resume_agent.setToolTipText("resume the selected agent");
            _bt_resume_agent.setActionCommand("button");
            _bt_resume_agent.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_resume_agent, c1);
            manage_agents_panel.add(_bt_resume_agent);

            c1.gridx = 0;
            c1.gridwidth = GridBagConstraints.RELATIVE;
            c1.insets.top = 0;

            _bt_terminate_agent = new JButton("terminate agent");
            _bt_terminate_agent.setMnemonic('t');
            _bt_terminate_agent.setToolTipText("terminate the selected agent");
            _bt_terminate_agent.setActionCommand("button");
            _bt_terminate_agent.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_terminate_agent, c1);
            manage_agents_panel.add(_bt_terminate_agent);

            c1.gridx = GridBagConstraints.RELATIVE;
            c1.gridwidth = GridBagConstraints.REMAINDER;

            _bt_showwebpage = new JButton("show agent's webpage");
            _bt_showwebpage.setActionCommand("button");
            _bt_showwebpage.setMnemonic('w');
            _bt_showwebpage.setToolTipText("show the webpage of the selected agent");
            _bt_showwebpage.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_showwebpage, c1);
            manage_agents_panel.add(_bt_showwebpage);

            c1.gridx = 0;
            c1.gridwidth = GridBagConstraints.RELATIVE;

            _bt_transferAgent = new JButton("transfer Agent");
            _bt_transferAgent.setMnemonic('f');
            _bt_transferAgent.setToolTipText("migrate the selected agent to a different agent system");
            _bt_transferAgent.setActionCommand("button");
            _bt_transferAgent.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_transferAgent, c1);
            manage_agents_panel.add(_bt_transferAgent);

            c1.gridx = GridBagConstraints.RELATIVE;
            c1.gridwidth = GridBagConstraints.REMAINDER;

            //Create "update button"
            _bt_update_list = new JButton("update manually");
            _bt_update_list.setMnemonic('u');
            _bt_update_list.setToolTipText("update the table of loaded agents manually");
            _bt_update_list.setActionCommand("button");
            _bt_update_list.setBackground(new Color(12632256));
            _bt_update_list.setMargin(new Insets(2,2,2,2));
            manage_agents_gridBag.setConstraints(_bt_update_list, c1);
            manage_agents_panel.add(_bt_update_list);


            //insert a separator
            c1.insets = new Insets(26,0,0,0);

            JSeparator sep2 = new JSeparator();
            manage_agents_gridBag.setConstraints(sep2, c1);
            manage_agents_panel.add(sep2);

            //create the textfield
            //the user specifies the input/output file with it
            c1.insets.top = 26;

            _label_file = new JLabel("File");
            manage_agents_gridBag.setConstraints(_label_file, c1);
            manage_agents_panel.add(_label_file);

            c1.insets.top = 0;

            _tf_file = new JTextField();
            manage_agents_gridBag.setConstraints(_tf_file, c1);
            manage_agents_panel.add(_tf_file);

            //create buttons for reading/writing agents to files
            c1.insets = new Insets(8,25,0,25);
            c1.gridx = 0;
            c1.gridwidth = GridBagConstraints.RELATIVE;

            _bt_readAgentFromFile = new JButton("read agent from file");
            _bt_readAgentFromFile.setMnemonic('a');
            _bt_readAgentFromFile.setToolTipText("read an agent from the specified file");
            _bt_readAgentFromFile.setActionCommand("button");
            _bt_readAgentFromFile.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_readAgentFromFile, c1);
            manage_agents_panel.add(_bt_readAgentFromFile);

            c1.gridwidth = GridBagConstraints.REMAINDER;
            c1.gridx = GridBagConstraints.RELATIVE;

            _bt_writeAgentToFile = new JButton("write agent to file");
            _bt_writeAgentToFile.setMnemonic('i');
            _bt_writeAgentToFile.setToolTipText("write selected agent to the specified file");
            _bt_writeAgentToFile.setActionCommand("button");
            _bt_writeAgentToFile.setBackground(new Color(12632256));
            manage_agents_gridBag.setConstraints(_bt_writeAgentToFile, c1);
            manage_agents_panel.add(_bt_writeAgentToFile);
  
            //create textarea for outputs of various methods in this panel
            c1.gridx = 0;
            c1.insets = new Insets(16,0,0,0);
            c1.gridheight = GridBagConstraints.REMAINDER;
            c1.weighty = c1.weightx = 2.0;
            c1.fill = GridBagConstraints.BOTH;
  
            _ta_output_agent = new com.sun.java.swing.JTextArea();
            _ta_output_agent.setBounds(72,600,624,168);
            _ta_output_agent.setEditable(false);
            _ta_output_agent.setMargin(new Insets(5,5,5,5));
   
            Color color = new Color(188,210,238);
            _ta_output_agent.setBackground(color); 
            JScrollPane scrollPane_agent = new JScrollPane(_ta_output_agent, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            scrollPane_agent.setBorder(BorderFactory.createTitledBorder("Output:"));
            scrollPane_agent.setMinimumSize(new Dimension(tabbedPane.getWidth(), 110));
            scrollPane_agent.setPreferredSize(new Dimension(tabbedPane.getWidth(), 110));
  
            manage_agents_gridBag.setConstraints(scrollPane_agent, c1);
            manage_agents_panel.add(scrollPane_agent);

            //add manage_agents_panel to the tabbed panel
            tabbedPane.addTab("Manage agents", null, manage_agents_panel, "manage the agents of this agent system");
            tabbedPane.setSelectedIndex(0);



            /***********************************************************
             *******  Panel for "Create Agent"     *********************
             ***********************************************************/

            //Create Layout Manager for "Create Agent" Part
            GridBagLayout create_agent_gridBag = new GridBagLayout();
            GridBagConstraints c2 = new GridBagConstraints();

            // Create Panel for "Create agent" part
            JPanel create_agent_panel = new JPanel(create_agent_gridBag);

            //Create JFC components and arrange them
            //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            c2.fill = GridBagConstraints.HORIZONTAL;
            c2.gridwidth = GridBagConstraints.REMAINDER;
            c2.gridx = 0;
            c2.weightx = 1;
            c2.insets = new Insets(8,0,0,0);

            _label_identity = new JLabel("Choose agent");
            _label_identity.setBackground(new Color(8454016));
            create_agent_gridBag.setConstraints(_label_identity, c2);
            create_agent_panel.add(_label_identity);

            c2.insets.top = 0;

            // get list of implemented agents from webserver and put it in impl_agent_list
            get_impl_agents();

            //create combobox which displays the implemented agents
            _ch_impl_agents = new JComboBox(impl_agent_list);
            _ch_impl_agents.setSelectedIndex(0);
            _ch_impl_agents.setEditable(false);
            create_agent_gridBag.setConstraints(_ch_impl_agents, c2);
            create_agent_panel.add(_ch_impl_agents);


            //define an actionlistener for _ch_impl_agents
            actionlistener_ch_impl_agents = new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        get_agent_parameters();
                    }
                };

            //if the user selects an agent from the list itīs parameters are obtained immediately
            _ch_impl_agents.addActionListener(actionlistener_ch_impl_agents);

        
            //create combobox which determines if the new agent will be exclusive
            c2.insets.top = 16;
            c2.gridwidth = GridBagConstraints.REMAINDER;
            c2.gridx = GridBagConstraints.RELATIVE;;
      
            _label_exclusive = new JLabel("Exclusive ");
            _label_exclusive.setBackground(new Color(8454016));
            create_agent_gridBag.setConstraints(_label_exclusive, c2);
            create_agent_panel.add(_label_exclusive);

            c2.insets = new Insets(0,0,0,300);
      
            _ch_create_exclusive = new JComboBox();
            _ch_create_exclusive.addItem("false");
            _ch_create_exclusive.addItem("true");
            _ch_create_exclusive.setSelectedIndex(0);
            create_agent_gridBag.setConstraints(_ch_create_exclusive, c2);
            create_agent_panel.add(_ch_create_exclusive);

            //create combobox which selects between the different constructors for the new agent
            c2.insets = new Insets(16,0,0,0);
            c2.gridx = 0;

            constructors = new JLabel("Create Agent with...");
            constructors.setBackground(new Color(8454016));
            create_agent_gridBag.setConstraints(constructors, c2);
            create_agent_panel.add(constructors);

            c2.insets = new Insets(0,0,0,300);

            //get list of constructors and put it into constructor_list
            get_agent_parameters();
        
            _ch_constructors = new JComboBox(constructor_list);
            _ch_constructors.setSelectedIndex(0);
            _ch_constructors.setEditable(false);
            create_agent_gridBag.setConstraints(_ch_constructors, c2);
            create_agent_panel.add(_ch_constructors);
            

            //if a constructor is chosen then the table shows the different types of parameters
            _ch_constructors.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    show_agent_parameters(_ch_constructors.getSelectedIndex());
                }
            }
                                             );


            //create table showing the different parameters of a constructor
            //the user also types in the values for these parameters using this table
            c2.insets = new Insets(16,0,0,0);

            paramTableModel = new ParameterTableModel();
            paramTable = new JTable(paramTableModel);
            paramTableModel.addTableModelListener(paramTable);
            paramTable.setPreferredScrollableViewportSize(new Dimension(250,60));
            paramScrollPane = new JScrollPane(paramTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            paramScrollPane.setBorder(BorderFactory.createTitledBorder("Parameters for this constructor"));
            paramScrollPane.setMinimumSize(new Dimension(tabbedPane.getWidth(), 100));
            paramScrollPane.setPreferredSize(new Dimension(tabbedPane.getWidth(), 100));

            create_agent_gridBag.setConstraints(paramScrollPane, c2);
            create_agent_panel.add(paramScrollPane);

            //show list of parameters for currently selected implemented agent
            show_agent_parameters(0);

            //create buttons
            c2.gridx = 0;
            c2.gridwidth = GridBagConstraints.RELATIVE;
            c2.insets = new Insets(20,25,0,25);
  
            _bt_create_agent = new JButton("create agent");
            _bt_create_agent.setMnemonic('c');
            _bt_create_agent.setToolTipText("load the selected Agent with the specified options");
            _bt_create_agent.setActionCommand("button");
            _bt_create_agent.setBackground(new Color(12632256));
            create_agent_gridBag.setConstraints(_bt_create_agent, c2);
            create_agent_panel.add(_bt_create_agent);

            c2.gridwidth = GridBagConstraints.REMAINDER;
            c2.gridx = GridBagConstraints.RELATIVE;

            _bt_update_impl_agents = new JButton("update list");
            _bt_update_impl_agents.setMnemonic('u');
            _bt_update_impl_agents.setToolTipText("update the list of loadable agents");
            _bt_update_impl_agents.setActionCommand("button");
            _bt_update_impl_agents.setBackground(new Color(12632256));
            create_agent_gridBag.setConstraints(_bt_update_impl_agents, c2);
            create_agent_panel.add(_bt_update_impl_agents);

            //create textarea for output of the methods of this panel
            c2.gridx = 0;
            c2.gridheight = 6;
            c2.weighty = c2.weightx = 2.5;
            c2.fill = GridBagConstraints.BOTH;
            c2.insets = new Insets(20,0,0,0);
  
            _ta_output_create_agent = new com.sun.java.swing.JTextArea();
            _ta_output_create_agent.setEditable(false);
            _ta_output_create_agent.setMargin(new Insets(5,5,5,5));

      
            _ta_output_create_agent.setBackground(color); 
            JScrollPane scrollPane_create_agent = new JScrollPane(_ta_output_create_agent, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            scrollPane_create_agent.setBorder(BorderFactory.createTitledBorder("Output:"));
  
            create_agent_gridBag.setConstraints(scrollPane_create_agent, c2);
            create_agent_panel.add(scrollPane_create_agent);

            //add panel to tabbed pane
            tabbedPane.addTab("Create agent", null, create_agent_panel, "load a new agent into this agent system");
    
    
  
            /***********************************************************
             *******  Panel for "Manage agent system"  *****************
             ***********************************************************/

            //Create Layout Manager for "Manage agent system" Part
            GridBagLayout agent_system_gridBag = new GridBagLayout();
  
            //Create Panel for "Manage agent system" Part
            JPanel agent_system_panel = new JPanel(agent_system_gridBag);
            GridBagConstraints c3 = new GridBagConstraints();


            //create buttons 
            c3.gridx = 0;
            c3.gridwidth = GridBagConstraints.REMAINDER;
            c3.fill = GridBagConstraints.HORIZONTAL;
            c3.weightx = 1;
            c3.insets = new Insets(20,150,0,150);
  
            _bt_get_agent_system_info = new JButton("get agent system info");
            _bt_get_agent_system_info.setMnemonic('i');
            _bt_get_agent_system_info.setToolTipText("show information about this agent system");
            _bt_get_agent_system_info.setActionCommand("button");
            _bt_get_agent_system_info.setBackground(new Color(12632256));
            agent_system_gridBag.setConstraints(_bt_get_agent_system_info, c3);
            agent_system_panel.add(_bt_get_agent_system_info);

            c3.insets.top = 0;
  
            _bt_terminate_agent_system = new JButton("terminate agent system");
            _bt_terminate_agent_system.setMnemonic('t');
            _bt_terminate_agent_system.setToolTipText("shut down this agent system");
            _bt_terminate_agent_system.setActionCommand("button");
            _bt_terminate_agent_system.setBackground(new Color(12632256));
            agent_system_gridBag.setConstraints(_bt_terminate_agent_system, c3);
            agent_system_panel.add(_bt_terminate_agent_system);

            //create textarea for output of the methods of this panel
            c3.gridx = 0;
            c3.gridwidth = GridBagConstraints.REMAINDER;
            c3.insets = new Insets(20,0,0,0);
            c3.gridheight = 4;
            c3.weighty = 2;
            c3.fill = GridBagConstraints.BOTH;
  
            _ta_output_agent_system = new com.sun.java.swing.JTextArea();
            _ta_output_agent_system.setBounds(72,600,624,168);
            _ta_output_agent_system.setEditable(false);
            _ta_output_agent_system.setMargin(new Insets(5,5,5,5));
            _ta_output_agent_system.setBackground(color); 
            JScrollPane scrollPane_agent_system = new JScrollPane(_ta_output_agent_system, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            scrollPane_agent_system.setBorder(BorderFactory.createTitledBorder("Output:"));

            agent_system_gridBag.setConstraints(scrollPane_agent_system, c3);
            agent_system_panel.add(scrollPane_agent_system);

            //add panel to tabbed pane
            tabbedPane.addTab("Agent System", null, agent_system_panel, "manage the agent system");




            //add tabbed Pane to Applet panel
            c_root.fill = GridBagConstraints.BOTH;
            c_root.gridx = 0;
            c_root.gridwidth = GridBagConstraints.REMAINDER;
            c_root.gridheight = GridBagConstraints.REMAINDER;
            c_root.weightx = c_root.weighty = 1.0;
            gridBag.setConstraints(tabbedPane, c_root);

            getContentPane().add(tabbedPane);  
        
            //set parentComponent variable to point to this applet
            //needed to display transfer-agent-dialogue from within ASManagementAgent
            parentComponent = this;

            //get the name of the agent system this applet belongs to
            String as_url = _ass.getURL();
            agent_system_name = as_url.substring(as_url.lastIndexOf("/")+1, as_url.lastIndexOf(":"));

            //create pushConsumer and connect it to the ASManagementAgent
            //needed to react to events from CORBA event service
            create_pushConsumer();
      
            //define the action listeners for the various buttons created above
            this.initEventHandler();
        }
    }


    /**
   *  Implement all actions that take place when a certain button is pushed.
   *  <br>This method defines the action listeners for the various buttons of this applet and
   *  the mouse listener for the table of loaded agents
   */

    public void initEventHandler() {

        /*
         *  action listener for create_agent button
         */
        
        //clear any selection in the table of loaded agents for safety reasons
        agentTable.clearSelection();

        _bt_create_agent.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    // test if the agent is already running in this agent system
                    // if "yes" then show a warning message
                    if ( myModel.isElement((String) _ch_impl_agents.getSelectedItem()) ) {
                        int answer = JOptionPane.showConfirmDialog(null, "An agent with this name is already\nrunning on this agent system!\nDo you really want to start another instance?", "Warning!", JOptionPane.YES_NO_OPTION);
                        //if user cancels then return without any further action, else proceed
                        if (answer == JOptionPane.NO_OPTION) {
                            return;
                        }
                    }

                    // create the parameters for the create_agent() call
                    java.io.ByteArrayOutputStream agentBytes = new java.io.ByteArrayOutputStream();
                    java.io.ObjectOutputStream outputAgent = new java.io.ObjectOutputStream(agentBytes);

                    //get the index of the item currently selected in the combobox with impl. agents
                    int selected_index = _ch_impl_agents.getSelectedIndex();

                    //prepare outputAgent with data about the agent to be loaded
                    outputAgent.writeObject(impl_package_list[selected_index]);
                    outputAgent.writeObject(impl_type_list[selected_index]);
#ifdef VISIBROKER30
                    outputAgent.writeObject("_tie_");
                    outputAgent.writeObject("Operations");
#endif
#ifdef ORBACUS311
                    outputAgent.writeObject("_");
                    outputAgent.writeObject("ImplBase_tie");
#endif
                    outputAgent.writeObject(new Boolean((String) _ch_create_exclusive.getSelectedItem()));
                    outputAgent.writeObject("");
          
                    java.io.ByteArrayOutputStream constructorArgs = new java.io.ByteArrayOutputStream();
                    java.io.ObjectOutputStream constructorObject = new java.io.ObjectOutputStream(constructorArgs);

                    //get number of rows of parameter table i.e. the number of constructor parameters
                    int nor = paramTableModel.getRowCount();

                    //fetch the parameter data types and their values provided by the user via paramTable
                    String paramtype = null;
                    for (int i=0; i<nor; i++) {
                        //get parameter type
                        paramtype = (String) paramTableModel.getValueAt(i, 0);

                        //create appropriate object and copy it into the ByteArray
                        if (paramtype.equals("java.lang.String")) {
                            constructorObject.writeObject((String) paramTableModel.getValueAt(i, 1));
                        }
                        else if (paramtype.equals("java.lang.Integer")) {
                            constructorObject.writeObject(java.lang.Integer.valueOf((String) paramTableModel.getValueAt(i, 1)));
                        }
                        else if (paramtype.equals("java.lang.Float")) {
                            constructorObject.writeObject(java.lang.Float.valueOf((String) paramTableModel.getValueAt(i, 1)));
                        }
                        else if (paramtype.equals("java.lang.Double")) {
                            constructorObject.writeObject(java.lang.Double.valueOf((String) paramTableModel.getValueAt(i, 1)));
                        }
                        //(roelle): IMHO this was missing
                        else if (paramtype.equals("java.lang.Boolean")) {
                            constructorObject.writeObject(java.lang.Boolean.valueOf((String) paramTableModel.getValueAt(i, 1)));
                        }
                        
                    }

                    // agent name is equal class name, so no information about classes needed
                    ClassName[] className = new ClassName[0];

                    //fetch the name of the agent to be created
                    NameWrapper nw = new NameWrapper((String) _ch_impl_agents.getSelectedItem());

                    //create the profile of the agent and itīs properties
                    AgentProfile ap = new AgentProfile();
                    org.omg.CORBA.Any props[] = new org.omg.CORBA.Any[1];
                    org.omg.CORBA.Any any = getORB().create_any();
#ifdef VISIBROKER30
                    any.insert_wstring("Property");       
#endif
#ifdef ORBACUS311
                    any.insert_string("Property");        
#endif
                    props[0]=any;
                    ap.language_id=1;
                    ap.serialization=1;
                    ap.properties= props;
                    ap.agent_system_description= "Agent System of MNM-Team";

                    // create the agent with the information collected and prepared above
                    Name res = _ass.create_agent(nw._name,
                                                       ap,
                                                       agentBytes.toByteArray(),
                                                       new String("default"),
                                                       constructorArgs.toByteArray(),
                                                       className,
                                                       "",
                                                       (MAFAgentSystem)_ass);

                    //print a status message to the output window
                    _ta_output_create_agent.append("create_agent(): agent "+_ch_impl_agents.getSelectedItem()+
                                                   " created.\n");
                }
                catch(Exception e0){ //error
                    e0.printStackTrace();
                    _ta_output_create_agent.append("create_agent(): create agent "+_ch_impl_agents.getSelectedItem()+
                                                   " failed: "+ e0.toString()+"\n"+ (e0.getMessage() == null ? "" : e0.getMessage()+"\n"));
                }
            }
      
        }
                                           ); 
    

        /*
         *  action listener for transferAgent button
         */
        _bt_transferAgent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    // get list of all active agent systems from the ASManagementAgent 
                    String agentsystems[] = _asm.identify_agentsystems();

                    //create a Vector containing the names of the active agent systems
                    java.util.Vector as_names = new java.util.Vector(0,1);
                    int n_o_t = agentsystems.length;
                    for (int i=0; i<n_o_t; i++) {
                        as_names.addElement(agentsystems[i]);
                    }

                    //Show dialogue to get target agent system
                    String target = CommonAppletHelpers.show_migrate_menu(parentComponent, agent_identity, as_names);   

                    if (target == null) { //if user pressed the cancel-button
                        //clear selection in agentTable and disable buttons for safety reasons
                        clear_selection();
                        return;
                    }

                    // connect to agent to transfer
                    NameWrapper nw = new NameWrapper(agent_identity);
                    org.omg.CORBA.Object obj = _ass.connectToAgent(nw._name);
                    Migration agent = MigrationHelper.narrow(obj);

                    // transfer agent to destination agent system
                    agent.migrateToAgentSystem("AgentSystemService/4/mnm/"+target);
                    _ta_output_agent.append("transferAgent: agent "+ agent_identity +
                                            " transferred to "+ target + "\n");
                }
                catch(Exception e1){
                    if (e1 instanceof org.omg.CORBA.BAD_PARAM) { }
                    else {
                        e1.printStackTrace();
                        _ta_output_agent.append("transferAgent failed: "+e1.toString()+"\n"+e1.getMessage()+"\n");
                    }
            
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
            }
        }
                                            );
        //disable button initially
        _bt_transferAgent.setEnabled(false);



        /*
         *  action listener for resume_agent button
         */
        _bt_resume_agent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    //resume agent
                    NameWrapper nw = new NameWrapper(agent_identity);
                    _ass.resume_agent(nw._name);

                    //update the status of the agent in the agentTable
                    myModel.changeStatus(agentTable.getSelectedRow(), "Running");

                    //display status message in output window
                    _ta_output_agent.append("resume_agent(): "+agent_identity+" resumed.\n\n");
                }
                catch(Exception e2){
                    _ta_output_agent.append("resume_agent for "+agent_identity+" failed!\n"
                                            +e2.toString()+"\n\n");
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
            }
        } 
                                           );
        //disable button initially
        _bt_resume_agent.setEnabled(false);



        /*
         *  action listener for suspend_agent button
         */
        _bt_suspend_agent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    //warn the user if the webserver agent is to be suspended
                    if (agent_identity.equals("Webserver") ||
                        agent_identity.equals("ASManagementAgent")) {
            
                        int answer = JOptionPane.showConfirmDialog(null, "Do you really want to suspend this agent?\nThis applet would no longer work correctly!", "Warning!", JOptionPane.YES_NO_OPTION);
                        if (answer == JOptionPane.NO_OPTION) {
                            clear_selection();
                            return;
                        }
            
                    }
          
                    //suspend agent
                    NameWrapper nw= new NameWrapper(agent_identity);
                    _ass.suspend_agent(nw._name);

                    //update the status of the agent in the agentTable
                    myModel.changeStatus(agentTable.getSelectedRow(), "Suspended");

                    //display status message in output window
                    _ta_output_agent.append("suspend_agent(): "+agent_identity+" suspended.\n\n");
                }
                catch(Exception e3){
                    e3.printStackTrace();
                    _ta_output_agent.append("suspend_agent for "+agent_identity+" failed!\n"
                                            +e3.toString()+"\n\n");
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
            }     
        } 
                                            );
        //disable button initially
        _bt_suspend_agent.setEnabled(false);



        /*
         *  action listener for terminate_agent button
         */
        _bt_terminate_agent.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    //warn the user if the webserver is to be terminated
                    if (agent_identity.equals("Webserver") ||
                        agent_identity.equals("ASManagementAgent")) {
                        int answer = JOptionPane.showConfirmDialog(null, "Do you really want to terminate this agent?\nThis applet would no longer work correctly!", "Warning!", JOptionPane.YES_NO_OPTION);
                        if (answer == JOptionPane.NO_OPTION) {
                            clear_selection();
                            return;
                        }
                    }
                    
                    //terminate agent
                    NameWrapper nw= new NameWrapper(agent_identity);
                    _ass.terminate_agent(nw._name);

                    //display status message in output window
                    _ta_output_agent.append("terminate_agent(): "+agent_identity+" terminated.\n\n");
                }
                catch(Exception e4){
                    _ta_output_agent.append("terminate_agent for "+agent_identity+" failed!\n"
                                            +e4.toString()+"\n\n");
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
            }
        } 
                                              );
        //disable button initially
        _bt_terminate_agent.setEnabled(false);



        /*
         *  action listener for get_agent_system_info button
         */
        _bt_get_agent_system_info.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    //get information about the agent system this applet belongs to via _ass
                    AgentSystemInfo asi = _ass.get_agent_system_info();

                    //display the information in the output window
                    _ta_output_agent_system.append("get_agent_system_info():\n"+
                                                   "Name:\n"+
                                                   "  Agent System Type: "+String.valueOf((int)asi.agent_system_name.agent_system_type)+"\n"+
                                                   "  Authority: "+new String(asi.agent_system_name.authority)+"\n"+
                                                   "  Identity: "+new String(asi.agent_system_name.identity)+"\n"+
                                                   "Description: "+ asi.agent_system_description+"\n\n");
                }
                catch(Exception e6){
                    e6.printStackTrace();
                    _ta_output_agent_system.append("get_agent_system_info failed: "+e6.toString()+"\n"+e6.getMessage()+"\n");
                }
            }
        } 
                                                    );



        /*
         *  action listener for terminate_agent_system button
         */
        _bt_terminate_agent_system.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    //give the user a last chance to cancel
                    int answer = JOptionPane.showConfirmDialog(null, "Do you really want to terminate this agent system?", "Warning!", JOptionPane.YES_NO_OPTION);
                    if (answer == JOptionPane.NO_OPTION) {
                        return;
                    }
                    //terminate agent system via _ass
                    _ass.terminate_agent_system();
                }
                catch(TerminateFailed e7){
                    e7.printStackTrace();
                    _ta_output_agent_system.append("terminate_agent_system(): failed!\n"
                                                   +e7.toString()+"\n"+e7.getMessage()+"\n"
                                                   +"This applet no longer works!\n");

                }
                catch(Throwable cf){
                    // thrown when agent system is disconnected from boa
                    _ta_output_agent_system.append("terminate_agent_system(): all agents and this agent system is terminated\n"+
                                                   "This applet no longer works!\n");
                }
            }
        } 
                                                     );



        /*
         *  action listener for readAgentFromFile button
         */
        _bt_readAgentFromFile.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                //get name and path of the file to be used
                String file = _tf_file.getText();
                try {
                    //read and create the agent from the data provided by the file
                    Name name= _ass.readAgentFromFile(file);

                    _ta_output_agent.append("Read agent "+new String(name.identity)+" from file "+file+"\n");
                }
                catch(Exception e11){
                    e11.printStackTrace();
                    _ta_output_agent.append("Read agent failed: "+e11.toString()+"\n"+e11.getMessage()+"\n");
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
                list_agent_names();  // Update the agent list
            }
        } 
                                                );



        /*
         *  action listener for writeAgentToFile button
         */
        _bt_writeAgentToFile.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                //get name and path of the file to be used
                String file = _tf_file.getText();
                try {
                    //write the agent to the file
                    NameWrapper nw = new NameWrapper(agent_identity);
                    _ass.writeAgentToFile(nw._name,file);
                    _ta_output_agent.append("Agent "+agent_identity+" to file "+file+" written.\n");
                }
                catch(Exception e12){
                    e12.printStackTrace();
                    _ta_output_agent.append("Write agent failed: "+e12.toString()+"\n"+e12.getMessage()+"\n");
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
                list_agent_names();  // Update the agent list
            }
        } 
                                               );
        //disable button initially
        _bt_writeAgentToFile.setEnabled(false);


        
        /*
         *  action listener for showwebpage button
         */
        _bt_showwebpage.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                try {
                    //create a URL object for the selected agent
                    java.net.URL agent_url = CommonAppletHelpers.getAgentURL(agent_identity, _ass.getURL());
                    //open another browser window and show agent's webpage
                    getAppletContext().showDocument(agent_url, agent_identity);
                }
                catch (Exception ei) {
                    ei.printStackTrace();
                }
                //clear selection in agentTable and disable buttons for safety reasons
                clear_selection();
            }
        }
                                          );
        //disable button initially
        _bt_showwebpage.setEnabled(false);



        /*
         *  action listener for update_list button
         */

        _bt_update_list.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                list_agent_names();
                clear_selection();
            }
        }
                                          );



        /*
         *  action listener for update_impl_agents button
         */
        _bt_update_impl_agents.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent e) {
                //prevent from updating too early
                _ch_impl_agents.removeActionListener(actionlistener_ch_impl_agents);
                //reload ImplementedAgents.txt
                get_impl_agents();
                //update JCombobox
                _ch_impl_agents.removeAllItems();
                for (int i=0; i<impl_agent_list.length; i++) {
                    _ch_impl_agents.addItem(impl_agent_list[i]);
                }
                //reenable ActionListener
                _ch_impl_agents.addActionListener(actionlistener_ch_impl_agents);
                //preselect the first choice
                _ch_impl_agents.setSelectedIndex(0);
                _ch_impl_agents.setEditable(false);
            }
        }
                                                 );



        /*
         *  mouse listener for agentTable
         */
        MouseListener ml = new MouseAdapter() {
            public void mousePressed(MouseEvent e) 
                {
                    if (e.getClickCount() == 2) {
                        //if double click
                        try {
                            //get URL of selected agent
                            java.net.URL agent_url = CommonAppletHelpers.getAgentURL(agent_identity, _ass.getURL());
                            //open another browser window and show agent's webpage
                            getAppletContext().showDocument(agent_url, agent_identity);  
                        }
                        catch (Exception ei) {
                            ei.printStackTrace();
                        }
                    }   
                }
        };
        agentTable.addMouseListener(ml);

    }



    /**
     * Retrieves a list of agents on this agent system.
     * <br>The name of each loaded agent and itīs status (running/suspended) are
     * copied to the TableModel of agentTable.
     */

    public void list_agent_names() {
        String[][] names_n_status = new String[0][0];
        try {
            //contact agent system and retrieve a list of the names of all loaded agents
            Name name[] = _ass.list_all_agents();

            //create a 2D array that will contain the names and the status the the loaded agents
            names_n_status = new String[name.length][2];
            NameWrapper status_name;
            AgentStatus state;

            //create new data vector for the AppletTableModel
            myModel.AppletTableModel();

            //provide the name and the status of each loaded agent to the AppletTableModel myModel
            for (int i = 0; i < name.length; i++) {
                names_n_status[i][0] = new String(name[i].identity);
                status_name = new NameWrapper(names_n_status[i][0]);
                state = _ass.get_agent_status(status_name._name);
                switch(state.value()){
                case AgentStatus._CfMAFRunning:   names_n_status[i][1]="Running"; break;
                case AgentStatus._CfMAFSuspended: names_n_status[i][1]="Suspended"; break;
                case AgentStatus._CfMAFTerminated: names_n_status[i][1]="Terminated"; break;
                default: names_n_status[i][1] = "none"; break;
                }
                myModel.addValue(names_n_status[i]);
            }
            //update the displayed agentTable
            getContentPane().validate();
            tableScrollPane.repaint();
            //agentTable_panel.repaint();
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }


    /**
     * Defines whatīs to be done when applet is terminated.
     * <br>Disconnects pushConsumer that has been registered with the ASManagementAgent
     */

    public void destroy() {
        try {
            _asm.disconnect_push_consumer(pushConsumer.id);
        } catch (Exception e) {
            System.err.println("\n\nAgentSystemApplet: Could not disconnect pushConsumer");
            e.printStackTrace();
        }
    }
    

    /**
     * Create a PushConsumer and register it with the ASManagementAgent.
     * <br>The pushConsumer is then provided with CORBA events and reacts appropriately
     */

    public void create_pushConsumer() {
        try {
            // create PushConsumer
            pushConsumer = new PushConsumerImpl();

                org.omg.CORBA.ORB orb = CommonAppletHelpers.initialize_orb_for_push_consumer();

            //use the Portable Object Adapter (POA) to register the object with the ORB
            orb.connect(pushConsumer);

            //register pushConsumer with the ASManagementAgent and retrieve the ID
            //It is later used to disconnect the pushConsumer from the asm again
            pushConsumer.id = _asm.connect_push_consumer(pushConsumer);

        } catch (Exception el) {
            el.printStackTrace();
        }
    }
  


    /** 
     * Retrieve a list of implemented agents and prepare for later use.
     * <br>The file "ImplementedAgents.txt" contains a list of agents that are ready to load. It
     * provides the name, the package and the type (mobile/stationary) of the agents. It is 
     * obtained using CommonAppletHelpers.retrieve_implemented_agents_file(...).
     *
     * @see CommonAppletHelpers
     */

    public void get_impl_agents() {

        //retrieve the file ImplementedAgents.txt and store it into string_file
        String string_file = CommonAppletHelpers.retrieve_implemented_agents_file(_ass.getURL());
    
        //copy the data into the appropriate arrays
        //they will be used when loading agents into the agent system with create_agent
        java.util.StringTokenizer agent_tokenizer = new java.util.StringTokenizer(string_file); 
        int noe = (agent_tokenizer.countTokens())/3;
        impl_agent_list = new String[noe];
        impl_package_list = new String[noe];
        impl_type_list = new String[noe];
        
        for (int i=0; i<noe; i++) {
            impl_agent_list[i] = agent_tokenizer.nextToken();
            impl_package_list[i] = agent_tokenizer.nextToken();
            impl_type_list[i] = agent_tokenizer.nextToken();
        }
    }



    /** 
     * Clears the selection in the agentTable and disables the buttons.
     * <br>To prevent accidential execution of agent-manipulating methods the selection in the agentTable
     * and the buttons that need a preselected agent are disabled after each action. The String variable 
     * agent_identity is also cleared.
     */

    public void clear_selection() {
        agentTable.clearSelection();
        agent_identity = null;
        _bt_transferAgent.setEnabled(false);
        _bt_resume_agent.setEnabled(false);
        _bt_suspend_agent.setEnabled(false);
        _bt_terminate_agent.setEnabled(false);
        _bt_writeAgentToFile.setEnabled(false);
        _bt_showwebpage.setEnabled(false);
    }
    


    /**
     * Retrieves the parameters for all constructors defined for the selected agent.
     * <br>An agent can have more than one constructor, each with a different set of parameters. These
     * parameters are collected into an array of Vectors (param_matrix), each Vector representing 
     * the parameter set of one constructor.<br>
     * The applet presents to the user a combobox (_ch_constructors) containing a list of constructor
     * choices defined by the number of parameters the constructor expects.
     * The parameters are retrieved using the ASManagementAgent.
     *
     * @see ASManagementAgent
     */

    public void get_agent_parameters() {
        //get name, package and type (mobile/stationary) of the selected agent that is to be loaded
        String agent_name = (String) _ch_impl_agents.getSelectedItem();
        int agent_index = _ch_impl_agents.getSelectedIndex();
        String agent_package = impl_package_list[agent_index];
        String agent_type = impl_type_list[agent_index];

        //get parameters of all possible constructors for this agent
        //the parameter sets of the different constructors are located in the array elements
        //of the returned String array
        String parametersets[] = _asm.get_agent_parameters(agent_name, agent_package, agent_type);

        //check if ASManagementAgent could find the agent's class
        //if not then display a warning message
        if (parametersets[0].equals("failed")) {
            JOptionPane.showMessageDialog(null, "The class of the agent \""+agent_name+"\" could not be found!\nPlease check if the agent is properly installed.");
        }

        //parameter_set_tokenizer is used to retrieve the different sets of parameters
        //java.util.StringTokenizer parameter_set_tokenizer = new java.util.StringTokenizer(parameters, "#");
        //parameter_tokenizer is used to retrieve the parameters within one set
        java.util.StringTokenizer parameter_tokenizer = null;
        //get number of parameter sets (= number of different constructors)
        int nop = parametersets.length;//parameter_set_tokenizer.countTokens();

        if (nop == 0) {  //no constructor defined
            param_matrix = new Vector[1];
            param_matrix[0] = new Vector(0,1);
            constructor_list = new String[1];
            constructor_list[0] = "0 arguments";
        }
        else {
            param_matrix = new Vector[nop];  //each element of the array represents one parameter set
            constructor_list = new String[nop];  //list which will be shown in _ch_constructors ComboBox
        }

        //create the "matrix" of parameters and set up the combobox with constructor choices
        for (int i=0; i<nop; i++) {
            //parameter_tokenizer = new java.util.StringTokenizer(parameter_set_tokenizer.nextToken());  //get parameters of one constructor
            parameter_tokenizer = new java.util.StringTokenizer(parametersets[i]); //get parameters of one constructor
            int nop2 = parameter_tokenizer.countTokens();
            param_matrix[i] = new Vector(0,1);
            constructor_list[i] = nop2 + " arguments";
            for (int j=0; j<nop2; j++) {
                //copy parameters of one constructor into appropriate vector
                param_matrix[i].addElement(parameter_tokenizer.nextToken());
            }
        }
        //update the displayed combobox with constructor choices
        repaint_ch_constructors();
    }


    /**
     * Redefines the ComboBox showing the choice between possible constructors of the selected agent.
     * <br>Called when a new agent is selected from the implemented-agents-combobox (_ch_impl_agents).
    */

    public void repaint_ch_constructors() {
        if (_ch_constructors != null) {  //if it has already been called...

            //update the contents of _ch_constructors
            _ch_constructors.removeAllItems();
            for (int i=0; i<constructor_list.length; i++) {
                _ch_constructors.addItem(constructor_list[i]);
            }
            //preselect the first choice
            _ch_constructors.setSelectedIndex(0);
            _ch_constructors.setEditable(false);

            //repaint JComboBox
            getContentPane().validate();
            _ch_constructors.repaint();
            
            //list parameters for the first constructor
            show_agent_parameters(0);
        }
    }


    /**
     * Shows the parameter set of the selected constructor in the table.
     * <br>The value of each parameter is predefined with the String constant "none"
     *
     * @param param_index index of the selected constructor
     */

    public void show_agent_parameters(int param_index) {
        if (param_index != (-1)) {  //(-1) after _ch_constructors.removeAllElements()
            paramTableModel.ParameterTableModel();  //create new data vector
            
            int nop = param_matrix[param_index].size();
            
            for (int i=0; i<nop; i++) {
                String tmp[] = new String[2];
                tmp[0] = (String) param_matrix[param_index].elementAt(i);  //get parameter #i

                //check if parameter type is a valid one
                if (!(tmp[0].equals("java.lang.String")) &&
                    !(tmp[0].equals("java.lang.Integer")) &&
                    !(tmp[0].equals("java.lang.Float")) &&
                    !(tmp[0].equals("java.lang.Double")) &&
                        //(roelle): IMHO this was missing
                    !(tmp[0].equals("java.lang.Boolean")) &&
                    !(tmp[0].equals("failed"))
                    ) {
                    JOptionPane.showMessageDialog(null, "\""+tmp[0]+"\" is not a valid parameter data type!");
                }

                tmp[1] = "none";
                paramTableModel.addValue(tmp);
            }
            //repaint table
            getContentPane().validate();
            paramScrollPane.repaint();
        }
    }
    



    /**
     * TableModel managing a list of arguments for an agentīs constructor.
     * <br>This TableModel manages a parameter set of one constructor. Each time a different constructor
     * is selected the Vector "data" is completely new defined. Two columns are defined. The first one
     * contains the data type of a parameter, the second one itīs value which must be provided 
     * by the user. 
     *
     * @see AbstractTableModel
     * @author Stefan Gerber
     */

    class ParameterTableModel extends AbstractTableModel {
        String[] columnNames = {"Expected Parameters", "Values"};
        Vector data;
    
    
        public void ParameterTableModel()
        {
            data = new Vector(0,1);
        }
    
        public int getColumnCount()
        {
            return columnNames.length;
        }
    
        public int getRowCount()
        {
            return data.size();
        }
    
        public String getColumnName (int col) 
        {
            return columnNames[col];
        }
    
        public Object getValueAt(int row, int col) 
        {
            return ((String[]) data.elementAt(row))[col];
        }
    
        public void setValueAt(Object value, int row, int col) 
        {
            //first get old value
            String newvalue[] = {(String) ((String[]) data.elementAt(row))[0], 
                                 (String) ((String[]) data.elementAt(row))[1]};
            newvalue[col] = (String) value;
            data.setElementAt(newvalue, row);

            fireTableCellUpdated(row, col);
        }
    
        public void addValue(String[] value) 
        {
            data.addElement(value);
            fireTableRowsInserted(data.size()-1, data.size()-1);
        }

        public void rmValue(int row) 
        {
            data.removeElementAt(row);
            fireTableRowsDeleted(row, row);
        }

        public boolean isElement(String an) {
            for (int i=0; i<data.size(); i++) {
                if (an.equals((String) (((String[]) data.elementAt(i))[0]))) return true;
            }
            return false;
        }

        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 1) { 
                return false;
            } else {
                return true;
            }
        }
    }



    /**
     * TableModel managing the list of loaded agents in the agent system and their current status.
     * <br>Two columns are defined. The first one contains the names of the currently loaded agents,
     * the second one represents their status (running/suspended).
     *
     * @see AbstractTableModel
     * @author Stefan Gerber
     */

    class AppletTableModel extends AbstractTableModel {
        String[] columnNames = {"Agent", "Status"};
        Vector data;
    
    
        public void AppletTableModel()
        {
            data = new Vector(0,1);
        }
    
        public int getColumnCount()
        {
            return columnNames.length;
        }
    
        public int getRowCount()
        {
            return data.size();
        }
    
        public String getColumnName (int col) 
        {
            return columnNames[col];
        }
    
        public Object getValueAt(int row, int col) 
        {
            return ((String[]) data.elementAt(row))[col];
        }
    
        public void setValueAt(Object value, int row, int col) 
        {
            ((String[]) data.elementAt(row))[col] = (String) value;
            fireTableCellUpdated(row, col);
        }
    
        public void addValue(String[] value) 
        {
            data.addElement(value);
            fireTableRowsInserted(data.size()-1, data.size()-1);
        }

        public void rmValue(int row) 
        {
            data.removeElementAt(row);
            fireTableRowsDeleted(row, row);
        }

        public boolean isElement(String an) {
            for (int i=0; i<data.size(); i++) {
                if (an.equals((String) (((String[]) data.elementAt(i))[0]))) return true;
            }
            return false;
        }

        public void changeStatus(int row, String statusValue) {
            setValueAt(statusValue, row, 1);
        }

        public int whereis(String an) {
            for (int i=0; i<data.size(); i++) {
                if (an.equals((String) (((String[]) data.elementAt(i))[0]))) return i;
            }
            return (-1);
        }

    }



    /**
     * SelectionHandler for list of loaded agents (agentTable).
     * <br>Each time the user selects an agent from the table of loaded agents, the String variable
     * agent_identity is set and the buttons for the agent management are enabled.
     *
     * @see ListSelectionListener
     * @author Stefan Gerber
     */

    class ListSelectionHandler implements ListSelectionListener 
    {
        public void valueChanged(ListSelectionEvent e) 
        {
            ListSelectionModel ls_model = (ListSelectionModel) e.getSource();
            int index = ls_model.getMinSelectionIndex();
            if (index < 0) {
                _bt_transferAgent.setEnabled(false);
                _bt_resume_agent.setEnabled(false);
                _bt_suspend_agent.setEnabled(false);
                _bt_terminate_agent.setEnabled(false);
                _bt_writeAgentToFile.setEnabled(false);
                _bt_showwebpage.setEnabled(false);
                agent_identity = null;
            }
            else {
                /* check if selected agent is mobile before enabling the transfer_agent-button */
                int file_index = -1;
                String selected_agent = (String) agentTable.getValueAt(index, 0);
                //determine index where selected agent is in list of implemented agents
                //this index is stored in file_index
                for (int i=0; i<impl_agent_list.length; i++) {
                    if (selected_agent.equals(impl_agent_list[i])) {
                        file_index = i;
                        break;
                    }
                }
                //use file_index to determine if agent is mobile
                //enable button if agent is mobile or if no information about the agent was available
                //i.e. the agent was not in ImplementedAgents.txt
                if (file_index == (-1)) {
                    _bt_transferAgent.setEnabled(true);
                }
                else if (impl_type_list[file_index].equals("MobileAgent")) {
                    _bt_transferAgent.setEnabled(true);
                }
                else {
                    _bt_transferAgent.setEnabled(false);
                }

                //check if selected agent is running or resumed
                if (((String) agentTable.getValueAt(index, 1)).equals("Running")) {
                    _bt_resume_agent.setEnabled(false);
                    _bt_suspend_agent.setEnabled(true);
                } else {
                    _bt_resume_agent.setEnabled(true);
                    _bt_suspend_agent.setEnabled(false);
                }
                _bt_terminate_agent.setEnabled(true);
                _bt_writeAgentToFile.setEnabled(true);
                _bt_showwebpage.setEnabled(true);
                agent_identity = (String) agentTable.getValueAt(index, 0);
            }
        }
    }


    /**
     * Implements the PushConsumer that is connected to the ASManagementAgent.
     * <br>The applet connects an instance of this class to the ASManagementAgent on startup. The agent calls
     * the PushConsumerīs push() method when a CORBA event is registered and supplies the event data. The 
     * push() method defined in this class finds out which CORBA event occurred and reacts appropriately.
     *
     * @see ASManagementAgent
     * @author Stefan Gerber
     */

    class PushConsumerImpl extends _PushConsumerImplBase {
        String[] event_data;
        public int id = 0;  //id of this pushConsumer, needed for disconnection from ASManagementAgent
  
        public PushConsumerImpl() 
        {
            System.err.println("\n\nAgentSystemApplet: PushConsumer created");
        }

        public void push(org.omg.CORBA.Any any) 
        {
            System.out.println("\n\nAgentSystemApplet: running push");

            //extract CORBA event data out of any
            event_data = new String[5];
            CosNotification.StructuredEvent se = CosNotification.StructuredEventHelper.extract(any);
            event_data[0] = se.header.fixed_header.event_type.domain_name;
            event_data[1] = se.header.fixed_header.event_type.type_name; //AgentUp/AgentDown/agentSystemUp/agentSystemDown
            event_data[2] = se.filterable_data[0].value.extract_string();  //agent_type
            event_data[3] = se.filterable_data[1].value.extract_string();  //agent_name/agent_system_ame
            event_data[4] = se.filterable_data[2].value.extract_string();  //event_channel_name

            if (agent_system_name.equals(event_data[0])) {  // is this AS concerned?
                if (event_data[1].equals("AgentUp")) {  //agent was started on this agent system
                    String status = null;
                    try {
                        //find out status of the new agent
                        AgentStatus state = _ass.get_agent_status((new NameWrapper(event_data[3]))._name);
                        switch(state.value()){
                        case AgentStatus._CfMAFRunning: status = "Running"; break;
                        case AgentStatus._CfMAFSuspended: status = "Suspended"; break;
                        case AgentStatus._CfMAFTerminated: status = "Terminated"; break;
                        default: status = "none"; break;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    //add name and status to agentTable
                    String[] value = {event_data[3], status};
                    myModel.addValue(value);

                    //repaint agentTable
                    getContentPane().validate();
                    tableScrollPane.repaint();
                    //agentTable_panel.repaint();

                    //clear selection in agentTable and disable buttons for safety reasons
                    clear_selection();
                }
                else if (event_data[1].equals("AgentDown")) {  //agent was terminated on this agent system
                    //remove entry of the agent from agentTable
                    myModel.rmValue(myModel.whereis(event_data[3]));

                    //repaint agentTable
                    getContentPane().validate();
                    tableScrollPane.repaint();
                    //agentTable_panel.repaint();

                    //clear selection in agentTable and disable buttons for safety reasons
                    clear_selection();
                }
            }
        }
            

        public void disconnect_push_consumer() {
            try {
                // Initialize the ORB.
                //org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
                // Initialize the BOA.
                //org.omg.CORBA.BOA boa = orb.BOA_init();

                System.err.println("\n\nDisconnecting push_consumer...\n");
                //boa.exit_impl_ready();
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

}



Copyright Munich Network Management Team