public List<Offer> getOffers(RequestBean request)
			throws InvalidRequestParametersException, CitysearchException {
		log.info("Start offersHelper getOffers()");
		request.validate();
		request.setCustomerHasbudget("true");
		OfferProxy proxy = new OfferProxy();
		List<OfferAPIBean> apiResponse = proxy.getOffers(request, displaySize);
		List<Offer> offersList = toOffers(request, apiResponse);
		ProfileHelper profileHelper = new ProfileHelper(contextPath);
		Properties properties = PropertiesLoader.getAPIProperties();
		if (offersList != null && !offersList.isEmpty()) {
			for (Offer offer : offersList) {
				request.setListingId(offer.getListingId());
				Profile profile = profileHelper.getProfile(request);
				if (profile != null) {
					offer.setReviewCount(Utils.toInteger(profile
							.getReviewCount()));
					offer.setProfileUrl(profile.getProfileUrl());
					offer.setPhone(Utils.parsePhone(profile.getPhone()));

					offer.setCallBackFunction(request.getCallBackFunction());
					offer.setCallBackUrl(request.getCallBackUrl());

					String profileTrackingUrl = Utils.getTrackingUrl(profile
							.getProfileUrl(), null, request.getCallBackUrl(),
							request.getDartClickTrackUrl(), offer
									.getListingId(), profile.getPhone(),
							request.getPublisher(), request.getAdUnitName(),
							request.getAdUnitSize());
					offer.setProfileTrackingUrl(profileTrackingUrl);

					String callBackFn = Utils.getCallBackFunctionString(request
							.getCallBackFunction(), offer.getListingId(),
							profile.getPhone());
					offer.setCallBackFunction(callBackFn);

					StringBuilder couponUrl = new StringBuilder(properties
							.getProperty(PROPERTY_CITYSEARCH_COUPON_URL));
					couponUrl.append(Utils.constructQueryParam(
							CommonConstants.LISTING_ID, offer.getListingId()));
					couponUrl.append(CommonConstants.SYMBOL_AMPERSAND);
					couponUrl.append(Utils.constructQueryParam("offerId", offer
							.getOfferId()));

					String couponTrackingUrl = Utils.getTrackingUrl(couponUrl
							.toString(), null, null, request
							.getDartClickTrackUrl(), offer.getListingId(),
							profile.getPhone(), request.getPublisher(), request
									.getAdUnitName(), request.getAdUnitSize());
					offer.setCouponUrl(couponTrackingUrl);
				}
			}
		}

		if (offersList != null && !offersList.isEmpty()
				&& offersList.size() < request.getDisplaySize()) {

			for (Offer offer : offersList) {
				request.setListingId(offer.getListingId());
				Profile profile = profileHelper
						.getProfileAndHighestReview(request);
				offer.setProfile(profile);
			}
		}

		log.info("End offersHelper getOffers()");
		return offersList;
	}