/*
   * (非 Javadoc)
   *
   * @seecom.fujitsu.rsi.server.acceptor.base.ContentsProfileBase#
   * stop_distribute_contents(long, long,
   * org.robotservices.v02.profile.acceptor.IDistributionTool)
   */
  @Override
  public Ret_value stop_distribute_contents(
      long conv_id, long distribution_id, IDistributionTool tools) {

    Ret_value ret = new Ret_value();
    ContentsProfileHelper helper = new ContentsProfileHelper(ret);
    // SharedDataで保持している会話IDと比較
    Long id = sharedData.getConv_id();
    if (id == null || id != conv_id) {
      // 認証エラー
      helper.setResult(RESULT.ERROR.getResult());
      helper.setDetailCode(DC(COP, STOP_DISTRIBUTE_CONTENTS, 180));
      helper.setDetail(MSG(180));
      return ret;
    }

    // 配信処理の停止
    tools.stopDistribute();

    // コンテンツマネージャーからロボットIDの登録を削除
    contentsman.unregistRobot(sharedData.getRobot_id());

    // 依頼結果の返却
    helper.setResult(RESULT.SUCCESS.getResult());
    // 正常終了時は詳細コードの値が不定
    helper.setDetailCode(DC_INDEFINITE);
    // 任意の文字列を設定
    helper.setDetail("依頼結果=正常終了");
    return ret;
  }
  /*
   * (非 Javadoc)
   *
   * @see
   * com.fujitsu.rsi.server.acceptor.base.ContentsProfileBase#distribute_contents
   * (long, java.lang.String, int, int,
   * org.robotservices.v02.profile.acceptor.IDistributionTool)
   */
  @Override
  public Ret_value distribute_contents(
      long conv_id, String requirement_term, int contents_num, int span, IDistributionTool tools) {

    Ret_value ret = new Ret_value();
    ContentsProfileHelper helper = new ContentsProfileHelper(ret);
    // SharedDataで保持している会話IDと比較
    Long id = sharedData.getConv_id();
    if (id == null || id != conv_id) {
      // 認証エラー
      helper.setResult(RESULT.ERROR.getResult());
      helper.setDetailCode(DC(COP, DISTRIBUTE_CONTENTS, 160));
      helper.setDetail(MSG(160));
      return ret;
    }

    // コンテンツ管理からコンテンツを取得
    final Contents contents = contentsman.registRobot(sharedData.getRobot_id());

    // 配信クラスを作成して登録
    tools.setDistributor(
        new IDistributor() {
          @Override
          public Ret_value doProcess() {
            // データがアップロードされるのを待つ
            String contentsdata = "";
            synchronized (contents) {
              try {
                while ((contentsdata = contents.getData()) == null) {
                  contents.wait();
                }
                contents.setData(null);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }

            Ret_value ret = new Ret_value();
            ContentsProfileHelper helper = new ContentsProfileHelper(ret);
            helper.setResult(RESULT.SUCCESS.getResult());
            // 正常終了時は詳細コードの値が不定
            helper.setDetailCode(DC_INDEFINITE);
            // コンテンツデータを設定
            helper.setDetail(contentsdata);
            return ret;
          }

          @Override
          public void terminate() {}
        });

    try {
      // 配信処理の開始
      tools.startDistribution();
    } catch (RSiException e) {
      e.printStackTrace();
    }

    // 依頼結果の返却
    helper.setResult(RESULT.SUCCESS.getResult());
    helper.setDistributionId((long) (Math.random() * 10));
    // 正常終了時は詳細コードの値が不定
    helper.setDetailCode(DC_INDEFINITE);
    // 任意の文字列を設定
    helper.setDetail("依頼結果=正常終了");
    return ret;
  }