/**
   * 處理以學號查詢學生選課清單
   *
   * @param mapping org.apache.struts.action.ActionMapping object
   * @param form org.apache.struts.action.ActionForm object
   * @param request javax.servlet.http.HttpServletRequest object
   * @param response javax.servlet.http.HttpServletResponse object
   * @return org.apache.struts.action.ActionForward object
   * @exception java.lang.Exception
   */
  @SuppressWarnings("unchecked")
  public ActionForward list(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    DynaActionForm aForm = (DynaActionForm) form;
    HttpSession session = request.getSession(false);
    Toolket.resetCheckboxCookie(response, SELD_LIST_NAME);
    // 確實清除變數"seldList"內所存資料,因學生可能無選課資料
    session.removeAttribute(SELD_LIST_NAME);
    ActionMessages messages = validateInputForUpdate(aForm, Toolket.getBundle(request));
    if (!messages.isEmpty()) {
      saveErrors(request, messages);
      return mapping.findForward(IConstants.ACTION_MAIN_NAME);
    } else {
      try {
        CourseManager cm = (CourseManager) getBean(COURSE_MANAGER_BEAN_NAME);
        log.info("Student NO : " + aForm.getString("stdNo"));
        List<Map> seldList =
            doForDuplicate(cm.getSeldDataByStudentNo(aForm.getString("stdNo"), "1"));
        if (!seldList.isEmpty()) {
          session.setAttribute("NO", aForm.getString("stdNo").toUpperCase());
          int hours = 0, position = 0;
          float credit = 0.0F;
          List<SeldDataInfo> result = new ArrayList<SeldDataInfo>();
          SeldDataInfo info = null;
          for (Map content : seldList) {
            info = new SeldDataInfo();
            Integer dtimeOid = (Integer) content.get("oid");
            info.setClassNo((String) content.get("classNo"));
            info.setClassName((String) content.get("className"));
            info.setCsCode((String) content.get("cscode"));
            info.setCsName((String) content.get("chi_Name"));
            info.setStuSelect(String.valueOf(cm.findSeldCountByDtimeOid(dtimeOid)));
            info.setSelectLimit(((Integer) content.get("select_Limit")).toString());
            info.setHour(Short.valueOf(((Integer) content.get("thour")).toString()));
            info.setCredit((Float) content.get("credit"));
            info.setSeldOid((Integer) content.get("soid")); // Seld Oid
            String opt = (String) content.get("opt");
            info.setOpt(opt);
            info.setOptName(Toolket.getCourseOpt(opt));
            info.setDtimeOid(dtimeOid); // Dtime Oid
            info.setPosition(Integer.valueOf(position++));
            info.setTerm((String) content.get("sterm"));
            hours += ((Integer) content.get("thour")).intValue();
            credit += ((Float) content.get("credit")).floatValue();
            result.add(info);
          }
          session.setAttribute(SELD_LIST_COUNT, Integer.valueOf(seldList.size()));
          session.setAttribute(SELD_LIST_HOURS, Integer.valueOf(hours));
          session.setAttribute(
              SELD_LIST_CREDITS, Float.valueOf(new DecimalFormat("0.0").format(credit)));
          session.setAttribute(SELD_LIST_NAME, result);
          session.setAttribute("mode", "ALL");
        } else {
          // 查無資料則回傳空白List
          session.setAttribute(SELD_LIST_NAME, Collections.EMPTY_LIST);
          session.setAttribute("mode", "NONE");
          ActionMessages msg = new ActionMessages();
          msg.add(
              ActionMessages.GLOBAL_MESSAGE, new ActionMessage("Course.messageN1", "查無任何選課資料!!"));
          saveMessages(request, msg);
        }

      } catch (Exception e) {
        ActionMessages errors = new ActionMessages();
        errors.add(
            ActionMessages.GLOBAL_MESSAGE, new ActionMessage("Exception.generic", e.getMessage()));
        saveErrors(request, errors);
        return mapping.findForward(IConstants.ACTION_MAIN_NAME);
      }
    }

    setContentPage(request.getSession(false), "course/OnlineAddRemoveCourse.jsp");
    return mapping.findForward(IConstants.ACTION_MAIN_NAME);
  }