Java tutorial
/* * [y] hybris Platform * * Copyright (c) 2000-2013 hybris AG * All rights reserved. * * This software is the confidential and proprietary information of hybris * ("Confidential Information"). You shall not disclose such Confidential * Information and shall use it only in accordance with the terms of the * license agreement you entered into with hybris. * * */ package com.acc.controller; import de.hybris.platform.commercefacades.storefinder.StoreFinderFacade; import de.hybris.platform.commercefacades.storelocator.data.PointOfServiceData; import de.hybris.platform.commerceservices.search.pagedata.PageableData; import de.hybris.platform.commerceservices.store.data.GeoPoint; import de.hybris.platform.commerceservices.storefinder.data.StoreFinderSearchPageData; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.google.common.base.Function; import com.google.common.collect.Lists; @Controller public class StoreFinderController extends BaseController { private static final String DEFAULT_SEARCH_RADIUS_METRES = "100000.0"; private static final double EARTH_PERIMETER = 40075000.0; private static final String DEFAULT_ACCURACY = "0.0"; @Resource StoreFinderFacade storeFinderFacade; @RequestMapping(value = "/v1/{baseSiteId}/stores", method = RequestMethod.GET) @ResponseBody public StoreFinderSearchPageData<PointOfServiceData> locationSearch( @RequestParam(required = false) final String query, final Double latitude, final Double longitude, @RequestParam(required = false, defaultValue = "0") final int currentPage, @RequestParam(required = false, defaultValue = "10") final int pageSize, @RequestParam(required = false, defaultValue = "asc") final String sort, @RequestParam(required = false, defaultValue = "BASIC") final String options, @RequestParam(required = false, defaultValue = DEFAULT_SEARCH_RADIUS_METRES) final double radius, @RequestParam(required = false, defaultValue = DEFAULT_ACCURACY) final double accuracy) { if (radius > EARTH_PERIMETER) { throw new IllegalArgumentException("Radius cannot be greater than Earth's perimeter"); } final double radiusToSearch = getInKilometres(radius, accuracy); final PageableData pageableData = createPagaable(currentPage, pageSize, sort); StoreFinderSearchPageData<PointOfServiceData> result = null; if (StringUtils.isNotBlank(query)) { result = storeFinderFacade.locationSearch(query, pageableData, radiusToSearch); } else if (latitude != null && longitude != null) { final GeoPoint geoPoint = new GeoPoint(); geoPoint.setLatitude(latitude.doubleValue()); geoPoint.setLongitude(longitude.doubleValue()); result = storeFinderFacade.positionSearch(geoPoint, pageableData, radiusToSearch); } else { result = storeFinderFacade.getAllPointOfServices(pageableData); } final List<PointOfServiceData> results = filterOptions(options, result); result.setResults(new ArrayList(results)); return result; } @RequestMapping(value = "/v1/{baseSiteId}/stores/{name}", method = RequestMethod.GET) @ResponseBody public PointOfServiceData locationDetails(@PathVariable final String name) { return storeFinderFacade.getPointOfServiceForName(name); } protected double getInKilometres(final double radius, final double accuracy) { return (radius + accuracy) / 1000.0; } protected List<PointOfServiceData> filterOptions(final String options, final StoreFinderSearchPageData<PointOfServiceData> result) { List<PointOfServiceData> results = null; if (!StringUtils.contains(options, "HOURS")) { results = Lists.transform(result.getResults(), new Function<PointOfServiceData, PointOfServiceData>() { @Override public PointOfServiceData apply(@Nullable final PointOfServiceData input) { input.setOpeningHours(null); input.setUrl(null); return input; } }); } else { results = result.getResults(); } return results; } protected PageableData createPagaable(final int page, final int pageSize, final String sort) { final PageableData pageableData = new PageableData(); pageableData.setCurrentPage(page); pageableData.setPageSize(pageSize); pageableData.setSort(sort); return pageableData; } }