/**
   * Test importing of Clinical Data File.
   *
   * @throws DaoException Database Access Error.
   * @throws IOException IO Error.
   */
  @Test
  @Ignore("To be fixed")
  public void testImportClinicalDataSurvival() throws Exception {

    // TBD: change this to use getResourceAsStream()
    File clinicalFile = new File("target/test-classes/clinical_data.txt");
    ImportClinicalData importClinicalData = new ImportClinicalData(study, clinicalFile);
    importClinicalData.importData();

    LinkedHashSet<String> caseSet = new LinkedHashSet<String>();
    caseSet.add("TCGA-A1-A0SB");
    caseSet.add("TCGA-A1-A0SI");
    caseSet.add("TCGA-A1-A0SE");

    List<Patient> clinicalCaseList =
        DaoClinicalData.getSurvivalData(study.getInternalId(), caseSet);
    assertEquals(3, clinicalCaseList.size());

    Patient clinical0 = clinicalCaseList.get(0);
    assertEquals(new Double(79.04), clinical0.getAgeAtDiagnosis());
    assertEquals("DECEASED", clinical0.getOverallSurvivalStatus());
    assertEquals("Recurred/Progressed", clinical0.getDiseaseFreeSurvivalStatus());
    assertEquals(new Double(43.8), clinical0.getOverallSurvivalMonths());
    assertEquals(new Double(15.05), clinical0.getDiseaseFreeSurvivalMonths());

    Patient clinical1 = clinicalCaseList.get(1);
    assertEquals(new Double(55.53), clinical1.getAgeAtDiagnosis());
    assertEquals("LIVING", clinical1.getOverallSurvivalStatus());
    assertEquals("DiseaseFree", clinical1.getDiseaseFreeSurvivalStatus());
    assertEquals(new Double(49.02), clinical1.getOverallSurvivalMonths());
    assertEquals(new Double(49.02), clinical1.getDiseaseFreeSurvivalMonths());

    Patient clinical2 = clinicalCaseList.get(2);
    assertEquals(null, clinical2.getDiseaseFreeSurvivalMonths());
  }
  /**
   * Test importing of Clinical Data File.
   *
   * @throws DaoException Database Access Error.
   * @throws IOException IO Error.
   */
  @Test
  @Ignore("To be fixed")
  public void testImportClinicalDataParameters() throws Exception {

    // TBD: change this to use getResourceAsStream()
    File clinicalFile = new File("target/test-classes/clinical_data.txt");
    ImportClinicalData importClinicalData = new ImportClinicalData(study, clinicalFile);
    importClinicalData.importData();

    Set<String> paramSet = DaoClinicalData.getDistinctParameters(study.getInternalId());
    assertEquals(9, paramSet.size());
  }
  /**
   * Test importing of Clinical Data File.
   *
   * @throws DaoException Database Access Error.
   * @throws IOException IO Error.
   */
  @Test
  @Ignore("To be fixed")
  public void testImportClinicalDataSlice() throws Exception {

    // TBD: change this to use getResourceAsStream()
    File clinicalFile = new File("target/test-classes/clinical_data.txt");
    ImportClinicalData importClinicalData = new ImportClinicalData(study, clinicalFile);
    importClinicalData.importData();

    List<ClinicalParameterMap> slice =
        DaoClinicalData.getDataSlice(study.getInternalId(), Arrays.asList("PLATINUMSTATUS"));
    assertTrue(slice.size() >= 1);

    ClinicalParameterMap paramMap = slice.get(0);
    assertEquals("PLATINUMSTATUS", paramMap.getName());
    assertEquals("Sensitive", paramMap.getValue("TCGA-A1-A0SD"));
    assertEquals("NA", paramMap.getValue("TCGA-A1-A0SE"));
    assertEquals(2, paramMap.getDistinctCategories().size());
  }
  private void processRequestStatistics(
      HttpServletRequest request, HttpServletResponse response, String type)
      throws ServletException, IOException {
    String cancerStudyIds = request.getParameter(QueryBuilder.CANCER_STUDY_ID);

    try {
      boolean includeMut = "mut".equalsIgnoreCase(type);
      boolean includeCna = "cna".equalsIgnoreCase(type);

      Map<String, Map<String, Object>> data = new HashMap<String, Map<String, Object>>();
      // get list of cancer studies
      AccessControl accessControl = getaccessControl();
      List<CancerStudy> cancerStudies;
      if (cancerStudyIds == null || cancerStudyIds.isEmpty()) {
        cancerStudies = accessControl.getCancerStudies();
      } else {
        cancerStudies = new ArrayList<CancerStudy>();
        for (String studyId : cancerStudyIds.split("[ ,]+")) {
          CancerStudy study = DaoCancerStudy.getCancerStudyByStableId(studyId);
          if (study != null && !accessControl.isAccessibleCancerStudy(studyId).isEmpty()) {
            cancerStudies.add(study);
          }
        }
      }
      for (CancerStudy cancerStudy : cancerStudies) {
        if (cancerStudy.getCancerStudyStableId().equalsIgnoreCase("all")) {
          continue;
        }
        Map<String, Object> row = new HashMap<String, Object>();
        data.put(cancerStudy.getCancerStudyStableId(), row);

        if (!includeMut && !includeMut) {
          row.put("name", cancerStudy.getName());
          String pmid = cancerStudy.getPmid();
          if (pmid != null) {
            row.put("pmid", pmid);
          }
          String citation = cancerStudy.getCitation();
          if (citation != null) {
            row.put("citation", citation);
          }
          row.put(
              "cases", DaoPatient.getPatientsByCancerStudyId(cancerStudy.getInternalId()).size());
        }

        if (includeMut) {
          GeneticProfile mutProfile = cancerStudy.getMutationProfile();
          if (mutProfile == null) {
            row.put("mut", 0);
          } else {
            int mutEvents = DaoMutation.countMutationEvents(mutProfile.getGeneticProfileId());
            int samplesWithMut =
                DaoSampleProfile.countSamplesInProfile(mutProfile.getGeneticProfileId());
            row.put("mut", 1.0 * mutEvents / samplesWithMut);
          }
        }

        if (includeCna) {
          GeneticProfile cnaProfile = cancerStudy.getCopyNumberAlterationProfile(false);
          if (cnaProfile == null) {
            row.put("cna", 0);
          } else {
            List<Integer> samples =
                DaoSampleProfile.getAllSampleIdsInProfile(cnaProfile.getGeneticProfileId());
            Map<Integer, Double> fracs =
                DaoCopyNumberSegment.getCopyNumberActeredFraction(
                    samples,
                    cnaProfile.getCancerStudyId(),
                    GlobalProperties.getPatientViewGenomicOverviewCnaCutoff()[0]);
            double aveFrac = 0;
            for (double frac : fracs.values()) {
              aveFrac += frac;
            }
            aveFrac /= samples.size();
            row.put("cna", aveFrac);
          }
        }
      }

      response.setContentType("application/json");

      PrintWriter out = response.getWriter();
      try {
        JSONValue.writeJSONString(data, out);
      } finally {
        out.close();
      }
    } catch (DaoException ex) {
      throw new ServletException(ex);
    } catch (ProtocolException ex) {
      throw new ServletException(ex);
    }
  }