/**
   * Method which writes the cancer study metadata file.
   *
   * @param portalMetadata PortalMetadata
   * @param cancerStudyMetadata CancerStudyMetadata
   * @param numCases int
   * @throws Exception
   */
  @Override
  public void writeCancerStudyMetadataFile(
      PortalMetadata portalMetadata, CancerStudyMetadata cancerStudyMetadata, int numCases)
      throws Exception {

    File metaFile =
        org.apache.commons.io.FileUtils.getFile(
            portalMetadata.getStagingDirectory(),
            cancerStudyMetadata.getStudyPath(),
            cancerStudyMetadata.getCancerStudyMetadataFilename());
    if (LOG.isInfoEnabled()) {
      LOG.info("writeMetadataFile(), meta file: " + metaFile);
    }
    PrintWriter writer =
        new PrintWriter(org.apache.commons.io.FileUtils.openOutputStream(metaFile, false));
    writer.print("type_of_cancer: " + cancerStudyMetadata.getTumorType() + "\n");
    writer.print("cancer_study_identifier: " + cancerStudyMetadata + "\n");
    String name =
        (cancerStudyMetadata.getName().length() > 0)
            ? cancerStudyMetadata.getName()
            : cancerStudyMetadata.getTumorTypeMetadata().getName();
    name =
        name.replaceAll(
            CancerStudyMetadata.TUMOR_TYPE_NAME_TAG,
            cancerStudyMetadata.getTumorTypeMetadata().getName());
    writer.print("name: " + name + "\n");
    String description = cancerStudyMetadata.getDescription();
    description =
        description.replaceAll(CancerStudyMetadata.NUM_CASES_TAG, Integer.toString(numCases));
    description =
        description.replaceAll(
            CancerStudyMetadata.TUMOR_TYPE_TAG,
            cancerStudyMetadata.getTumorTypeMetadata().getType());
    description =
        description.replaceAll(
            CancerStudyMetadata.TUMOR_TYPE_NAME_TAG,
            cancerStudyMetadata.getTumorTypeMetadata().getName());
    writer.print("description: " + description + "\n");
    if (cancerStudyMetadata.getCitation().length() > 0) {
      writer.print("citation: " + cancerStudyMetadata.getCitation() + "\n");
    }
    if (cancerStudyMetadata.getPMID().length() > 0) {
      writer.print("pmid: " + cancerStudyMetadata.getPMID() + "\n");
    }

    writer.flush();
    writer.close();
  }
  /**
   * Method which writes a metadata file for the given DatatypeMetadata. DataMatrix may be null.
   *
   * @param portalMetadata PortalMetadata
   * @param cancerStudyMetadata CancerStudyMetadata
   * @param datatypeMetadata DatatypeMetadata
   * @param dataMatrix DataMatrix
   * @throws Exception
   */
  @Override
  public void writeMetadataFile(
      PortalMetadata portalMetadata,
      CancerStudyMetadata cancerStudyMetadata,
      DatatypeMetadata datatypeMetadata,
      DataMatrix dataMatrix)
      throws Exception {

    File metaFile =
        org.apache.commons.io.FileUtils.getFile(
            portalMetadata.getStagingDirectory(),
            cancerStudyMetadata.getStudyPath(),
            datatypeMetadata.getMetaFilename());
    if (LOG.isInfoEnabled()) {
      LOG.info("writeMetadataFile(), meta file: " + metaFile);
    }
    PrintWriter writer =
        new PrintWriter(org.apache.commons.io.FileUtils.openOutputStream(metaFile, false));
    writer.print("cancer_study_identifier: " + cancerStudyMetadata + "\n");
    writer.print(
        "genetic_alteration_type: " + datatypeMetadata.getMetaGeneticAlterationType() + "\n");
    String stableID = datatypeMetadata.getMetaStableID();
    stableID =
        stableID.replaceAll(DatatypeMetadata.CANCER_STUDY_TAG, cancerStudyMetadata.toString());
    writer.print("stable_id: " + stableID + "\n");
    writer.print(
        "show_profile_in_analysis_tab: "
            + datatypeMetadata.getMetaShowProfileInAnalysisTab()
            + "\n");
    String profileDescription = datatypeMetadata.getMetaProfileDescription();
    if (dataMatrix != null) {
      profileDescription =
          profileDescription.replaceAll(
              DatatypeMetadata.NUM_GENES_TAG, Integer.toString(dataMatrix.getGeneIDs().size()));
      profileDescription =
          profileDescription.replaceAll(
              DatatypeMetadata.NUM_CASES_TAG, Integer.toString(dataMatrix.getCaseIDs().size()));
    }
    profileDescription =
        profileDescription.replaceAll(
            DatatypeMetadata.TUMOR_TYPE_TAG, cancerStudyMetadata.getTumorType());
    writer.print("profile_description: " + profileDescription + "\n");
    writer.print("profile_name: " + datatypeMetadata.getMetaProfileName() + "\n");
    writer.flush();
    writer.close();
  }