/**
   * 保存节目信息和文件信息 根据用户选择节目录入类型, 对节目表和文件表进行操作. 1. 正常: 保存节目表信息, 文件表信息, 生成迁移任务. 完成 2. 无实体文件: 保存节目表信息,
   * 文件表信息, 节目表(注明节目状态为未导入)和<br>
   * 文件表(注明无实体文件标识), 不生成迁移任务. 完成 3. 补充实体文件: 修改节目表和文件表标识, 补充原文件名信息, 生成迁移任务. 完成
   *
   * @param operatType 前台界面选择的节目录入类型[1: 正常, 2: 无实体文件, 3:补充实体文件]
   * @param programInfo 节目表对象
   * @param programFiles 文件表对象
   * @param inputManId 操作人员ID
   * @return Object[] object[0]: ProgramInfo object[1]: ProgramFiles
   * @throws Exception 如果节目录入不成功, 抛出节目录入不成功异常, 异常信息为: 节目录入不成功! 如果节目录入成功, 则不返回信息.
   */
  public Object[] addProgFile(
      String operatType, ProgramInfo programInfo, ProgramFiles programFiles, String inputManId)
      throws Exception {
    programInfo.setDsflag(-1L);

    if (null == programInfo.getInputtime()) {
      programInfo.setInputtime(new Date());
    }

    if (null == programFiles.getInputtime()) {
      programFiles.setInputtime(new Date());
    }

    if (null == programInfo.getInputmanid()) {
      programInfo.setInputmanid(inputManId);
    }

    if (null == programFiles.getInputmanid()) {
      programFiles.setInputmanid(inputManId);
    }

    if ("Clip".equalsIgnoreCase(programFiles.getFilecode()) && 1 == programFiles.getProgrank()) {
      programFiles.setProgrank(0L);
    }

    if ((!"2".equals(operatType))
        && (null == programFiles.getProcessinstid()
            || 0 == programFiles.getProcessinstid().trim().length())) {
      throw new NullPointerException(" 原文件名不能为空! ");
    }

    if (null != programFiles.getProgfileid()) {
      if ("H264".equals(programFiles.getFilecode())) {
        /** 修改文件名的扩展名由固定.ts为自适应, 录入时为.ts则修改后仍然为.ts HuangBo update by 2012年2月19日 20时23分 */
        programFiles.setFilename(
            programFiles.getProgfileid()
                + programFiles
                    .getProcessinstid()
                    .substring(programFiles.getProcessinstid().lastIndexOf(".")));
      } else if ("RMZIP".equals(programFiles.getFilecode())) {
        programFiles.setFilename(programFiles.getProgfileid() + "/");
      }
    }

    /** 读取序列设置ContentId的值 */
    if (null == programFiles.getContentId()) {
      programFiles.setContentId(this.sequenceManager.getContentId());
    }

    CmsResultDto cmsResultDto =
        this.programInfoModuleManager.savePrograminfoProgramfiles(
            operatType, programInfo, programFiles, inputManId);
    if (0 == cmsResultDto.getResultCode()) {
      return (Object[]) cmsResultDto.getResultObject();
    } else {
      throw new Exception(cmsResultDto.getErrorMessage());
    }
  }
  public void upload(
      String operatType,
      ProgramInfo programInfo,
      ProgramFiles programFiles,
      String sourcePartPath,
      String filePath,
      String inputManId)
      throws Exception {
    if ("2".equals(operatType)) {
      return;
    }

    CmsResultDto cmsResultDto =
        this.programInfoModuleManager.saveMigrationTaskForPrograminfo(
            programInfo, programFiles, sourcePartPath, "", filePath, "");

    if (0 != cmsResultDto.getResultCode()) {
      throw new Exception(cmsResultDto.getErrorMessage());
    }
  }
  /**
   * 修改原始文件名, 以及文件大小
   *
   * @param operatType
   * @param programInfo
   * @param programFiles
   * @param inputManId
   * @return
   * @throws Exception
   */
  public Object[] complementarityFile(
      String operatType, ProgramInfo programInfo, ProgramFiles programFiles, String inputManId)
      throws Exception {
    //		CmsResultDto cmsResultDto = this.programInfoModuleManager.isExist(
    //				programFiles.getProcessinstid(), programFiles.getFilecode());
    //		if (0 == cmsResultDto.getResultCode()) {
    //			Object[] objects = (Object[]) cmsResultDto.getResultObject();
    //			if (!(Boolean) objects[0]) {
    //				throw new Exception(" 文件不存在, 请检查路径是否正确! ");
    //			}

    CmsResultDto cmsResultDto =
        this.programInfoModuleManager.updateProgramFileName(
            programFiles.getProgfileid(),
            programFiles.getProcessinstid(),
            programFiles.getContentfilesize());
    if (0 == cmsResultDto.getResultCode()) {
      return new Object[] {programInfo, cmsResultDto.getResultObject()};
    }
    //		}
    throw new Exception(cmsResultDto.getErrorMessage());
  }
  /**
   * 节目导入判断文件是否存在, 支持ts文件和文件夹
   *
   * @param path
   * @return
   */
  public CmsResultDto isExist(String path) throws Exception {
    CmsResultDto cmsResultDto = new CmsResultDto();
    int progInputPathMaxLen =
        Integer.valueOf(new CmsConfig().getPropertyByName("ProgInputPathMaxLen"));
    String fileCode;
    /** 修改节目录入最大长度为可配置 HuangBo update by 2012年2月19日 20时29分 */
    if (progInputPathMaxLen < path.length()) {
      cmsResultDto.setResultCode(1L);
      cmsResultDto.setErrorMessage(" 系统不支持文件名长度超过[ " + progInputPathMaxLen + " ]! ");
      return cmsResultDto;
    }

    path = path.startsWith("/") ? path.substring(1) : path;
    if (path.endsWith("/")) {
      fileCode = "RMZIP";
    } else {
      fileCode = "H264";
    }
    List<String> supportExtensions =
        Arrays.asList(
            this.configDao.getValueById("SupportExtensions").toLowerCase().split("[,;|]"));
    return this.programInfoModuleManager.isExist(path, fileCode, supportExtensions);
  }