private boolean validate(HttpServletRequest request) throws DaoException {
    String cancerStudyID = request.getParameter(ID);
    if (cancerStudyID == null) {
      cancerStudyID = request.getParameter(QueryBuilder.CANCER_STUDY_ID);
    }

    CancerStudy cancerStudy = DaoCancerStudy.getCancerStudyByStableId(cancerStudyID);
    if (cancerStudy == null) {
      try {
        cancerStudy = DaoCancerStudy.getCancerStudyByInternalId(Integer.parseInt(cancerStudyID));
      } catch (NumberFormatException ex) {
      }
    }
    if (cancerStudy == null) {
      request.setAttribute(ERROR, "No such cancer study");
      return false;
    }
    String cancerStudyIdentifier = cancerStudy.getCancerStudyStableId();

    if (accessControl.isAccessibleCancerStudy(cancerStudyIdentifier).size() != 1) {
      request.setAttribute(
          ERROR,
          "You are not authorized to view the cancer study with id: '"
              + cancerStudyIdentifier
              + "'. ");
      return false;
    } else {
      UserDetails ud = accessControl.getUserDetails();
      if (ud != null) {
        logger.info("CancerStudyView.validate: Query initiated by user: "******"_all";
      request.setAttribute(QueryBuilder.CASE_SET_ID, sampleListId);
    }

    SampleList sampleList = daoSampleList.getSampleListByStableId(sampleListId);
    if (sampleList == null) {
      request.setAttribute(ERROR, "Could not find sample list of '" + sampleListId + "'. ");
      return false;
    }

    request.setAttribute(QueryBuilder.CASE_IDS, sampleList.getSampleList());

    request.setAttribute(CANCER_STUDY, cancerStudy);
    request.setAttribute(QueryBuilder.HTML_TITLE, cancerStudy.getName());
    return true;
  }
  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);
    }
  }