// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.api.ads.adwords.axis.utils.v201702;
import com.google.api.ads.adwords.axis.v201702.cm.Selector;
import com.google.api.ads.adwords.lib.selectorfields.EntityField;
import com.google.api.ads.adwords.lib.utils.AdWordsInternals;
import com.google.api.ads.adwords.lib.utils.SelectorBuilderInterface;
import com.google.api.ads.common.lib.utils.AdsUtilityInvocationHandler;
import com.google.common.reflect.Reflection;
import java.lang.reflect.InvocationHandler;
import org.joda.time.DateTime;
/**
* A builder for {@link Selector} objects.
*
* This builder is not thread safe.
*/
public class SelectorBuilder implements SelectorBuilderInterface<Selector> {
private final SelectorBuilderInterface<Selector> impl;
@SuppressWarnings("unchecked")
public SelectorBuilder() {
InvocationHandler invocationHandler =
new AdsUtilityInvocationHandler(
new SelectorBuilderImpl(), AdWordsInternals.getInstance().getAdsUtilityRegistry());
this.impl = Reflection.newProxy(SelectorBuilderInterface.class, invocationHandler);
}
@Override
public Selector build() {
return impl.build();
}
@Override
public SelectorBuilder fields(String... fields) {
impl.fields(fields);
return this;
}
@Override
public SelectorBuilder fields(EntityField... fields) {
impl.fields(fields);
return this;
}
@Override
public SelectorBuilder increaseOffsetBy(int additionalOffset) {
impl.increaseOffsetBy(additionalOffset);
return this;
}
@Override
public SelectorBuilder limit(int limit) {
impl.limit(limit);
return this;
}
@Override
public SelectorBuilder offset(int offset) {
impl.offset(offset);
return this;
}
@Override
public SelectorBuilder removeLimitAndOffset() {
impl.removeLimitAndOffset();
return this;
}
@Override
public SelectorBuilder orderAscBy(String field) {
impl.orderAscBy(field);
return this;
}
@Override
public SelectorBuilder orderAscBy(EntityField field) {
impl.orderAscBy(field);
return this;
}
@Override
public SelectorBuilder orderDescBy(String field) {
impl.orderDescBy(field);
return this;
}
@Override
public SelectorBuilder orderDescBy(EntityField field) {
impl.orderDescBy(field);
return this;
}
@Override
public SelectorBuilder removeOrderBy(String field) {
impl.removeOrderBy(field);
return this;
}
@Override
public SelectorBuilder removeOrderBy(EntityField field) {
impl.removeOrderBy(field);
return this;
}
@Override
public SelectorBuilder forDateRange(DateTime start, DateTime end) {
impl.forDateRange(start, end);
return this;
}
@Override
public SelectorBuilder equals(String field, String propertyValue) {
impl.equals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder equals(EntityField field, String propertyValue) {
impl.equals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder notEquals(String field, String propertyValue) {
impl.notEquals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder notEquals(EntityField field, String propertyValue) {
impl.notEquals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder contains(String field, String propertyValue) {
impl.contains(field, propertyValue);
return this;
}
@Override
public SelectorBuilder contains(EntityField field, String propertyValue) {
impl.contains(field, propertyValue);
return this;
}
@Override
public SelectorBuilder containsIgnoreCase(String field, String propertyValue) {
impl.containsIgnoreCase(field, propertyValue);
return this;
}
@Override
public SelectorBuilder containsIgnoreCase(EntityField field, String propertyValue) {
impl.containsIgnoreCase(field, propertyValue);
return this;
}
@Override
public SelectorBuilder doesNotContain(String field, String propertyValue) {
impl.doesNotContain(field, propertyValue);
return this;
}
@Override
public SelectorBuilder doesNotContain(EntityField field, String propertyValue) {
impl.doesNotContain(field, propertyValue);
return this;
}
@Override
public SelectorBuilder doesNotContainIgnoreCase(String field, String propertyValue) {
impl.doesNotContainIgnoreCase(field, propertyValue);
return this;
}
@Override
public SelectorBuilder doesNotContainIgnoreCase(EntityField field, String propertyValue) {
impl.doesNotContainIgnoreCase(field, propertyValue);
return this;
}
@Override
public SelectorBuilder greaterThan(String field, long propertyValue) {
impl.greaterThan(field, propertyValue);
return this;
}
@Override
public SelectorBuilder greaterThan(EntityField field, long propertyValue) {
impl.greaterThan(field, propertyValue);
return this;
}
@Override
public SelectorBuilder greaterThanEquals(String field, long propertyValue) {
impl.greaterThanEquals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder greaterThanEquals(EntityField field, long propertyValue) {
impl.greaterThanEquals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder lessThan(String field, long propertyValue) {
impl.lessThan(field, propertyValue);
return this;
}
@Override
public SelectorBuilder lessThan(EntityField field, long propertyValue) {
impl.lessThan(field, propertyValue);
return this;
}
@Override
public SelectorBuilder lessThanEquals(String field, long propertyValue) {
impl.lessThanEquals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder lessThanEquals(EntityField field, long propertyValue) {
impl.lessThanEquals(field, propertyValue);
return this;
}
@Override
public SelectorBuilder equalsId(Long id) {
impl.equalsId(id);
return this;
}
@Override
public SelectorBuilder in(String field, String... values) {
impl.in(field, values);
return this;
}
@Override
public SelectorBuilder in(EntityField field, String... values) {
impl.in(field, values);
return this;
}
@Override
public SelectorBuilder notIn(String field, String... values) {
impl.notIn(field, values);
return this;
}
@Override
public SelectorBuilder notIn(EntityField field, String... values) {
impl.notIn(field, values);
return this;
}
@Override
public SelectorBuilder containsAny(String field, String... values) {
impl.containsAny(field, values);
return this;
}
@Override
public SelectorBuilder containsAny(EntityField field, String... values) {
impl.containsAny(field, values);
return this;
}
@Override
public SelectorBuilder containsAll(String field, String... values) {
impl.containsAll(field, values);
return this;
}
@Override
public SelectorBuilder containsAll(EntityField field, String... values) {
impl.containsAll(field, values);
return this;
}
@Override
public SelectorBuilder containsNone(String field, String... values) {
impl.containsNone(field, values);
return this;
}
@Override
public SelectorBuilder containsNone(EntityField field, String... values) {
impl.containsNone(field, values);
return this;
}
}