private static void setLineItemsCostValues(
      LineItem dfpLineItem, String currency, String costType) {
    final LineItemDiscountType discountType =
        new LineItemDiscountType[] {
              LineItemDiscountType.PERCENTAGE, LineItemDiscountType.ABSOLUTE_VALUE
            }
            [random.nextInt(1)];

    final Double discount = (double) (random.nextInt(5) + 1);
    final Long rate;
    final Long goal;
    final LineItemType lineItemType;
    final CostType lineItemCostType;
    final UnitType unityType;
    final Integer priority;
    final LineItemSummaryDuration duration;

    if ("CPC".equals(costType)) {
      goal = Math.min(100, (long) (random.nextInt(1001)));
      rate = Math.min(10, (long) (random.nextInt(101)));
      lineItemType = LineItemType.STANDARD;
      lineItemCostType = CostType.CPC;
      unityType = UnitType.CLICKS;
      priority = 8;
      duration = LineItemSummaryDuration.LIFETIME;
    } else if ("CPM".equals(costType)) {
      goal = Math.min(1000, (long) (random.nextInt(10001)));
      rate = Math.min(100, (long) (random.nextInt(1001)));
      lineItemType = LineItemType.STANDARD;
      lineItemCostType = CostType.CPM;
      unityType = UnitType.IMPRESSIONS;
      priority = 8;
      duration = LineItemSummaryDuration.LIFETIME;
    } else {
      goal = 100L;
      rate = Math.min(1000, (long) (random.nextInt(10001)));
      lineItemType = LineItemType.SPONSORSHIP;
      lineItemCostType = CostType.CPD;
      unityType = UnitType.IMPRESSIONS;
      priority = 4;
      duration = LineItemSummaryDuration.DAILY;
    }

    dfpLineItem.setLineItemType(lineItemType);
    dfpLineItem.setPriority(priority);
    dfpLineItem.setCostType(lineItemCostType);
    dfpLineItem.setUnitType(unityType);
    dfpLineItem.setCostPerUnit(new Money(currency, rate * 1000000));
    dfpLineItem.setUnitsBought(goal);
    dfpLineItem.setDiscountType(discountType);
    dfpLineItem.setDiscount(discount);
    dfpLineItem.setDuration(duration);
  }
  public static void updateDiscountPartialValue(
      LineItemDomain item, OrderDomain order, Double absoluteDiscountValue) throws Exception {
    final LineItemServiceInterface itemService =
        dfpServiceFactory.newDfpService(LineItemServiceInterface.class);

    LineItem dfpItem = itemService.getLineItem(item.getId());
    LineItemDiscountType absoluteDiscount = LineItemDiscountType.ABSOLUTE_VALUE;

    dfpItem.setDiscountType(absoluteDiscount);
    dfpItem.setDiscount(absoluteDiscountValue);
    dfpItem = itemService.updateLineItem(dfpItem);

    setLineItemDomainCostValues(dfpItem, item, order);
  }
  public static void updateDiscountType(LineItemDomain item, OrderDomain order, String discountType)
      throws Exception {
    final LineItemServiceInterface itemService =
        dfpServiceFactory.newDfpService(LineItemServiceInterface.class);

    LineItem dfpItem = itemService.getLineItem(item.getId());
    dfpItem.setDiscountType(LineItemDiscountType.fromString(discountType));
    if (Objects.equals(dfpItem.getDiscountType(), LineItemDiscountType.ABSOLUTE_VALUE)
        && dfpItem.getDiscount() > item.getRate()) {
      dfpItem.setDiscount(Math.max(0, dfpItem.getDiscount() - item.getRate() - 1));
    }
    dfpItem = itemService.updateLineItem(dfpItem);

    setLineItemDomainCostValues(dfpItem, item, order);
  }