package org.multibit.mbm.client.handlers.item; import com.google.common.collect.Lists; import com.theoryinpractise.halbuilder.spi.Link; import com.theoryinpractise.halbuilder.spi.ReadableResource; import com.theoryinpractise.halbuilder.spi.Resource; import org.multibit.mbm.client.HalHmacResourceFactory; import org.multibit.mbm.client.handlers.BaseHandler; import org.multibit.mbm.model.ClientItem; import java.util.List; import java.util.Locale; /** * <p>Handler to provide the following to {@link org.multibit.mbm.client.PublicMerchantClient}:</p> * <ul> * <li>Construction of public item collection requests</li> * </ul> * * @since 0.0.1 *   */ public class ClientItemCollectionHandler extends BaseHandler { /** * @param locale The locale providing i18n information */ public ClientItemCollectionHandler(Locale locale) { super(locale); } /** * Retrieve promotional items by page * * @param pageNumber The page number (e.g. 0 (first), 1, 2 etc) * @param pageSize The number of results per page * * @return A list of {@link org.multibit.mbm.model.ClientItem} */ public List<ClientItem> retrievePromotionalItemsByPage(int pageNumber, int pageSize) { // Sanity check // TODO Consider Guava ranges? if (pageNumber < 0) { pageNumber = 0; } if (pageSize < 0) { pageSize = 0; } if (pageSize > 50) { pageSize = 50; } // TODO Replace "magic string" with auto-discover based on link rel String path = String.format("/items/promotion?pn=%d&ps=%d", pageNumber, pageSize); String hal = HalHmacResourceFactory.INSTANCE .newClientResource(locale, path) .get(String.class); // Read the HAL ReadableResource rr = unmarshalHal(hal); // Extract the list of items List<ClientItem> clientItems = Lists.newArrayList(); for (Resource itemResource : rr.getResources()) { List<Link> links = itemResource.getLinks(); ClientItem clientItem = ClientItemHandler.buildClientItem(itemResource.getProperties(), links); clientItems.add(clientItem); } return clientItems; } }