/// <summary>
    /// Creates a campaign ad extension for running further tests.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="campaignId">The campaign id for which extension is
    /// created.</param>
    /// <returns>The campaign ad extension id.</returns>
    public long CreateLocationExtension(AdWordsUser user, long campaignId) {
      CampaignAdExtensionService campaignExtensionService =
          (CampaignAdExtensionService) user.GetService(AdWordsService.v201406.
               CampaignAdExtensionService);

      CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation();
      operation.@operator = Operator.ADD;

      CampaignAdExtension extension = new CampaignAdExtension();
      extension.campaignId = campaignId;
      extension.status = CampaignAdExtensionStatus.ENABLED;

      Address address = new Address();
      address.streetAddress = "1600 Amphitheatre Pkwy, Mountain View";
      address.countryCode = "US";

      GeoLocation location = GetLocationForAddress(user, address);

      LocationExtension locationExtension = new LocationExtension();

      // Note: Do not populate an address directly. Instead, use
      // GeoLocationService to obtain the location of an address,
      // and use the address as per the location it returns.
      locationExtension.address = location.address;
      locationExtension.geoPoint = location.geoPoint;
      locationExtension.encodedLocation = location.encodedLocation;
      locationExtension.source = LocationExtensionSource.ADWORDS_FRONTEND;

      extension.adExtension = locationExtension;
      operation.operand = extension;
      CampaignAdExtensionReturnValue retVal =
          campaignExtensionService.mutate(new CampaignAdExtensionOperation[] {operation});
      return retVal.value[0].adExtension.id;
    }
    /// <summary>
    /// Runs the code example.
    /// </summary>
    /// <param name="user">The AdWords user.</param>
    /// <param name="campaignId">Id of the campaign to which location
    /// extensions are added.</param>
    public void Run(AdWordsUser user, long campaignId) {
      // Get the CampaignAdExtensionService.
      CampaignAdExtensionService campaignExtensionService =
          (CampaignAdExtensionService) user.GetService(AdWordsService.v201406.
          CampaignAdExtensionService);

      // Add location 1: 1600 Amphitheatre Pkwy, Mountain View, US.
      Address address1 = new Address();
      address1.streetAddress = "1600 Amphitheatre Parkway";
      address1.cityName = "Mountain View";
      address1.provinceCode = "CA";
      address1.postalCode = "94043";
      address1.countryCode = "US";

      // Add location 2: 38 avenue de l'Opéra, 75002 Paris, FR.
      Address address2 = new Address();
      address2.streetAddress = "38 avenue de l'Opéra";
      address2.cityName = "Paris";
      address2.postalCode = "75002";
      address2.countryCode = "FR";

      // Get the GeoLocationService.
      GeoLocationService geoService =
          (GeoLocationService) user.GetService(AdWordsService.v201406.GeoLocationService);

      // Create the selector.
      GeoLocationSelector selector = new GeoLocationSelector();
      selector.addresses = new Address[] {address1, address2};

      // Retrieve the locations.
      GeoLocation[] locations = geoService.get(selector);

      List<CampaignAdExtensionOperation> operations = new List<CampaignAdExtensionOperation>();

      // Phone numbers for US and FR offices.
      string[] phoneNumbers = new string[] {"(650) 253-0000", "(0)1 42 68 53 00"};
      int index = 0;

      // Create a location extension for each geo location returned by the
      // server.
      foreach (GeoLocation location in locations) {
        LocationExtension locationExtension = new LocationExtension();
        locationExtension.address = location.address;
        locationExtension.geoPoint = location.geoPoint;
        locationExtension.encodedLocation = location.encodedLocation;
        locationExtension.source = LocationExtensionSource.ADWORDS_FRONTEND;

        // Optional: Set the company name.
        locationExtension.companyName = "ACME Inc.";

        // Optional: Set the phone number.
        locationExtension.phoneNumber = phoneNumbers[index];
        index++;

        CampaignAdExtension extension = new CampaignAdExtension();
        extension.campaignId = campaignId;
        extension.status = CampaignAdExtensionStatus.ENABLED;
        extension.adExtension = locationExtension;

        CampaignAdExtensionOperation operation = new CampaignAdExtensionOperation();
        operation.@operator = Operator.ADD;
        operation.operand = extension;

        operations.Add(operation);
      }

      try {
        CampaignAdExtensionReturnValue retVal =
            campaignExtensionService.mutate(operations.ToArray());

        // Display the results.
        if (retVal != null && retVal.value != null && retVal.value.Length > 0) {
          foreach (CampaignAdExtension campaignExtension in retVal.value) {
            Console.WriteLine("Created a location extension with id = \"{0}\" and " +
                "status = \"{1}\"", campaignExtension.adExtension.id, campaignExtension.status);
          }
        } else {
          Console.WriteLine("No location extensions were created.");
        }
      } catch (Exception ex) {
        throw new System.ApplicationException("Failed to add location extension.", ex);
      }
    }