Esempio n. 1
0
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    // The protein we're viewing
    int proteinID;

    // User making this request
    User user = UserUtils.getUser(request);
    if (user == null) {
      ActionErrors errors = new ActionErrors();
      errors.add("username", new ActionMessage("error.login.notloggedin"));
      saveErrors(request, errors);
      return mapping.findForward("authenticate");
    }

    NRProtein protein = null;
    try {
      String strID = request.getParameter("id");

      if (strID == null || strID.equals("")) {
        ActionErrors errors = new ActionErrors();
        errors.add("protein", new ActionMessage("error.protein.invalidid"));
        saveErrors(request, errors);
        return mapping.findForward("Failure");
      }

      proteinID = Integer.parseInt(strID);

      // Load our protein
      NRProteinFactory nrpf = NRProteinFactory.getInstance();
      protein = (NRProtein) (nrpf.getProtein(proteinID));

      // Abundance information. Only for yeast
      // Ghaemmaghami, et al., Nature 425, 737-741 (2003)
      if (protein.getSpecies().getId() == TaxonomyUtils.SACCHAROMYCES_CEREVISIAE) {
        List<YeastOrfAbundance> abundances =
            ProteinAbundanceDao.getInstance().getAbundance(protein.getId());
        if (abundances == null || abundances.size() == 0)
          request.setAttribute("proteinAbundance", "NOT AVAILABLE");
        else {
          if (abundances.size() == 1) {
            request.setAttribute("proteinAbundance", abundances.get(0).getAbundanceString());
          } else {
            String aString = "";
            for (YeastOrfAbundance a : abundances) {
              aString += ", " + a.getAbundanceAndOrfNameString();
            }
            aString = aString.substring(1);
            request.setAttribute("proteinAbundance", aString);
          }
        }
      }

    } catch (NumberFormatException nfe) {
      ActionErrors errors = new ActionErrors();
      errors.add("protein", new ActionMessage("error.project.invalidid"));
      saveErrors(request, errors);
      return mapping.findForward("Failure");
    } catch (Exception e) {
      ActionErrors errors = new ActionErrors();
      errors.add("username", new ActionMessage("error.project.projectnotfound"));
      saveErrors(request, errors);
      return mapping.findForward("Failure");
    }

    Map goterms = protein.getGOAll();

    if (((Collection) goterms.get("P")).size() > 0)
      request.setAttribute("processes", goterms.get("P"));

    if (((Collection) goterms.get("C")).size() > 0)
      request.setAttribute("components", goterms.get("C"));

    if (((Collection) goterms.get("F")).size() > 0)
      request.setAttribute("functions", goterms.get("F"));

    // clean up
    goterms = null;

    YatesRunSearcher yrs = new YatesRunSearcher();
    yrs.setProtein(protein);
    Collection runs = yrs.search();

    // Make sure only runs belonging to projects this user has access to are listed.
    if (runs != null && runs.size() > 0) {
      Iterator iter = runs.iterator();
      while (iter.hasNext()) {
        YatesRun yr = (YatesRun) (iter.next());
        if (!yr.getProject().checkReadAccess(user.getResearcher())) iter.remove();
      }

      request.setAttribute("yatesdata", runs);
    }

    // Get the protein inference runs where this protein was listed
    // This is a bit convoluted
    // First get all the users' projects (projects the user has read access to)
    ProjectsSearcher projSearcher = new ProjectsSearcher();
    projSearcher.setResearcher(user.getResearcher());
    List<Project> projects = projSearcher.search();
    //		List<Project> projects = user.getProjects();

    List<Integer> pinferIds = new ArrayList<Integer>();
    for (Project project : projects) {
      List<Integer> experimentIds =
          ProjectExperimentDAO.instance().getExperimentIdsForProject(project.getID());

      for (int experimentId : experimentIds) {
        List<ProteinferJob> piJobs =
            ProteinInferJobSearcher.getInstance().getProteinferJobsForMsExperiment(experimentId);
        for (ProteinferJob job : piJobs) {
          pinferIds.add(job.getPinferId());
        }
      }
    }
    // We now have the protein inference runs for this user.
    // Find out which one of then has the protein of interest.
    List<ProteinferRun> piRuns = new ArrayList<ProteinferRun>(pinferIds.size());
    ProteinferRunDAO piRunDao = ProteinferDAOFactory.instance().getProteinferRunDao();
    ProteinferProteinDAO protDao = ProteinferDAOFactory.instance().getProteinferProteinDao();
    ArrayList<Integer> nrseqIds = new ArrayList<Integer>(1);
    nrseqIds.add(proteinID);
    for (int pinferId : pinferIds) {
      if (protDao.getProteinIdsForNrseqIds(pinferId, nrseqIds).size() > 0) {
        ProteinferRun piRun = piRunDao.loadProteinferRun(pinferId);
        piRuns.add(piRun);
      }
    }
    request.setAttribute("piRuns", piRuns);

    // Set this project in the request, as a bean to be displayed on the view
    request.setAttribute("protein", protein);
    return mapping.findForward("Success");
  }
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    // User making this request
    User user = UserUtils.getUser(request);
    if (user == null) {
      ActionErrors errors = new ActionErrors();
      errors.add("username", new ActionMessage("error.login.notloggedin"));
      saveErrors(request, errors);
      return mapping.findForward("authenticate");
    }

    // we need a projectID so that we can restrict access to researchers on a project
    int projectId = 0;
    try {
      projectId = Integer.parseInt(request.getParameter("projectId"));
    } catch (NumberFormatException e) {
      projectId = 0;
    }
    if (projectId == 0) {
      ActionErrors errors = new ActionErrors();
      errors.add(
          "payment", new ActionMessage("error.payment.invalidid", "Invalid projectID in request"));
      saveErrors(request, errors);
      return mapping.findForward("standardHome");
    }

    // user should be an admin OR a researcher on the project
    Project project = ProjectFactory.getProject(projectId);
    if (!project.checkAccess(user.getResearcher())) {
      ActionErrors errors = new ActionErrors();
      errors.add(
          "payment",
          new ActionMessage(
              "error.payment.invalidaccess",
              "User does not have access to view details of the payment method."));
      saveErrors(request, errors);
      ActionForward fwd = mapping.findForward("Failure");
      ActionForward newFwd =
          new ActionForward(fwd.getPath() + "?ID=" + projectId, fwd.getRedirect());
      return newFwd;
    }

    // we need a paymentMethodId
    int paymentMethodId = 0;
    try {
      paymentMethodId = Integer.parseInt(request.getParameter("paymentMethodId"));
    } catch (NumberFormatException e) {
      paymentMethodId = 0;
    }
    if (paymentMethodId == 0) {
      ActionErrors errors = new ActionErrors();
      errors.add(
          "payment",
          new ActionMessage("error.payment.invalidid", "Invalid paymentMethodID in request"));
      saveErrors(request, errors);
      ActionForward fwd = mapping.findForward("Failure");
      ActionForward newFwd =
          new ActionForward(fwd.getPath() + "?ID=" + projectId, fwd.getRedirect());
      return newFwd;
    }

    try {
      PaymentMethod paymentMethod =
          PaymentMethodDAO.getInstance().getPaymentMethod(paymentMethodId);
      request.setAttribute("paymentMethod", paymentMethod);
      request.setAttribute("projectId", projectId);
    } catch (Exception e) {
      ActionErrors errors = new ActionErrors();
      errors.add("payment", new ActionMessage("error.payment.load", "ERROR: " + e.getMessage()));
      saveErrors(request, errors);
      log.error("Error loading payment method for ID: " + paymentMethodId, e);
      ActionForward fwd = mapping.findForward("Failure");
      ActionForward newFwd =
          new ActionForward(fwd.getPath() + "?ID=" + projectId, fwd.getRedirect());
      return newFwd;
    }

    return mapping.findForward("Success");
  }