001 002package com.commercetools.api.client; 003 004import java.util.Collection; 005import java.util.List; 006import java.util.Map; 007import java.util.function.Function; 008 009import com.commercetools.api.predicates.query.QueryPredicate; 010 011import io.vrap.rmf.base.client.ApiMethod; 012import io.vrap.rmf.base.client.ClientRequestCommand; 013import io.vrap.rmf.base.client.RequestCommand; 014 015/** 016 * Interface with common methods for query endpoints 017 * @param <T> the type of the underlying request 018 * @param <TResult> the type of the underlying result model, like category or product. 019 */ 020public interface PagedQueryResourceRequest<T extends PagedQueryResourceRequest<T, TResult, TQuery>, TResult, TQuery> 021 extends RequestCommand<TResult>, ClientRequestCommand<TResult>, 022 com.commercetools.api.models.PagedQueryResourceRequest<T, TResult> { 023 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withLimit(final TValue limit); 024 025 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addLimit(final TValue limit); 026 027 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withOffset(final TValue offset); 028 029 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addOffset(final TValue offset); 030 031 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withSort(final TValue sort); 032 033 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addSort(final TValue sort); 034 035 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withWhere(final TValue where); 036 037 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addWhere(final TValue where); 038 039 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withExpand(final TValue expand); 040 041 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addExpand(final TValue expand); 042 043 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withWithTotal(final TValue withTotal); 044 045 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addWithTotal(final TValue withTotal); 046 047 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withPredicateVar(final String varName, 048 final TValue predicateVar); 049 050 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addPredicateVar(final String varName, 051 final TValue predicateVar); 052 053 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> withPredicateVar(final String varName, 054 final Collection<TValue> predicateVar); 055 056 <TValue> PagedQueryResourceRequest<T, TResult, TQuery> addPredicateVar(final String varName, 057 final Collection<TValue> predicateVar); 058 059 List<ApiMethod.ParamEntry<String, String>> getQueryParams(); 060 061 List<String> getQueryParam(final String key); 062 063 String getFirstQueryParam(final String key); 064 065 default PagedQueryResourceRequest<T, TResult, TQuery> asPagedQueryResourceRequest() { 066 return this; 067 } 068 069 TQuery queryDsl(); 070 071 @SuppressWarnings("unchecked") 072 default T withQuery(Function<TQuery, QueryPredicate> fn) { 073 return (T) withWhere(fn.apply(queryDsl()).render()); 074 } 075 076 @SuppressWarnings("unchecked") 077 default T addQuery(Function<TQuery, QueryPredicate> fn) { 078 return (T) addWhere(fn.apply(queryDsl()).render()); 079 } 080 081 @SuppressWarnings("unchecked") 082 default T withQuery(Function<TQuery, QueryPredicate> fn, final String predicateVar, 083 final String predicateVarValue) { 084 return (T) withWhere(fn.apply(queryDsl()).render()).withPredicateVar(predicateVar, predicateVarValue); 085 } 086 087 @SuppressWarnings("unchecked") 088 default T addQuery(Function<TQuery, QueryPredicate> fn, final String predicateVar, final String predicateVarValue) { 089 return (T) addWhere(fn.apply(queryDsl()).render()).withPredicateVar(predicateVar, predicateVarValue); 090 } 091 092 @SuppressWarnings("unchecked") 093 default T withQuery(Function<TQuery, QueryPredicate> fn, final Map<String, Collection<String>> predicateVar) { 094 PagedQueryResourceRequest<T, TResult, TQuery> request = withWhere(fn.apply(queryDsl()).render()); 095 predicateVar.forEach(request::withPredicateVar); 096 return (T) request; 097 } 098 099 @SuppressWarnings("unchecked") 100 default T addQuery(Function<TQuery, QueryPredicate> fn, final Map<String, Collection<String>> predicateVar) { 101 PagedQueryResourceRequest<T, TResult, TQuery> request = addWhere(fn.apply(queryDsl()).render()); 102 predicateVar.forEach(request::withPredicateVar); 103 return (T) request; 104 } 105 106 @SuppressWarnings("unchecked") 107 default T withQuery(Function<TQuery, QueryPredicate> fn, Collection<Map.Entry<String, String>> predicateVar) { 108 PagedQueryResourceRequest<T, TResult, TQuery> request = withWhere(fn.apply(queryDsl()).render()); 109 predicateVar.forEach(pair -> request.withPredicateVar(pair.getKey(), pair.getValue())); 110 return (T) request; 111 } 112 113 @SuppressWarnings("unchecked") 114 default T addQuery(Function<TQuery, QueryPredicate> fn, Collection<Map.Entry<String, String>> predicateVar) { 115 PagedQueryResourceRequest<T, TResult, TQuery> request = addWhere(fn.apply(queryDsl()).render()); 116 predicateVar.forEach(pair -> request.withPredicateVar(pair.getKey(), pair.getValue())); 117 return (T) request; 118 } 119 120 @SuppressWarnings("unchecked") 121 default T withWhere(final String where, final String predicateVar, final String predicateVarValue) { 122 return (T) withWhere(where).withPredicateVar(predicateVar, predicateVarValue); 123 } 124 125 @SuppressWarnings("unchecked") 126 default T addWhere(final String where, final String predicateVar, final String predicateVarValue) { 127 return (T) addWhere(where).withPredicateVar(predicateVar, predicateVarValue); 128 } 129 130 @SuppressWarnings("unchecked") 131 default T withWhere(final String where, final Map<String, Collection<String>> predicateVar) { 132 PagedQueryResourceRequest<T, TResult, TQuery> request = withWhere(where); 133 predicateVar.forEach(request::withPredicateVar); 134 return (T) request; 135 } 136 137 @SuppressWarnings("unchecked") 138 default T addWhere(final String where, final Map<String, Collection<String>> predicateVar) { 139 PagedQueryResourceRequest<T, TResult, TQuery> request = addWhere(where); 140 predicateVar.forEach(request::withPredicateVar); 141 return (T) request; 142 } 143 144 @SuppressWarnings("unchecked") 145 default T withWhere(final String where, final Collection<Map.Entry<String, String>> predicateVar) { 146 PagedQueryResourceRequest<T, TResult, TQuery> request = withWhere(where); 147 predicateVar.forEach(pair -> request.withPredicateVar(pair.getKey(), pair.getValue())); 148 return (T) request; 149 } 150 151 @SuppressWarnings("unchecked") 152 default T addWhere(final String where, final Collection<Map.Entry<String, String>> predicateVar) { 153 PagedQueryResourceRequest<T, TResult, TQuery> request = addWhere(where); 154 predicateVar.forEach(pair -> request.withPredicateVar(pair.getKey(), pair.getValue())); 155 return (T) request; 156 } 157 158 @SuppressWarnings("unchecked") 159 default T asPagedQueryResourceRequestToBaseType() { 160 return (T) this; 161 } 162}