package profiles;

import profiles.*;
import java.util.Vector;
import profiles.Device;

/**
 * L'implementazione di un Message che contiene solo testo.
 * @author Lorenzo Moretti
 * @version 1.0
 */
public class TextMessage implements Message {
  String msg;
  String src;
  Vector route = new Vector();
  byte type;

  public TextMessage(String msg, String src, byte type) {
    this.msg = msg;
    this.src = src;
    this.type = type;
  }

  public Vector getRoute() {
    return route;
  }

  public void setRoute(Vector l) {
    route = l;
  }

  public String getSrcDevice() {
    return src;
  }

  public Object getMessage() {
    return msg;
  }

  /**
   * @see Message
   */
  public  byte getType() {
    return type;
  }

  /**
   * Serializza l'oggetto in una stringa. TextMessage è in grado di
   * ricostruire l'oggetto tramite il metodo statico fromString().
   * @return
   * @see TextMessage.fromString
   */
  public String toString() {
    StringBuffer sbuff = new StringBuffer();
    sbuff.append(getType());
    sbuff.append(src);
    for (int i = 0; i < route.size(); i++) {
      sbuff.append(',');
      sbuff.append((String)route.get(i));
    }
    sbuff.append('@');
    sbuff.append(msg);

    return sbuff.toString();
  }

  /**
   * Ricostruisce l'oggetto da una stringa.
   * @param str
   * @return
   */
  public static TextMessage fromString(String str) {
    Vector route = new Vector();

    byte type = Byte.parseByte(""+str.charAt(0));

    int pos = 1;

    StringBuffer srcBuffer = new StringBuffer();
    do {
      srcBuffer.append(str.charAt(pos));
      pos++;
    } while (str.charAt(pos) != ',' && str.charAt(pos) != '@');


    while (str.charAt(pos) != '@') {
      pos++;
      StringBuffer intBuf = new StringBuffer();
      do {
        intBuf.append(str.charAt(pos));
        pos++;
      } while (str.charAt(pos) != ',' && str.charAt(pos) != '@');
      route.addElement(intBuf.toString());
    }
    pos++;

    String src = srcBuffer.toString();
    String msg = str.substring(pos);
    TextMessage theMessage = new TextMessage(msg,src, type);
    theMessage.route = route;
    return theMessage;
  }

  public int getTimeToLive() {
    return 0;
  }

  public int decTimeToLive() {
    return 0;
  }
}