Exemplo n.º 1
0
  /** @param request */
  public ShareRequestDetails(final HttpServletRequest request) {

    String requestPath = new UrlPathHelper().getPathWithinServletMapping(request);
    if (requestPath.startsWith(URL_PATH_SEPARATOR)) {
      requestPath = requestPath.substring(1, requestPath.length());
    }
    requestPath = requestPath.trim();

    // sharekey[, eventId, daterange]
    this.pathData = extractPathData(requestPath);
    // if dr == 0,0, check for start/end query parameters
    if (DEFAULT_DATE_PHRASE.equals(getDatePhrase())) {
      String startValue = request.getParameter(START);
      DateFormat possibleFormat = getDateFormat(startValue);
      if (possibleFormat != null) {
        Date startDate = safeParse(possibleFormat.getSimpleDateFormat(), startValue);
        if (startDate != null) {
          this.pathData.setStartDate(CommonDateOperations.beginningOfDay(startDate));
          String endValue = request.getParameter(END);
          possibleFormat = getDateFormat(endValue);
          if (possibleFormat == null) {
            this.pathData.setEndDate(CommonDateOperations.endOfDay(startDate));
          } else {
            Date endDate = safeParse(possibleFormat.getSimpleDateFormat(), endValue);
            if (endDate != null && endDate.after(startDate)) {
              this.pathData.setEndDate(CommonDateOperations.endOfDay(endDate));
            } else {
              this.pathData.setEndDate(CommonDateOperations.endOfDay(startDate));
            }
          }

          canonical = true;
        }
      }
    }
    // identify displayFormat
    this.displayFormat = determineDisplayFormat(request);

    // only care about user-agent and request parameters if iCalendar is the output format
    if (this.displayFormat.isIcalendar()) {
      // sniff user-agent to predict client
      String userAgent = request.getHeader(USER_AGENT);
      this.client = predictClientFromUserAgent(userAgent);

      // examine request parameters to override
      String[] compatValues = request.getParameterValues(COMPATIBILITY_PARAM);
      if (null != compatValues) {
        for (String compatValue : compatValues) {
          if (BREAK_RECURRENCE.equals(compatValue)) {
            overrideBreakRecurrence = true;
          } else if (CONVERT_CLASS.equals(compatValue)) {
            overrideConvertClass = true;
          } else if (KEEP_RECURRENCE.equals(compatValue)) {
            keepRecurrence = true;
          }
        }
      }
      String clientValue = request.getParameter(CLIENT_PARAM);
      if (StringUtils.isNotBlank(clientValue)) {
        if (GOOGLE_CLIENT.equals(clientValue)) {
          this.client = Client.GOOGLE;
        } else if (APPLE_CLIENT.equals(clientValue)) {
          this.client = Client.APPLE;
        } else if (MOZILLA_CLIENT.equals(clientValue)) {
          this.client = Client.MOZILLA;
        }
      }
    }

    if (request.getParameter(ORGANIZING) != null) {
      this.organizerOnly = true;
    } else if (request.getParameter(ATTENDING) != null) {
      this.attendeeOnly = true;
    } else if (request.getParameter(PERSONAL) != null) {
      this.personalOnly = true;
    }

    if (request.getParameter(UW_SUPPORT_RDATE) != null) {
      this.requiresProblemRecurringPreference = true;
    }

    this.ipAddress = extractIpAddress(request);

    if (LOG.isDebugEnabled()) {
      LOG.debug(this);
    }
  }