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

📄 taskvisualization.java

📁 nesC写的heed算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  }

  /**
   * This method renders the configuration to the screen
   */  
  private void viewConfiguration() {
    // do view stuff here

// AKDNEW - shouldn't need this after testing
/*
    Vector hselects = new Vector();
    hselects.addElement("voltage");
    TASKQuery hquery = new TASKQuery(hselects, new Vector(), 1000, null);
    int hq = client.submitHealthQuery(hquery);
*/
    TASKQuery healthQuery = client.getHealthQuery();
    if (healthQuery != null) {
      healthQueryId = healthQuery.getQueryId();
    }

/*    Vector sselects = new Vector();
    sselects.addElement("temperature");
    TASKQuery squery = new TASKQuery(sselects, new Vector(), 1000, null);
    int sq = client.submitSensorQuery(squery);
*/
    TASKQuery sensorQuery = client.getSensorQuery();
    if (sensorQuery != null) {
      sensorQueryId = sensorQuery.getQueryId();
    }

    // render image
    if (config.useBlankImage()) {
      imageWidth = config.getImageWidth();
      imageHeight = config.getImageHeight();
      canvas = new ZImageCanvas(imageWidth, imageHeight);
    }
    else {
      ImageIcon icon = new ImageIcon(config.getImageName(), config.getImageName());
      Image base = icon.getImage();
      imageHeight = base.getHeight(null);
      imageWidth = base.getWidth(null);
      canvas = new ZImageCanvas(base);
    }

    // render surrounding rectangle
    layer = canvas.getLayer();
    ZLine line = new ZLine(config.getMinimumPixelX(), config.getMinimumPixelY(), 
                           config.getMaximumPixelX(), config.getMinimumPixelY());
    ZVisualLeaf leaf = new ZVisualLeaf(line);
    leaf.setSelectable(false);
    layer.addChild(leaf);

    line = new ZLine(config.getMinimumPixelX(), config.getMinimumPixelY(), 
                     config.getMinimumPixelX(), config.getMaximumPixelY());
    leaf = new ZVisualLeaf(line);
    leaf.setSelectable(false);
    layer.addChild(leaf);

    line = new ZLine(config.getMaximumPixelX(), config.getMinimumPixelY(), 
                     config.getMaximumPixelX(), config.getMaximumPixelY());
    leaf = new ZVisualLeaf(line);
    leaf.setSelectable(false);
    layer.addChild(leaf);

    line = new ZLine(config.getMinimumPixelX(), config.getMaximumPixelY(), 
                     config.getMaximumPixelX(), config.getMaximumPixelY());
    leaf = new ZVisualLeaf(line);
    leaf.setSelectable(false);
    layer.addChild(leaf);

    // render motes
    for (Enumeration e=motes.elements(); e.hasMoreElements(); ) {
      SensorMote sm = (SensorMote)e.nextElement();
      leaf = new ZVisualLeaf(sm);
      layer.addChild(leaf);
    }

    routeGroup = new ZGroup();
    routeGroup.setSelectable(false);
    layer.addChild(routeGroup);

    JPanel main = new JPanel(new BorderLayout());

    // add scroll pane
    int x=0, y = 0;
    if (imageWidth > SCROLL_WIDTH) {
      x = SCROLL_WIDTH;
    }
    else {
      x = imageWidth;
    }

    if (imageHeight > SCROLL_HEIGHT) {
      y = SCROLL_HEIGHT;
    }
    else {
      y = imageHeight;
    }

    scrollPane = new ZScrollPane(canvas);
    scrollPane.setPreferredSize(new Dimension(x+20, y+20));
    parentPanel.add(scrollPane, BorderLayout.CENTER);

    JPanel unknownNodesPanel = new JPanel();
    Border b = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
    unknownNodesPanel.setBorder(BorderFactory.createTitledBorder(b,"Unknown Nodes"));
    unknownNodesPanel.add(scrollPane2);
    parentPanel.add(unknownNodesPanel, BorderLayout.EAST);

    // create event handlers
    panEventHandler = new ZPanEventHandler(canvas.getCameraNode());
    zoomEventHandler = new ZoomEventHandler(canvas.getCameraNode());
    moveEventHandler = new MoveEventHandler2(canvas, imageWidth, imageHeight, true);
    selectionHandler = new ZCompositeSelectionHandler(canvas.getCameraNode(), canvas, canvas.getLayer(), ZCompositeSelectionHandler.MODIFY);
    zoomEventHandler.setActive(true);
    moveEventHandler.setActive(true);

    if (healthQuery != null) {
      client.addHealthResultListener(this);
      if (timer != null) {
        timer.cancel();
      }
      timer = new java.util.Timer();
      healthSamplePeriod = healthQuery.getSamplePeriod();
      timer.schedule(new Task(), 0, 10*healthSamplePeriod);
    }
    if (sensorQuery != null) {
      client.addSensorResultListener(this);
    }
  }


  /**
   * Retrieves the list of sensor motes from the given table
   *
   * @param table Table containing the sensor motes information
   * @return List of sensor motes 
   */
  public SensorMotes getSensorMotes() {
    SensorMotes sms = new SensorMotes();
    Vector mInfos = client.getAllMoteClientInfo(config.getName());
    for (int i=0; i<mInfos.size(); i++) {
      Mote m = new Mote((TASKMoteClientInfo)mInfos.elementAt(i));
// AKDNEW storing pixels not real      SensorMote sm = new SensorMote(new Integer(xConvertRealToPixel(config, m.getX())).doubleValue(), 
//                          new Integer(yConvertRealToPixel(config, m.getY())).doubleValue(),
      SensorMote sm = new SensorMote(m.getX(), m.getY(), m.getId()); 
      sms.addMote(sm);
      sm.setSensorToVisualize(sensorType);
      if (sensorType % 4 == 0) {
        sm.setColorScheme(SensorMote.GRAY, 1024);
      }
      else if (sensorType %4 == 1) {
        sm.setColorScheme(SensorMote.RED, 1024);
      }
      else if (sensorType %4 == 2) {
        sm.setColorScheme(SensorMote.BLUE, 1024);
      }
      else {
        sm.setColorScheme(SensorMote.GREEN, 1024);
      }
    }
    return sms;
  }

  /**
   * This method sets the mode of the interface
   * 
   * @param mode Mode to set the interface to
   */
  public void setMode(int mode) {
    if (currentEventHandler != null) {
      currentEventHandler.setActive(false);
    }

    switch (mode) {
      case PAN_MODE: currentEventHandler = panEventHandler;
                     canvas.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
                     break;
      case SELECT_MODE: currentEventHandler = selectionHandler;
                     canvas.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                     break;
      case NO_MODE:  currentEventHandler = null;
                     canvas.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                     break;
    }

    if (currentEventHandler != null) {
      currentEventHandler.setActive(true);
    }
  }

  public static int xConvertRealToPixel(Configuration config, double x) {
    // xP = (x - xmaxR) / ((xmaxR - xminR)/(xmaxP - xminP)) + xmaxP
    return new Double((x - config.getMaximumRealX()) / ((config.getMaximumRealX() - config.getMinimumRealX())/(config.getMaximumPixelX() - config.getMinimumPixelX())) + config.getMaximumPixelX()).intValue();
  }

  public static int yConvertRealToPixel(Configuration config, double y) {
    // yP = (y - ymaxR) / ((ymaxR - yminR)/(ymaxP - yminP)) + ymaxP
    return new Double((y - config.getMaximumRealY()) / ((config.getMaximumRealY() - config.getMinimumRealY())/(config.getMaximumPixelY() - config.getMinimumPixelY())) + config.getMaximumPixelY()).intValue();
  }

  public static double xConvertPixelToReal(Configuration config, int x) {
    // x = xmaxR + (xP - xmaxP)*(xmaxR - xminR)/(xmaxP - xminP)
    return config.getMaximumRealX() + (x - config.getMaximumPixelX())*(config.getMaximumRealX() - config.getMinimumRealX())/(config.getMaximumPixelX() - config.getMinimumPixelX());
  }

  public static double yConvertPixelToReal(Configuration config, int y) {
    // y = ymaxR + (yP - ymaxP)*(ymaxR - yminR)/(ymaxP - yminP)
    return config.getMaximumRealY() + (y - config.getMaximumPixelY())*(config.getMaximumRealY() - config.getMinimumRealY())/(config.getMaximumPixelY() - config.getMinimumPixelY());
  }

  /**
   * This method calculates the distance between 2 points
   *
   * @param x X coordinate of first point
   * @param y Y coordinate of first point
   * @param x X coordinate of second point
   * @param y Y coordinate of second point
   * 
   * @returns distance between 2 points
   */
  public static double distance(int x, int y, int x1, int y1){
    return Math.sqrt( (x-x1)*(x-x1)+(y-y1)*(y-y1));
  }

  public void addResult(TASKResult qr) {
    if (qr.getQueryId() == healthQueryId) {
      addHealthResult(qr);
    }
    else {
      addSensorResult(qr);
    }
  }

  private void addHealthResult(TASKResult qr) {
// AKDNEW - attribute names
    Integer nd = (Integer)qr.getField("nodeId");
    if (nd == null)
      return;
    int node = nd.intValue();
    SensorMote mote = motes.getMote(node);
    if (mote == null) {
      String nodeString = Integer.toString(node);
      if (!unknownNodesModel.contains(nodeString)) {
        unknownNodesModel.addElement(nodeString);
      }
      return;
    }

    // get each data field and update in mote sensor value    
    for (int i=0; i<qr.getNumFields(); i++) {
      int value = 0;
      Object o = qr.getField(i);
      if (o instanceof Integer) {
        Integer tmp = (Integer)o;
        value = tmp == null ? 0 : tmp.intValue();
      }
      else if (o instanceof Byte) {
        Byte tmp = (Byte)o;
        value = tmp == null ? 0 : tmp.intValue();
      }        
      mote.setSensorValue(i+1, value, qr.getFieldInfo(i).name);
//System.out.println("HEALTH UPDATE: node "+node+", slot: "+i+", value: "+ value);
    }

    Integer tmp = (Integer)qr.getField("parent");
    int parent = tmp == null ? 0 : tmp.intValue();

    // routes: need to create SensorLine class, which subclass from ZLine
    // add a ZLine as needed, setting time
    double x = mote.getX();
    double y = mote.getY();
    SensorMote moteParent = motes.getMote(parent);
    if (moteParent != null) {

      // get rid of existing line to parent here
      for (int i=0; i<routeGroup.getNumChildren(); i++) {
        if (routeGroup.getChild(i) instanceof SensorLine) {
          SensorLine sl = (SensorLine)routeGroup.getChild(i);
          if ((sl.getX1() == x) && (sl.getY1() == y)) {
            routeGroup.removeChild(i);
            break;
          }
        }
      }

      double xn = moteParent.getX();
      double yn = moteParent.getY();
      SensorLine sl = new SensorLine(x,y,xn,yn);
      sl.setSelectable(false);
      routeGroup.addChild(sl);
    }
//System.out.println("HEALTH UPDATE: route: "+node+" to "+parent);
  }

  private void addSensorResult(TASKResult qr) {
// AKDNEW - nodeId has to be last field
    Integer nd = ((Integer)qr.getField("nodeId"));
    if (nd == null)
      return;
    int node = nd.intValue();
    SensorMote mote = motes.getMote(node);
    if (mote == null) {
      String nodeString = Integer.toString(node);
      if (!unknownNodesModel.contains(nodeString)) {
        unknownNodesModel.addElement(nodeString);
      }
      return;
    }

    // get each data field and update in mote sensor value    
    for (int i=0; i<qr.getNumFields(); i++) {
      int value = 0;
      Object o = qr.getField(i);
      if (o instanceof Integer) {
        Integer tmp = (Integer)o;
        value = tmp == null ? 0 : tmp.intValue();
      }
      else if (o instanceof Byte) {
        Byte tmp = (Byte)o;
        value = tmp == null ? 0 : tmp.intValue();
      }        
      mote.setSensorValue(i+sensorIndex+1, value, qr.getFieldInfo(i).name);
//System.out.println("SENSOR UPDATE ("+sensorIndex+"): node "+node+", slot: "+(i+sensorIndex+1)+", value: "+ ((Integer)qr.getField(i)).intValue());
    }
  }

  /**
   * Inner class containing the repeated task to run. This handles the removal of old parent information
   */
  class Task extends TimerTask {
    
    public void run() {
      for (int i=0; i<routeGroup.getNumChildren(); i++) {
        if (routeGroup.getChild(i) instanceof SensorLine) {
          SensorLine sl = (SensorLine)routeGroup.getChild(i);
          long time = new Date().getTime();
          if (time - sl.getTime() > 4*healthSamplePeriod) {
            routeGroup.removeChild(i);
            i--;
          }
        }
      }
    }
  }
}

⌨️ 快捷键说明

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