public String perform(HttpServletRequest request) {
    HttpSession session = request.getSession();

    // If the user is not logged in, redirect to login screen
    User currUser = (User) session.getAttribute("user");
    if (currUser == null) {
      return "login.do";
    }

    List<String> errors = new ArrayList<String>();
    request.setAttribute("errors", errors);

    try {
      UpdateProviderForm form = formBeanFactory.create(request);

      Provider provider = providerDAO.read(Integer.parseInt(form.getProviderIdAsString()));

      if (provider == null) {
        errors.add(
            "ProviderId: "
                + form.getProviderIdAsString()
                + ", Zipcode: "
                + currUser.getZipcode()
                + ". Invalid provider selected (not in database)");
        return "error.jsp";
      } else {
        currUser.setProviderId(provider.getId());
      }

      DateTime lastSync = new DateTime(provider.getLastSync());
      DateTime now = new DateTime();

      int hours = Hours.hoursBetween(lastSync, now).getHours();
      if (hours >= 24) {
        File tempDir =
            (File) request.getServletContext().getAttribute("javax.servlet.context.tempdir");
        String contextPath = request.getServletContext().getRealPath("/");

        int hoursFromNow = Math.max(7 * 24 - hours, 0);
        int hoursDuration = Math.min(hours, 7 * 24);

        DatabaseSync.syncAirings(
            model,
            tempDir,
            contextPath,
            provider.getZipcode(),
            provider.getName(),
            hoursFromNow,
            24);

        /*
        int i;
        for (i = 0; i < hoursDuration - 24; i += 24) {
            DatabaseSync.syncAirings(model,
                                     tempDir,
                                     contextPath,
                                     provider.getZipcode(),
                                     provider.getName(),
                                     hoursFromNow + i,
                                     24);
        }

        DatabaseSync.syncAirings(model,
                                    tempDir,
                                    contextPath,
                                    provider.getZipcode(),
                                    provider.getName(),
                                    hoursFromNow + i,
                                    hoursDuration - i);
                                    */
      }

      userDAO.update(currUser);

      return "profile.do";
    } catch (Exception e) {
      errors.add(e.getClass().getName() + ": " + e.getMessage());
      return "error.jsp";
    }
  }