v201208.lineitemservice.TargetCustomCriteriaExample.java Source code

Java tutorial

Introduction

Here is the source code for v201208.lineitemservice.TargetCustomCriteriaExample.java

Source

// Copyright 2012 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 v201208.lineitemservice;

import com.google.api.ads.dfp.lib.DfpService;
import com.google.api.ads.dfp.lib.DfpServiceLogger;
import com.google.api.ads.dfp.lib.DfpUser;
import com.google.api.ads.dfp.v201208.CustomCriteria;
import com.google.api.ads.dfp.v201208.CustomCriteriaComparisonOperator;
import com.google.api.ads.dfp.v201208.CustomCriteriaNode;
import com.google.api.ads.dfp.v201208.CustomCriteriaSet;
import com.google.api.ads.dfp.v201208.CustomCriteriaSetLogicalOperator;
import com.google.api.ads.dfp.v201208.CustomTargetingServiceInterface;
import com.google.api.ads.dfp.v201208.LineItem;
import com.google.api.ads.dfp.v201208.LineItemServiceInterface;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

/**
 * This example updates a line item to add custom criteria targeting. To
 * determine which line items exist, run GetAllLineItemsExample.java. To
 * determine which custom targeting keys and values exist, run
 * GetAllCustomTargetingKeysAndValuesExample.java.
 *
 * Tags: LineItemService.getLineItem, LineItemService.updateLineItem
 *
 * @author api.arogal@gmail.com (Adam Rogal)
 */
public class TargetCustomCriteriaExample {
    public static void main(String[] args) {
        try {
            // Log SOAP XML request and response.
            DfpServiceLogger.log();

            // Get DfpUser from "~/dfp.properties".
            DfpUser user = new DfpUser();

            // Get the LineItemService.
            LineItemServiceInterface lineItemService = user.getService(DfpService.V201208.LINEITEM_SERVICE);

            // Get the CustomTargetingService.
            CustomTargetingServiceInterface customTargetingService = user
                    .getService(DfpService.V201208.CUSTOM_TARGETING_SERVICE);

            Long lineItemId = Long.parseLong("INSERT_LINE_ITEM_ID_HERE");
            Long[] customCriteriaIds1 = new Long[] { Long.parseLong("INSERT_CUSTOM_TARGETING_KEY_ID_HERE"),
                    Long.parseLong("INSERT_CUSTOM_TARGETING_VALUE_ID_HERE") };
            Long[] customCriteriaIds2 = new Long[] { Long.parseLong("INSERT_CUSTOM_TARGETING_KEY_ID_HERE"),
                    Long.parseLong("INSERT_CUSTOM_TARGETING_VALUE_ID_HERE") };
            Long[] customCriteriaIds3 = new Long[] { Long.parseLong("INSERT_CUSTOM_TARGETING_KEY_ID_HERE"),
                    Long.parseLong("INSERT_CUSTOM_TARGETING_VALUE_ID_HERE") };

            // Create custom criteria.
            CustomCriteria customCriteria1 = new CustomCriteria();
            customCriteria1.setKeyId(customCriteriaIds1[0]);
            customCriteria1.setValueIds(new long[] { customCriteriaIds1[1] });
            customCriteria1.setOperator(CustomCriteriaComparisonOperator.IS);

            CustomCriteria customCriteria2 = new CustomCriteria();
            customCriteria2.setKeyId(customCriteriaIds2[0]);
            customCriteria2.setValueIds(new long[] { customCriteriaIds2[1] });
            customCriteria2.setOperator(CustomCriteriaComparisonOperator.IS_NOT);

            CustomCriteria customCriteria3 = new CustomCriteria();
            customCriteria3.setKeyId(customCriteriaIds3[0]);
            customCriteria3.setValueIds(new long[] { customCriteriaIds3[1] });
            customCriteria3.setOperator(CustomCriteriaComparisonOperator.IS);

            // Create the custom criteria set that will resemble:
            //
            // (customCriteria1.key == customCriteria1.value OR
            //     (customCriteria2.key != customCriteria2.value AND
            //         customCriteria3.key == customCriteria3.value))
            CustomCriteriaSet topCustomCriteriaSet = new CustomCriteriaSet();
            topCustomCriteriaSet.setLogicalOperator(CustomCriteriaSetLogicalOperator.OR);

            CustomCriteriaSet subCustomCriteriaSet = new CustomCriteriaSet();
            subCustomCriteriaSet.setLogicalOperator(CustomCriteriaSetLogicalOperator.AND);
            subCustomCriteriaSet.setChildren(new CustomCriteriaNode[] { customCriteria2, customCriteria3 });
            topCustomCriteriaSet.setChildren(new CustomCriteriaNode[] { customCriteria1, subCustomCriteriaSet });

            // Set the custom criteria targeting on the line item.
            LineItem lineItem = lineItemService.getLineItem(lineItemId);
            lineItem.getTargeting().setCustomTargeting(topCustomCriteriaSet);

            // Update the line items on the server.
            lineItem = lineItemService.updateLineItem(lineItem);

            // Display the updated line item.
            System.out.printf("Line item with ID %s update with custom criteria targeting \n%s\n", lineItem.getId(),
                    getCustomCriteriaSetString(lineItem.getTargeting().getCustomTargeting(), 0));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Gets a string representation of the custom criteria node. If it has
     * children, each child will be appended to the string recursively.
     *
     * @param root the root custom criteria node
     * @param level the level of the custom criteria tree
     * @return a string representation of the custom criteria node and its
     *     children
     */
    private static String getCustomCriteriaSetString(CustomCriteriaNode root, int level) {
        StringBuilder sb = new StringBuilder();
        sb.append(StringUtils.repeat("\t", level));
        if (root instanceof CustomCriteria) {
            CustomCriteria customCriteria = (CustomCriteria) root;
            sb.append(String.format("Custom criteria: operator: [%s] key: [%s] values: [%s]\n",
                    customCriteria.getOperator(), customCriteria.getKeyId(),
                    StringUtils.join(ArrayUtils.toObject(customCriteria.getValueIds()), ",")));
            return sb.toString();
        } else if (root instanceof CustomCriteriaSet) {
            CustomCriteriaSet customCriteriaSet = (CustomCriteriaSet) root;
            sb.append(String.format("Custom criteria set: operator: [%s] children: \n",
                    customCriteriaSet.getLogicalOperator()));
            for (CustomCriteriaNode node : customCriteriaSet.getChildren()) {
                sb.append(getCustomCriteriaSetString(node, level + 1));
            }
            return sb.append("\n").toString();
        } else {
            throw new IllegalStateException("Unexpected node: " + root);
        }
    }
}