package com.mozu.mozuandroidinstoreassistant.app.search.loaders; import com.mozu.api.MozuApiContext; import com.mozu.api.contracts.commerceruntime.orders.OrderCollection; import com.mozu.api.contracts.customer.CustomerAccountCollection; import com.mozu.api.contracts.productruntime.ProductSearchResult; import com.mozu.api.resources.commerce.OrderResource; import com.mozu.api.resources.commerce.catalog.storefront.ProductSearchResultResource; import com.mozu.api.resources.commerce.customer.CustomerAccountResource; import com.mozu.mozuandroidinstoreassistant.app.models.StringUtils; import rx.Observable; import rx.Subscriber; public class SearchFetcher { private static final String ORDER_ID_FILTER_BY = "orderNumber eq "; private static final int ITEMS_PER_PAGE = 3; private String mQueryString; public static final String PRODUCT_SORT_BY = "productname asc"; public void setQueryString(String queryString){ mQueryString = queryString; } public Observable<OrderCollection> searchOrder( Integer tenantId, Integer siteId) { final OrderResource orderResource = new OrderResource(new MozuApiContext(tenantId, siteId)); return Observable .create(new Observable.OnSubscribe<OrderCollection>() { @Override public void call(Subscriber<? super OrderCollection> subscriber) { try { OrderCollection orderCollection; if (StringUtils.isNumber(mQueryString)) { orderCollection = orderResource.getOrders(0, ITEMS_PER_PAGE, null, ORDER_ID_FILTER_BY + mQueryString, null, null, null); } else { orderCollection = orderResource.getOrders(0, ITEMS_PER_PAGE, null, null, mQueryString, null, null); } subscriber.onNext(orderCollection); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }); } public Observable<ProductSearchResult> searchProduct(Integer tenantId, Integer siteId) { final ProductSearchResultResource productSearchResultResource = new ProductSearchResultResource(new MozuApiContext(tenantId, siteId)); return Observable .create(new Observable.OnSubscribe<ProductSearchResult>() { @Override public void call(Subscriber<? super ProductSearchResult> subscriber) { try { ProductSearchResult result = productSearchResultResource.search(mQueryString, null, null, null, null, null, null, null, null, null, null, null, null, PRODUCT_SORT_BY, ITEMS_PER_PAGE, 0, null, null, null, null, null, null); subscriber.onNext(result); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }); } public Observable<CustomerAccountCollection> searchCustomer(Integer tenantId, Integer siteId) { final CustomerAccountResource customerResource = new CustomerAccountResource(new MozuApiContext(tenantId, siteId)); return Observable .create(new Observable.OnSubscribe<CustomerAccountCollection>() { @Override public void call(Subscriber<? super CustomerAccountCollection> subscriber) { CustomerAccountCollection customerCollection; try { String filter = "firstName sw " + mQueryString + " or lastName sw " + mQueryString + " or emailAddress cont " + mQueryString; customerCollection = customerResource.getAccounts(0, ITEMS_PER_PAGE, null, filter, null, null, null, false, null); subscriber.onNext(customerCollection); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }); } }