/* (non-Javadoc)
  * @see com.google.wave.api.OperationQueue#continueThreadOfBlip(com.google.wave.api.Blip)
  */
 @Override
 public Blip continueThreadOfBlip(Blip blip) {
   Blip newBlip =
       newBlip(
           blip.getWavelet(),
           "",
           blip.getParentBlipId(),
           generateTempBlipId(blip.getWavelet()),
           blip.getThread().getId());
   appendOperation(
       OperationType.BLIP_CONTINUE_THREAD,
       blip,
       Parameter.of(ParamsProperty.BLIP_DATA, newBlip.serialize()));
   return newBlip;
 }
 /* (non-Javadoc)
  * @see com.google.wave.api.OperationQueue#appendBlipToWavelet(com.google.wave.api.Wavelet, java.lang.String)
  */
 @Override
 public Blip appendBlipToWavelet(Wavelet wavelet, String initialContent) {
   Blip newBlip =
       newBlip(
           wavelet,
           initialContent,
           null,
           generateTempBlipId(wavelet),
           wavelet.getRootThread().getId());
   appendOperation(
       OperationType.WAVELET_APPEND_BLIP,
       wavelet,
       Parameter.of(ParamsProperty.BLIP_DATA, newBlip.serialize()));
   return newBlip;
 }
  /* (non-Javadoc)
   * @see com.google.wave.api.OperationQueue#createChildOfBlip(com.google.wave.api.Blip)
   */
  @Override
  public Blip createChildOfBlip(Blip blip) {
    // Create a new thread.
    String tempBlipId = generateTempBlipId(blip.getWavelet());
    Wavelet wavelet = blip.getWavelet();
    BlipThread thread = new BlipThread(tempBlipId, -1, new ArrayList<String>(), wavelet.getBlips());

    // Add the new thread to the blip and wavelet.
    blip.addThread(thread);
    ((WaveletImpl) wavelet).addThread(thread);

    // Create a new blip in the new thread.
    Blip newBlip = newBlip(blip.getWavelet(), "", blip.getBlipId(), tempBlipId, thread.getId());
    appendOperation(
        OperationType.BLIP_CREATE_CHILD,
        blip,
        Parameter.of(ParamsProperty.BLIP_DATA, newBlip.serialize()));
    return newBlip;
  }
  /* (non-Javadoc)
   * @see com.google.wave.api.OperationQueue#insertInlineBlipToDocument(com.google.wave.api.Blip, int)
   */
  @Override
  public Blip insertInlineBlipToDocument(Blip blip, int position) {
    // Create a new thread.
    String tempBlipId = generateTempBlipId(blip.getWavelet());
    Wavelet wavelet = blip.getWavelet();
    BlipThread thread =
        new BlipThread(tempBlipId, position, new ArrayList<String>(), wavelet.getBlips());

    // Add the new thread to the blip and wavelet.
    blip.addThread(thread);
    ((WaveletImpl) wavelet).addThread(thread);

    // Create a new blip in the new thread.
    Blip inlineBlip = newBlip(blip.getWavelet(), "", blip.getBlipId(), tempBlipId, thread.getId());
    appendOperation(
        OperationType.DOCUMENT_INSERT_INLINE_BLIP,
        blip,
        Parameter.of(ParamsProperty.INDEX, position),
        Parameter.of(ParamsProperty.BLIP_DATA, inlineBlip.serialize()));
    return inlineBlip;
  }