/**
   * Updates the feedback session identified by {@code newAttributes.feedbackSesionName} and {@code
   * newAttributes.courseId}. For the remaining parameters, the existing value is preserved if the
   * parameter is null (due to 'keep existing' policy).<br>
   * Preconditions: <br>
   * * {@code newAttributes.feedbackSesionName} and {@code newAttributes.courseId} are non-null and
   * correspond to an existing feedback session. <br>
   */
  public void updateFeedbackSession(FeedbackSessionAttributes newAttributes)
      throws InvalidParametersException, EntityDoesNotExistException {

    Assumption.assertNotNull(Const.StatusCodes.DBLEVEL_NULL_INPUT, newAttributes);

    newAttributes.sanitizeForSaving();

    if (!newAttributes.isValid()) {
      throw new InvalidParametersException(newAttributes.getInvalidityInfo());
    }

    FeedbackSession fs = (FeedbackSession) getEntity(newAttributes);

    if (fs == null) {
      throw new EntityDoesNotExistException(ERROR_UPDATE_NON_EXISTENT + newAttributes.toString());
    }
    fs.setInstructions(newAttributes.instructions);
    fs.setStartTime(newAttributes.startTime);
    fs.setEndTime(newAttributes.endTime);
    fs.setSessionVisibleFromTime(newAttributes.sessionVisibleFromTime);
    fs.setResultsVisibleFromTime(newAttributes.resultsVisibleFromTime);
    fs.setTimeZone(newAttributes.timeZone);
    fs.setGracePeriod(newAttributes.gracePeriod);
    fs.setFeedbackSessionType(newAttributes.feedbackSessionType);
    fs.setSentOpenEmail(newAttributes.sentOpenEmail);
    fs.setSentPublishedEmail(newAttributes.sentPublishedEmail);
    fs.setIsOpeningEmailEnabled(newAttributes.isOpeningEmailEnabled);
    fs.setSendClosingEmail(newAttributes.isClosingEmailEnabled);
    fs.setSendPublishedEmail(newAttributes.isPublishedEmailEnabled);

    getPM().close();
  }
  private ActionResult loadCourse(String courseToLoad) throws EntityDoesNotExistException {
    int index = Integer.parseInt(getRequestParamValue("index"));

    InstructorAttributes instructor =
        logic.getInstructorForGoogleId(courseToLoad, account.googleId);

    CourseSummaryBundle course = logic.getCourseSummaryWithFeedbackSessions(instructor);
    FeedbackSessionAttributes.sortFeedbackSessionsByCreationTimeDescending(course.feedbackSessions);

    int commentsForSendingStateCount =
        logic.getCommentsForSendingState(courseToLoad, CommentSendingState.PENDING).size();
    int feedbackResponseCommentsForSendingStateCount =
        logic
            .getFeedbackResponseCommentsForSendingState(courseToLoad, CommentSendingState.PENDING)
            .size();
    int pendingCommentsCount =
        commentsForSendingStateCount + feedbackResponseCommentsForSendingStateCount;
    List<String> sectionNames = logic.getSectionNamesForCourse(course.course.id);

    InstructorHomeCourseAjaxPageData data = new InstructorHomeCourseAjaxPageData(account);
    data.init(index, course, instructor, pendingCommentsCount, sectionNames);

    statusToAdmin = "instructorHome Course Load:<br>" + courseToLoad;

    return createShowPageResult(Const.ViewURIs.INSTRUCTOR_HOME_AJAX_COURSE_TABLE, data);
  }
  @Override
  public boolean execute() {

    log.info(
        "Adjusting submissions for feedback session :" + sessionName + "in course : " + courseId);

    FeedbackSessionAttributes feedbackSession =
        FeedbackSessionsLogic.inst().getFeedbackSession(sessionName, courseId);

    String errorString =
        "Error encountered while adjusting feedback session responses of %s in course : %s : %s\n%s";

    if (feedbackSession == null) {
      log.severe(String.format(errorString, sessionName, courseId, "feedback session is null", ""));
      return false;
    }

    List<FeedbackResponseAttributes> allResponses =
        FeedbackResponsesLogic.inst()
            .getFeedbackResponsesForSession(
                feedbackSession.getFeedbackSessionName(), feedbackSession.getCourseId());
    Gson gsonParser = Utils.getTeammatesGson();
    ArrayList<StudentEnrollDetails> enrollmentList =
        gsonParser.fromJson(
            enrollmentDetails, new TypeToken<ArrayList<StudentEnrollDetails>>() {}.getType());
    for (FeedbackResponseAttributes response : allResponses) {
      try {
        StudentsLogic.inst().adjustFeedbackResponseForEnrollments(enrollmentList, response);
      } catch (Exception e) {
        log.severe(
            String.format(
                errorString,
                sessionName,
                courseId,
                e.getMessage(),
                ActivityLogEntry.generateServletActionFailureLogMessage(request, e)));
        return false;
      }
    }
    return true;
  }