/** @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); } }