package com.microsoft.bingads.v10.bulk.entities; import com.microsoft.bingads.internal.functionalinterfaces.BiConsumer; import com.microsoft.bingads.internal.functionalinterfaces.Consumer; import com.microsoft.bingads.internal.functionalinterfaces.Function; import com.microsoft.bingads.internal.functionalinterfaces.Supplier; import com.microsoft.bingads.v10.campaignmanagement.ArrayOfRadiusTargetBid; import com.microsoft.bingads.v10.campaignmanagement.IntentOption; import com.microsoft.bingads.v10.campaignmanagement.LocationTarget; import com.microsoft.bingads.v10.campaignmanagement.RadiusTarget; import com.microsoft.bingads.v10.campaignmanagement.RadiusTargetBid; import java.util.ArrayList; import java.util.List; /** * This abstract base class provides properties that are shared by all bulk radius target classes. * * @param <TBid> see {@link BulkRadiusTargetBid} */ abstract class BulkRadiusTarget<TBid extends BulkRadiusTargetBid> extends BulkTargetWithLocation<TBid> { public BulkRadiusTarget(Class<TBid> classOfTBid) { super(classOfTBid); } @Override void reconstructSubTargets() { reconstructApiBids(getBids(), new Function<TBid, RadiusTargetBid>() { @Override public RadiusTargetBid apply(TBid t) { return t.getRadiusTargetBid(); } }, new Supplier<RadiusTarget>() { @Override public RadiusTarget get() { return getLocation().getRadiusTarget(); } }, new Supplier<RadiusTarget>() { @Override public RadiusTarget get() { return new RadiusTarget(); } }, new Consumer<RadiusTarget>() { @Override public void accept(RadiusTarget t) { getLocation().setRadiusTarget(t); } }, new Supplier<List<RadiusTargetBid>>() { @Override public List<RadiusTargetBid> get() { return getLocation().getRadiusTarget().getBids().getRadiusTargetBids(); } }, new Consumer<List<RadiusTargetBid>>() { @Override public void accept(List<RadiusTargetBid> t) { getLocation().getRadiusTarget().setBids(new ArrayOfRadiusTargetBid()); getLocation().getRadiusTarget().getBids().getRadiusTargetBids().addAll(t); } }); if (!getBids().isEmpty()) { getLocation().setIntentOption(getBids().get(0).getIntentOption()); } } @Override List<TBid> convertApiToBulkBids() { List<TBid> bulkBids = new ArrayList<TBid>(); convertBidsFromApi(bulkBids, new Supplier<RadiusTarget>() { @Override public RadiusTarget get() { return getLocation().getRadiusTarget(); } }, new Function<RadiusTarget, List<RadiusTargetBid>>() { @Override public List<RadiusTargetBid> apply(RadiusTarget t) { return t.getBids().getRadiusTargetBids(); } }, new BiConsumer<TBid, RadiusTargetBid>() { @Override public void accept(TBid t, RadiusTargetBid u) { t.setRadiusTargetBid(u); } }, new Function<RadiusTargetBid, Boolean>() { @Override public Boolean apply(RadiusTargetBid t) { return true; } }); for (TBid bid : bulkBids) { bid.setIntentOption(getLocation().getIntentOption()); } return bulkBids; } @Override void validatePropertiesNotNull() { validatePropertyNotNull(getRadiusTarget(), "RadiusTarget"); } @Override void validateBidsNotNullOrEmpty() { if (getRadiusTarget() != null) { validateListNotNullOrEmpty(getRadiusTarget().getBids(), getRadiusTarget().getBids().getRadiusTargetBids(), "RadiusTarget.Bids"); } } /** * Gets a list of geographical radius targets with bid adjustments. */ public RadiusTarget getRadiusTarget() { return getLocationProperty(new Function<LocationTarget, RadiusTarget>() { @Override public RadiusTarget apply(LocationTarget t) { return t.getRadiusTarget(); } }); } /** * Sets a list of geographical radius targets with bid adjustments. */ public void setRadiusTarget(final RadiusTarget radiusTarget) { setLocationProperty(new Consumer<LocationTarget>() { @Override public void accept(LocationTarget t) { t.setRadiusTarget(radiusTarget); } }); } /** * Gets the possible intent options for location targeting. */ public IntentOption getIntentOption() { return getLocationProperty(new Function<LocationTarget, IntentOption>() { @Override public IntentOption apply(LocationTarget t) { return t.getIntentOption(); } }); } /** * Sets the possible intent options for location targeting. */ public void setIntentOption(final IntentOption intentOption) { setLocationProperty(new Consumer<LocationTarget>() { @Override public void accept(LocationTarget t) { t.setIntentOption(intentOption); } }); } }