/**
   * Performs the action
   *
   * @param req The http request object
   * @param context The servlet context
   * @return True if the action could be performed
   */
  public boolean performAction(HttpServletRequest req, ServletContext context)
      throws ApplicationException {
    Collection phenotypes = null;
    try {
      MugenCaller caller = (MugenCaller) req.getSession().getAttribute("caller");
      Navigator nav = (Navigator) req.getSession().getAttribute("navigator");

      Collection funcsigs = new ArrayList();

      String type = req.getParameter("_type");
      String message = "";
      if (exists(type)) {
        message =
            "<b>NOTE: Sampling unit filter may be incorrectly adjusted since listing originated from Functional Significance Types view which is <u>Sampling unit independent</u>.</b>";
        funcsigs =
            modelManager.getFunctionalSignificancesForType(
                Integer.parseInt(type), caller, nav.getPageManager());
        nav.getPageManager()
            .setMax(modelManager.getNumberOfSignificancesForType(Integer.parseInt(type), caller));
      } else {
        funcsigs = modelManager.getFunctionalSignificances(caller, nav.getPageManager());
        nav.getPageManager()
            .setMax(modelManager.getNumberOfFunctionalSignificances(caller.getSuid(), caller));
      }

      Collection samplingunits = samplingUnitManager.getSamplingUnits(caller.getPid(), caller);

      req.setAttribute("message", message);
      req.setAttribute("funcsigs", funcsigs);
      req.setAttribute("samplingunits", samplingunits);

      return true;
    } catch (ApplicationException e) {
      throw e;
    } catch (Exception e) {
      e.printStackTrace();
      throw new ApplicationException("Could not retrieve functional significances.");
    }
  }
  /**
   * Performs the action
   *
   * @param request The http request object
   * @param context The servlet context
   * @throws com.arexis.mugen.exceptions.ApplicationException If the action could not be performed
   * @return True if the action could be performed
   */
  public boolean performAction(HttpServletRequest request, ServletContext context)
      throws ApplicationException {
    try {
      HttpSession session = request.getSession();

      MugenCaller caller = (MugenCaller) session.getAttribute("caller");
      Navigator nav = (Navigator) request.getSession().getAttribute("navigator");

      FormDataManager formDataManager =
          getFormDataManager(
              MugenFormDataManagerFactory.U_MARKER_SET_MEMBERSHIP_FILTER,
              MugenFormDataManagerFactory.WEB_FORM,
              request);
      System.out.println(formDataManager.toString());
      int suid = caller.getSuid();
      int sid = caller.getSid();

      Collection umarkersets = genotypeManager.getUMarkerSets(caller, sid);

      String tmpUmsid = formDataManager.getValue("umsid");
      int umsid = 0;

      // If it is the first time we show the page...
      // Choose the first unified marker set
      if (!exists(tmpUmsid)) {
        Iterator i = umarkersets.iterator();
        if (i.hasNext()) {
          UMarkerSetDTO dto = (UMarkerSetDTO) i.next();
          umsid = dto.getUmsid();
        }
      }
      // else, use the requested unified  marker set id
      else {
        umsid = Integer.parseInt(tmpUmsid);
      }

      Collection available = genotypeManager.getUMarkers(caller);
      Collection included =
          genotypeManager.getUMarkerSetPositions(umsid, caller, nav.getPageManager());

      if (umarkersets.size() == 0) {
        available = new ArrayList();
        included = new ArrayList();
      }

      available.removeAll(included);
      request.setAttribute("umarkersets", umarkersets);
      request.setAttribute("available", available);
      request.setAttribute("included", included);
      request.setAttribute(
          "species", samplingUnitManager.getSpeciesForProject(caller.getPid(), caller));
      request.setAttribute("formdata", formDataManager);

      return true;
    } catch (ApplicationException e) {
      throw new ApplicationException(
          "Could not get unified marker set membership information: " + e.getMessage());
    } catch (Exception e) {
      e.printStackTrace();
      throw new ApplicationException("Could not get unified marker set membership information.");
    }
  }