Package remote.gui.util

Source Code of remote.gui.util.MoteControlTable

package remote.gui.util;

import java.util.Observable;
import java.util.Vector;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Observer;

import javax.swing.event.TreeModelListener;
import javax.swing.table.AbstractTableModel;
import remote.motecontrol.client.LedsInputStream;
import remote.motecontrol.client.LedsListener;
import remote.motecontrol.client.Mote;
import remote.motecontrol.client.MoteList;
import remote.motecontrol.client.MoteListListener;
import remote.motecontrol.client.SimpleMote;
import remote.motecontrol.client.SimpleMoteStatus;
import remote.motecontrol.client.SimpleMoteStatusListener;
import remote.protocol.motecontrol.MsgCommand;
import remote.protocol.motecontrol.MsgResult;
import remote.service.motedata.client.MoteDataWrapper;
import remote.service.motedata.client.Table;
import remote.service.motedata.client.TableHeader;
import remote.service.motedata.client.TableListener;
import remote.service.motedata.client.TableRow;

public class MoteControlTable implements MoteListListener, SimpleMoteStatusListener, Table {

  private static final long serialVersionUID = -8759189345776880210L;

  protected Header header = new Header(this);
  protected Hashtable moteControlMap;
  protected Vector moteControlVector;
  protected HashSet listeners;

  protected class LedsListenerWrapper implements LedsListener
  {
    MoteControlTable table;
    SimpleMote mote;

    public LedsListenerWrapper(MoteControlTable table, SimpleMote mote) {
      super();
      this.table = table;
      this.mote = mote;
    }

    public void ledsChanged(LedsInputStream leds) {
      this.table.ledsChange(mote);
    }

  }

  protected class Header implements TableHeader
  {

    MoteControlTable table;

    public Header(MoteControlTable table)
    {
      this.table = table;
    }

    public Table getTable() {
      return table;
    }

    public int indexOf(String columnName) throws Exception {
      if (columnName.equals("mote_id")) return MoteControlRow.COL_MOTE_ID;
      if (columnName.equals("site")) return MoteControlRow.COL_SITE;
      if (columnName.equals("netaddress")) return MoteControlRow.COL_NETADDRESS;
      if (columnName.equals("macaddress")) return MoteControlRow.COL_MACADDRESS;
      if (columnName.equals("status")) return MoteControlRow.COL_STATUS;
      if (columnName.equals("lastrequest")) return MoteControlRow.COL_LAST_REQUEST;
      if (columnName.equals("leds")) return MoteControlRow.COL_LEDS;
      if (columnName.equals("logfile")) return MoteControlRow.COL_LOGFILE;
      throw new Exception("Invalid column name");
    }

    public String getTitle(String columnName) throws Exception {
      return this.getTitle(this.indexOf(columnName));
    }

    public String getTitle(int columnIndex) {
      switch (columnIndex)
      {
        case MoteControlRow.COL_MOTE_ID:
          return "mote_id";
        case MoteControlRow.COL_SITE:
          return "Site";
        case MoteControlRow.COL_NETADDRESS:
          return "NET";
        case MoteControlRow.COL_MACADDRESS:
          return "MAC";
        case MoteControlRow.COL_STATUS:
          return "Status";
        case MoteControlRow.COL_LAST_REQUEST:
          return "Last request";
        case MoteControlRow.COL_LEDS:
          return "Leds";
        case MoteControlRow.COL_LOGFILE:
          return "Local log";
      }
      return null;
    }

    public String getName(int columnIndex) {
      switch (columnIndex)
      {
        case MoteControlRow.COL_MOTE_ID:
          return "mote_id";
        case MoteControlRow.COL_SITE:
          return "site";
        case MoteControlRow.COL_NETADDRESS:
          return "netaddress";
        case MoteControlRow.COL_MACADDRESS:
          return "macaddress";
        case MoteControlRow.COL_STATUS:
          return "status";
        case MoteControlRow.COL_LAST_REQUEST:
          return "lastrequest";
        case MoteControlRow.COL_LEDS:
          return "leds";
        case MoteControlRow.COL_LOGFILE:
          return "logfile";
      }
      System.out.println("Invalid columnIndex "+columnIndex);
      return null;
    }

    public Class getClass(int columnIndex) throws ClassNotFoundException {
      switch (columnIndex)
      {
        case MoteControlRow.COL_MOTE_ID:
          return Long.class;
        case MoteControlRow.COL_SITE:
          return String.class;
        case MoteControlRow.COL_NETADDRESS:
          return Integer.class;
        case MoteControlRow.COL_MACADDRESS:
          return String.class;
        case MoteControlRow.COL_STATUS:
          return String.class;
        case MoteControlRow.COL_LAST_REQUEST:
          return String.class;
        case MoteControlRow.COL_LEDS:
          return LedsInputStream.class;
        case MoteControlRow.COL_LOGFILE:
          return String.class;
      }
      return null;
    }

    public Class getClass(String columnName) throws Exception {
      return this.getClass(this.indexOf(columnName));
    }

    public boolean isVisible(String columnName) throws Exception {
      if (columnName.equals("mote_id") ||  columnName.equals("leds") )
      {
        return false;
      }
      else
      {
        return true;
      }
    }

    public boolean isVisible(int columnIndex) {
      try
      {
        return this.isVisible(this.getName(columnIndex));
      }
      catch (Exception e)
      {
        e.printStackTrace();
        return false;
      }
    }

    public int countVisible() {
      return 6;
    }

  }

  public MoteControlTable(MoteList moteList)
  {
    moteControlMap = new Hashtable();
    // create mote controls and add to the list
    Iterator i = moteList.getCollectionView().iterator();
    this.moteControlVector = new Vector();
    this.listeners = new HashSet();
    while (i.hasNext())
    {
      this.addMote((SimpleMote)i.next());
    }
    moteList.addListener(this);
  }

  protected void refreshTable()
  {
    this.moteControlVector = new Vector(this.moteControlMap.values());
  }

  protected void addMote(SimpleMote mote)
  {
    try
    {
      Table moteInfoTable = MoteDataWrapper.getMoteTable();
      int colIndex = moteInfoTable.getHeader().indexOf("mote_id");
      TableRow moteInfoRow = moteInfoTable.lookup(colIndex,new Long(mote.getId()));
      MoteControlRow moteControl = new MoteControlRow(mote,true,moteInfoRow,this);
    /*  LedsListenerWrapper ledsobs = new LedsListenerWrapper(this,mote);
      moteControl.getMoteLeds().addListener(ledsobs);*/
      this.moteControlMap.put(mote,moteControl);
      mote.getStatus().addChangeListener(this);
      this.refreshTable();
      TableListener l;
      Iterator it = listeners.iterator();
      while(it.hasNext())
      {
        l = (TableListener)it.next();
        l.addedRow(this,moteControl);
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }

  }

  protected void removeMote(SimpleMote mote)
  {
    mote.getStatus().removeChangeListener(this);
    MoteControlRow row = (MoteControlRow)this.moteControlMap.remove(mote);
    this.refreshTable();
    TableListener l;
    Iterator it = listeners.iterator();
    while(it.hasNext())
    {
      l = (TableListener)it.next();
      l.deletedRow(this,row);
    }
  }

  public void addedMote(MoteList moteList, Mote mote) {
    this.addMote((SimpleMote)mote);
  }

  public void removedMote(MoteList moteList, Mote mote) {
    this.removeMote((SimpleMote)mote);
  }

  public void cleared(MoteList moteList)
  {
    moteControlMap.clear();
    this.refreshTable();
  }

  public void simpleMoteStatusChange(SimpleMote mote) {
    MoteControlRow row = (MoteControlRow)this.moteControlMap.get(mote);
    TableListener l;
    Iterator it = listeners.iterator();
    while(it.hasNext())
    {
      l = (TableListener)it.next();
      l.updatedCell(this,row,MoteControlRow.COL_STATUS);
    }
  }

  public MoteControl getMoteControl(int index)
  {
    return (MoteControl)this.moteControlVector.get(index);
  }

  public void ledsChange(SimpleMote mote)
  {
    int index = this.moteControlVector.indexOf(this.moteControlMap.get(mote));

  }

  protected String decodeLastCommandResult(SimpleMoteStatus s)
  {
    String prefix,suffix;
    switch(s.getLastCommand())
    {
      case MsgCommand.CANCELPROGRAMMING:
        prefix = "Cancel programming ";
        break;
      case MsgCommand.PROGRAM:
        prefix = "Programming ";
        break;
      case MsgCommand.RESET:
        prefix = "Reset ";
        break;
      case MsgCommand.START:
        prefix = "Start ";
        break;
      case MsgCommand.STATUS:
        prefix = "Status request ";
        break;
      case MsgCommand.STOP:
        prefix = "Stop ";
        break;
      default:
        prefix = "Unknown command ";
    }

    switch(s.getLastResult())
    {
      case MsgResult.FAILURE:
        suffix = "failed";
        break;
      case MsgResult.NOT_SUPPORTED:
        suffix = "is not supported";
        break;
      case MsgResult.SUCCESS:
        suffix = "succesful";
        break;
      default:
        suffix = "returned unkown result";
    }
    return prefix+suffix;
  }

  public TableHeader getHeader() {
    return this.header;
  }

  public TableRow getRow(int rowIndex) {
    return (TableRow)this.moteControlVector.get(rowIndex);
  }

  public int rows() {
    return this.moteControlVector.size();
  }

  public int columns() {
    return 8;
  }

  public TableRow lookup(int columnIndex, Object value) {
    return null;
  }

  public void addListener(TableListener l) {
    listeners.add(l);
  }

  public void removeListener(TableListener l) {
    listeners.remove(l);
  }
}
TOP

Related Classes of remote.gui.util.MoteControlTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.