⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmevbrowser.java

📁 SRI international 发布的OAA框架软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//Title:        Event Browser
//Version:
//Author:       Adam Cheyer
//Company:      SRI International
//Description:  Displays and records event traces

/**
 * The contents of this file are subject to the OAA  Community Research
 * License Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License
 * at http://www.ai.sri.com/~oaa/.  Software distributed under the License
 * is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * rights and limitations under the License.  Portions of the software are
 * Copyright (c) SRI International, 1999.  All rights reserved.
 * "OAA" is a registered trademark, and "Open Agent Architecture" is a
 * trademark, of SRI International, a California nonprofit public benefit
 * corporation.
*/

package com.sri.oaa2.agt.monitor;

import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import com.sri.oaa2.icl.*;

public class frmEvBrowser extends JFrame {
  BorderLayout borderLayout1 = new BorderLayout();
  JScrollPane jScrollPane1 = new JScrollPane();
  JList lstEvents = new JList();
  JToolBar jToolBar1 = new JToolBar();
  JButton btnClear = new JButton();
  JButton btnFilters = new JButton();
  JRadioButton rbHighLevel = new JRadioButton();
  JRadioButton rbTcp = new JRadioButton();
  JCheckBox chkOneAgent = new JCheckBox();


  // Class variables -----------------------------------
  int evtAt = -1;                     // Current event
  Vector evtLog = new Vector();       // Contains log of all events
  Vector evtLogF = new Vector();      // Contains formatted log of all events
  frmMonitor fMonitor = null;         // Pointer back to parent
  String findStr = "";
  int findPos = 0;
  IclTerm lastSolutions = null;       // format event stores last solutions here

  // previous points for event arrows (used to erase previous)
  Point prevPt1 = null;
  Point prevPt2 = null;

  public frmEvBrowser(frmMonitor f) {
    try  {
      fMonitor = f;
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }


  private void jbInit() throws Exception {

    // Main window
    this.setSize(600,300);
    this.getContentPane().setLayout(borderLayout1);

    // Buttons and options

    // Clear all events
    this.setTitle("Event Log");
    this.addComponentListener(new java.awt.event.ComponentAdapter() {
      public void componentResized(ComponentEvent e) {
        this_componentResized(e);
      }
    });
    btnClear.setText("Clear Log");
    btnClear.setSelected(true);
    btnClear.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btnClear_actionPerformed(e);
      }
    });
    btnFilters.setText("Set Filters");
    btnFilters.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btnFilter_actionPerformed(e);
      }
    });

    // Display high-level version of events
    rbHighLevel.setText("High Level");
    rbHighLevel.setSelected(true);
    rbHighLevel.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        rbLevel_actionPerformed(e);
      }
    });

    // Display low-level (TCP) version of events
    rbTcp.setText("TCP Level");
    rbTcp.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        rbLevel_actionPerformed(e);
      }
    });

    // Display only events for currenly selected agent
    chkOneAgent.setText("Only current agent");
    chkOneAgent.setEnabled(false);
    chkOneAgent.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        chkOneAgent_actionPerformed(e);
      }
    });

    // Scrolling event window
    jScrollPane1.setPreferredSize(new Dimension(300,200));
    jScrollPane1.getViewport().add(lstEvents, null);
    lstEvents.setFont(new Font("Courier", 0, 12));
    this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
    lstEvents.addKeyListener(new java.awt.event.KeyAdapter() {
      public void keyPressed(KeyEvent e) {
        lstEvents_keyPressed(e);
      }
    });

    // Toolbar
    this.getContentPane().add(jToolBar1, BorderLayout.NORTH);
    jToolBar1.add(btnFilters, null);
    jToolBar1.addSeparator();
    jToolBar1.add(btnClear, null);
    jToolBar1.addSeparator();
    jToolBar1.add(rbHighLevel, null);
    jToolBar1.add(rbTcp, null);
    jToolBar1.add(chkOneAgent, null);

    // Group the radio buttons.
    ButtonGroup group = new ButtonGroup();
    group.add(rbHighLevel);
    group.add(rbTcp);


  }

  /**
  // Formats an event as "high level", meaning at a level
  // that programmers familiar with the OAA library API
  // will be used to.  "tcp level" doesn't change the event
  // at all, just returning the exact bytes that were sent.
  */
  public String formatEvent(String ev, boolean highLevel) {
     lastSolutions = null;
     if (highLevel) {
        IclTerm evt = IclTerm.fromString(true, ev);
 
        if (evt == null || !(evt instanceof IclStruct)) {
           return ev;
        }
        String fun = ((IclStruct)evt).getFunctor();
        int arity = evt.size();

        ///////////  oaaSolve()
        
        // ev_solve(GoalId,Goal,Params)  --> oaaSolve(Goal, Params)
        if ((fun.equals("ev_solve"))) {
           return "oaaSolve(" + evt.getTerm(1) + "," + evt.getTerm(2) + ")";
        } else

        // ev_solved(GoalId,Requestees,Solvers,Goal,P,Sols) --> N solutions found for Goal
        if (fun.equals("ev_solved")) {
           String goal = "[]";
           String params = "[]";
           IclTerm solutions = null;
           String res = "";
           Integer numSolutions;

           goal = evt.getTerm(3).toString();
           params = evt.getTerm(4).toString();
           solutions = evt.getTerm(5);

           numSolutions = new Integer(solutions.size());
           res = numSolutions.toString() +
              " solution(s) found for " + goal + "," + params;
           numSolutions = new Integer(1);

          // Store solutions for event in global variable
           lastSolutions = solutions;
           
           return res;
        } else

        ///////////  oaaAddData(), oaaRemoveData(), oaaReplaceData()
        
        // ev_update_data(GoalId,Mode,Data,Params) --> oaaAddData(Data,Params)
        if ((fun.equals("ev_update_data"))) {
           if (evt.getTerm(1).toString().equals("add"))
              return "oaaAddData(" + evt.getTerm(2) + "," + evt.getTerm(3) + ")";
           else
           if (evt.getTerm(1).toString().equals("remove"))
              return "oaaRemoveData(" + evt.getTerm(2) + "," + evt.getTerm(3) + ")";
           else
           if (evt.getTerm(1).toString().equals("replace"))
              return "oaaReplaceData(" + evt.getTerm(2) + "," + evt.getTerm(3) + ")";
           else return ev; 
        } else

        // ev_data_updated(GoalId,Mode,Data,P,Sols) --> Num solvers...
        if (fun.equals("ev_data_updated")) {
           String mode = evt.getTerm(1).toString(); 
           String data = "[]";
           String params = "[]";
           IclTerm solutions = null;
           String res = "";
           Integer numSolutions;

           data = evt.getTerm(2).toString();
           params = evt.getTerm(3).toString();
           solutions = evt.getTerm(5);

           numSolutions = new Integer(solutions.size());
           if (mode.equals("add"))
              res = numSolutions + " solvers(s) found for oaaAddData(" + data + "," + params + ") : " + solutions;
           else if (mode.equals("remove"))
              res = numSolutions + " solvers(s) found for oaaRemoveData(" + data + "," + params + ") : " + solutions;
           else if (mode.equals("replace"))
              res = numSolutions + " solvers(s) found for oaaReplaceData(" + data + "," + params + ") : " + solutions;
           
           return res;
        } else
        
        ///////////  oaaAddTrigger(), oaaRemoveTrigger()  
        //           *oaaReplaceTrigger() doesn't exist in OAA libraries yet for some reason
        
        // ev_update_trigger(GoalId,Mode,Type,Cond,Act,Params) --> oaaAddTrigger(Type,Cond,Act,Params)
        if (fun.equals("ev_update_trigger")) {
           if (evt.getTerm(1).toString().equals("add"))
              return "oaaAddTrigger(" + evt.getTerm(2) + "," + evt.getTerm(3) + "," + evt.getTerm(4) + "," + evt.getTerm(5)  + ")";
           else
           if (evt.getTerm(1).toString().equals("remove"))
              return "oaaRemoveTrigger(" + evt.getTerm(2) + "," + evt.getTerm(3) + "," + evt.getTerm(4) + "," + evt.getTerm(5) + ")";
           else return ev; 
        } else

        // ev_trigger_updated(GoalId,Mode,T,C,A,P,Sols) --> Num solvers:
        if (fun.equals("ev_trigger_updated")) {
           String mode = evt.getTerm(1).toString(); 
           String type = "[]";
           String cond = "[]";
           String act = "[]";
           String params = "[]";
           IclTerm solutions = null;
           String res = "";
           Integer numSolutions;

           type = evt.getTerm(2).toString();
           cond = evt.getTerm(3).toString();
           act = evt.getTerm(4).toString();
           params = evt.getTerm(5).toString();
           solutions = evt.getTerm(7);

           numSolutions = new Integer(solutions.size());
           if (mode.equals("add"))
              res = numSolutions + " solvers(s) found for oaaAddTrigger(" + type + "," + cond + "," + act + "," + params + ") : " + solutions;
           else if (mode.equals("remove"))
              res = numSolutions + " solvers(s) found for oaaRemoveTrigger(" + type + "," + cond + "," + act + ","+ params + ") : " + solutions;
           
           return res;
        }
        else return ev;
     }
     else return ev;
  }

  // Returns the sign (+1 or -1) of a number
  int sign(double x) {
     if (x >= 0)
        return 1;
     else return -1;
  }


  // Given a start point, end point, height and width of a component, and a pad
  // size, shortens the end point so that it doesn't intersect with the component.
  Point adjustEndpoint(Point startPt, Point endPt, int endH, int endW, int pad) {

     double dx = startPt.x - endPt.x;
     double dy = startPt.y - endPt.y;
     Point res;
     int newX = 0, newY = 0;

     if (Math.abs(dx/dy) < 1) {
        newY = endPt.y + sign(dy) * (endH / 2 + pad);
        if (dy != 0)
           newX = endPt.x + sign(dx) * (endW / 2 + pad) * (int)dx / (int) dy * sign(dx/dy);
        else newX = endPt.x + sign(dx) * (endW / 2 + pad);
     }
     else {
        newX = endPt.x + sign(dx) * (endW / 2 + pad);
        if (dx != 0)
           newY = endPt.y + sign(dy) * (endH / 2 + pad) * (int)dy / (int)dx * sign(dx/dy);
        else newY = endPt.y + sign(dy) * (endH / 2 + pad);
     }
     return new Point(newX, newY);
  }

  // Given an agent component, draws an arrow from or to the facilitator button
  // If agt is null, simply erases the last drawn arrow
  void drawMsgArrow(agtInfo agt, boolean receive) {
     Graphics g = fMonitor.pnlMonitor.getGraphics();
     Point facPt, agtPt, newFacPt, newAgtPt;
     int pad = 10;
     int h = 0, w = 0;

     // If no agent given, simply erase last drawn arrow
     if (agt == null) {
         if (prevPt1 != null) {
            g.setColor(Color.lightGray);
            g.drawLine(prevPt1.x, prevPt1.y, prevPt2.x, prevPt2.y);
            g.fillRect(prevPt2.x-pad/2, prevPt2.y-pad/2, pad, pad);
         }
     }
     else {
         facPt = fMonitor.btnFacilitator.getLocation();
         agtPt = agt.getLocation();

         // the points start out in the center points of the facilitator and agent
         facPt.x = facPt.x + (fMonitor.btnFacilitator.getWidth() / 2);
         facPt.y = facPt.y + (fMonitor.btnFacilitator.getHeight() / 2);
         agtPt.x = agtPt.x + (agt.getWidth() / 2);
         agtPt.y = agtPt.y + (agt.getHeight() / 2);

         // Erase last drawn arrow
         if (prevPt1 != null) {
            g.setColor(Color.lightGray);
            g.drawLine(prevPt1.x, prevPt1.y, prevPt2.x, prevPt2.y);
            g.fillRect(prevPt2.x-pad/2, prevPt2.y-pad/2, pad, pad);
         }

         newAgtPt = adjustEndpoint(facPt, agtPt, agt.getHeight(), agt.getWidth(), pad);
         newFacPt = adjustEndpoint(agtPt, facPt, fMonitor.btnFacilitator.getHeight(),
                    fMonitor.btnFacilitator.getWidth(), pad);
         if (receive) {
            prevPt1 = newFacPt;
            prevPt2 = newAgtPt;
         }
         else {
            prevPt1 = newAgtPt;
            prevPt2 = newFacPt;
         }

         // Draw the arrow
         g.setColor(Color.blue);
         g.drawLine(prevPt1.x, prevPt1.y, prevPt2.x, prevPt2.y);
         g.fillRect(prevPt2.x-pad/2, prevPt2.y-pad/2, pad, pad);
     }
  }

  // Given an event (in log format, ie.  m_ev(OP, AGTID, EVENT), add it:
  //    - to the log record
  //    - to the event window
  //    - drawn graphically on the screen
  public void addEvent(IclTerm event, boolean addToLog, boolean addToWindow, boolean drawGraphic) {
      String op    = event.getTerm(0).toString();
      String AgtId = event.getTerm(1).getTerm(1).toString();
      String ev    = event.getTerm(2).toString();
      agtInfo agt;

      if (!fMonitor.shouldLogEvent(op, AgtId, ev))
         return;

      agt = fMonitor.findAgentByIdName(AgtId, null);
      if (agt != null) {
         if (addToLog) {
            evtLog.addElement((evtLog.size()+1) + ": " + event.toString());

            // We can now browse the events
            if (evtLog.size() == 1) {
               enableEventFunctions(true);
            }

            // Record # bytes for profiling information
            if (op.compareTo("send") == 0) {
               agt.bytesReceived = agt.bytesReceived + ev.length();
               if (agt.bytesReceived > fMonitor.maxBytesReceived)
                  fMonitor.maxBytesReceived = agt.bytesReceived;
               fMonitor.totalBytesReceived = fMonitor.totalBytesReceived + agt.bytesReceived;
            }
            else {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -