/*
 * 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.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.places.v1.model;

/**
 * All the information representing a Place.
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Places API (New). For a detailed explanation see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class GoogleMapsPlacesV1Place extends com.google.api.client.json.GenericJson {

  /**
   * Output only. Repeated components for each locality level.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleMapsPlacesV1PlaceAddressComponent> addressComponents;

  /**
   * Output only. The place's address in adr microformat: http://microformats.org/wiki/adr.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String adrFormatAddress;

  /**
   * Output only. A set of data provider that must be shown with this result.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleMapsPlacesV1PlaceAttribution> attributions;

  /**
   * Output only. The business status for the place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String businessStatus;

  /**
   * Output only. Specifies if the business supports curbside pickup.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean curbsidePickup;

  /**
   * Output only. The hours of operation for the next seven days (including today). The time period
   * starts at midnight on the date of the request and ends at 11:59 pm six days later. This field
   * includes the special_days subfield of all hours, set for dates that have exceptional hours.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleMapsPlacesV1PlaceOpeningHours currentOpeningHours;

  /**
   * Output only. Contains an array of entries for the next seven days including information about
   * secondary hours of a business. Secondary hours are different from a business's main hours. For
   * example, a restaurant can specify drive through hours or delivery hours as its secondary hours.
   * This field populates the type subfield, which draws from a predefined list of opening hours
   * types (such as DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the place. This field
   * includes the special_days subfield of all hours, set for dates that have exceptional hours.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleMapsPlacesV1PlaceOpeningHours> currentSecondaryOpeningHours;

  /**
   * Output only. Specifies if the business supports delivery.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean delivery;

  /**
   * Output only. Specifies if the business supports indoor or outdoor seating options.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean dineIn;

  /**
   * Output only. The localized name of the place, suitable as a short human-readable description.
   * For example, "Google Sydney", "Starbucks", "Pyrmont", etc.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleTypeLocalizedText displayName;

  /**
   * Output only. Contains a summary of the place. A summary is comprised of a textual overview, and
   * also includes the language code for these if applicable. Summary text must be presented as-is
   * and can not be modified or altered.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleTypeLocalizedText editorialSummary;

  /**
   * Output only. A full, human-readable address for this place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String formattedAddress;

  /**
   * Output only. A URL providing more information about this place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String googleMapsUri;

  /**
   * Output only. Background color for icon_mask in hex format, e.g. #909CE1.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String iconBackgroundColor;

  /**
   * Output only. A truncated URL to an v2 icon mask. User can access different icon type by
   * appending type suffix to the end (eg, ".svg" or ".png").
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String iconMaskBaseUri;

  /**
   * Output only. The unique identifier of a place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String id;

  /**
   * Output only. A human-readable phone number for the place, in international format.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String internationalPhoneNumber;

  /**
   * Output only. The position of this place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleTypeLatLng location;

  /**
   * Output only. An ID representing this place which may be used to look up this place again
   * (a.k.a. the API "resource" name: places/).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String name;

  /**
   * Output only. A human-readable phone number for the place, in national format.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String nationalPhoneNumber;

  /**
   * Output only. The regular hours of operation.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleMapsPlacesV1PlaceOpeningHours openingHours;

  /**
   * Output only. Plus code of the place location lat/long.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleMapsPlacesV1PlacePlusCode plusCode;

  /**
   * Output only. Price level of the place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String priceLevel;

  /**
   * Output only. A rating between 1.0 and 5.0, based on user reviews of this place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double rating;

  /**
   * Output only. Specifies if the place supports reservations.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean reservable;

  /**
   * Output only. List of reviews about this place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleMapsPlacesV1Review> reviews;

  /**
   * Output only. Contains an array of entries for information about regular secondary hours of a
   * business. Secondary hours are different from a business's main hours. For example, a restaurant
   * can specify drive through hours or delivery hours as its secondary hours. This field populates
   * the type subfield, which draws from a predefined list of opening hours types (such as
   * DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GoogleMapsPlacesV1PlaceOpeningHours> secondaryOpeningHours;

  /**
   * Output only. Specifies if the place serves beer.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesBeer;

  /**
   * Output only. Specifies if the place serves breakfast.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesBreakfast;

  /**
   * Output only. Specifies if the place serves brunch.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesBrunch;

  /**
   * Output only. Specifies if the place serves dinner.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesDinner;

  /**
   * Output only. Specifies if the place serves lunch.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesLunch;

  /**
   * Output only. Specifies if the place serves vegetarian food.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesVegetarianFood;

  /**
   * Output only. Specifies if the place serves wine.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean servesWine;

  /**
   * Output only. Specifies if the business supports takeout.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean takeout;

  /**
   * Output only. A set of type tags for this result. For example, "political" and "locality".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> types;

  /**
   * Output only. The total number of reviews (with or without text) for this place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer userRatingCount;

  /**
   * Output only. Number of minutes this place's timezone is currently offset from UTC. This is
   * expressed in minutes to support timezones that are offset by fractions of an hour, e.g. X hours
   * and 15 minutes.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer utcOffsetMinutes;

  /**
   * Output only. A viewport suitable for displaying the place on an average-sized map.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleGeoTypeViewport viewport;

  /**
   * Output only. The authoritative website for this place, e.g. a business' homepage. Note that for
   * places that are part of a chain (e.g. an IKEA store), this will usually be the website for the
   * individual store, not the overall chain.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String websiteUri;

  /**
   * Output only. Specifies if the place has an entrance that is wheelchair-accessible.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean wheelchairAccessibleEntrance;

  /**
   * Output only. Repeated components for each locality level.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleMapsPlacesV1PlaceAddressComponent> getAddressComponents() {
    return addressComponents;
  }

  /**
   * Output only. Repeated components for each locality level.
   * @param addressComponents addressComponents or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setAddressComponents(java.util.List<GoogleMapsPlacesV1PlaceAddressComponent> addressComponents) {
    this.addressComponents = addressComponents;
    return this;
  }

  /**
   * Output only. The place's address in adr microformat: http://microformats.org/wiki/adr.
   * @return value or {@code null} for none
   */
  public java.lang.String getAdrFormatAddress() {
    return adrFormatAddress;
  }

  /**
   * Output only. The place's address in adr microformat: http://microformats.org/wiki/adr.
   * @param adrFormatAddress adrFormatAddress or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setAdrFormatAddress(java.lang.String adrFormatAddress) {
    this.adrFormatAddress = adrFormatAddress;
    return this;
  }

  /**
   * Output only. A set of data provider that must be shown with this result.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleMapsPlacesV1PlaceAttribution> getAttributions() {
    return attributions;
  }

  /**
   * Output only. A set of data provider that must be shown with this result.
   * @param attributions attributions or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setAttributions(java.util.List<GoogleMapsPlacesV1PlaceAttribution> attributions) {
    this.attributions = attributions;
    return this;
  }

  /**
   * Output only. The business status for the place.
   * @return value or {@code null} for none
   */
  public java.lang.String getBusinessStatus() {
    return businessStatus;
  }

  /**
   * Output only. The business status for the place.
   * @param businessStatus businessStatus or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setBusinessStatus(java.lang.String businessStatus) {
    this.businessStatus = businessStatus;
    return this;
  }

  /**
   * Output only. Specifies if the business supports curbside pickup.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getCurbsidePickup() {
    return curbsidePickup;
  }

  /**
   * Output only. Specifies if the business supports curbside pickup.
   * @param curbsidePickup curbsidePickup or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setCurbsidePickup(java.lang.Boolean curbsidePickup) {
    this.curbsidePickup = curbsidePickup;
    return this;
  }

  /**
   * Output only. The hours of operation for the next seven days (including today). The time period
   * starts at midnight on the date of the request and ends at 11:59 pm six days later. This field
   * includes the special_days subfield of all hours, set for dates that have exceptional hours.
   * @return value or {@code null} for none
   */
  public GoogleMapsPlacesV1PlaceOpeningHours getCurrentOpeningHours() {
    return currentOpeningHours;
  }

  /**
   * Output only. The hours of operation for the next seven days (including today). The time period
   * starts at midnight on the date of the request and ends at 11:59 pm six days later. This field
   * includes the special_days subfield of all hours, set for dates that have exceptional hours.
   * @param currentOpeningHours currentOpeningHours or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setCurrentOpeningHours(GoogleMapsPlacesV1PlaceOpeningHours currentOpeningHours) {
    this.currentOpeningHours = currentOpeningHours;
    return this;
  }

  /**
   * Output only. Contains an array of entries for the next seven days including information about
   * secondary hours of a business. Secondary hours are different from a business's main hours. For
   * example, a restaurant can specify drive through hours or delivery hours as its secondary hours.
   * This field populates the type subfield, which draws from a predefined list of opening hours
   * types (such as DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the place. This field
   * includes the special_days subfield of all hours, set for dates that have exceptional hours.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleMapsPlacesV1PlaceOpeningHours> getCurrentSecondaryOpeningHours() {
    return currentSecondaryOpeningHours;
  }

  /**
   * Output only. Contains an array of entries for the next seven days including information about
   * secondary hours of a business. Secondary hours are different from a business's main hours. For
   * example, a restaurant can specify drive through hours or delivery hours as its secondary hours.
   * This field populates the type subfield, which draws from a predefined list of opening hours
   * types (such as DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the place. This field
   * includes the special_days subfield of all hours, set for dates that have exceptional hours.
   * @param currentSecondaryOpeningHours currentSecondaryOpeningHours or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setCurrentSecondaryOpeningHours(java.util.List<GoogleMapsPlacesV1PlaceOpeningHours> currentSecondaryOpeningHours) {
    this.currentSecondaryOpeningHours = currentSecondaryOpeningHours;
    return this;
  }

  /**
   * Output only. Specifies if the business supports delivery.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getDelivery() {
    return delivery;
  }

  /**
   * Output only. Specifies if the business supports delivery.
   * @param delivery delivery or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setDelivery(java.lang.Boolean delivery) {
    this.delivery = delivery;
    return this;
  }

  /**
   * Output only. Specifies if the business supports indoor or outdoor seating options.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getDineIn() {
    return dineIn;
  }

  /**
   * Output only. Specifies if the business supports indoor or outdoor seating options.
   * @param dineIn dineIn or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setDineIn(java.lang.Boolean dineIn) {
    this.dineIn = dineIn;
    return this;
  }

  /**
   * Output only. The localized name of the place, suitable as a short human-readable description.
   * For example, "Google Sydney", "Starbucks", "Pyrmont", etc.
   * @return value or {@code null} for none
   */
  public GoogleTypeLocalizedText getDisplayName() {
    return displayName;
  }

  /**
   * Output only. The localized name of the place, suitable as a short human-readable description.
   * For example, "Google Sydney", "Starbucks", "Pyrmont", etc.
   * @param displayName displayName or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setDisplayName(GoogleTypeLocalizedText displayName) {
    this.displayName = displayName;
    return this;
  }

  /**
   * Output only. Contains a summary of the place. A summary is comprised of a textual overview, and
   * also includes the language code for these if applicable. Summary text must be presented as-is
   * and can not be modified or altered.
   * @return value or {@code null} for none
   */
  public GoogleTypeLocalizedText getEditorialSummary() {
    return editorialSummary;
  }

  /**
   * Output only. Contains a summary of the place. A summary is comprised of a textual overview, and
   * also includes the language code for these if applicable. Summary text must be presented as-is
   * and can not be modified or altered.
   * @param editorialSummary editorialSummary or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setEditorialSummary(GoogleTypeLocalizedText editorialSummary) {
    this.editorialSummary = editorialSummary;
    return this;
  }

  /**
   * Output only. A full, human-readable address for this place.
   * @return value or {@code null} for none
   */
  public java.lang.String getFormattedAddress() {
    return formattedAddress;
  }

  /**
   * Output only. A full, human-readable address for this place.
   * @param formattedAddress formattedAddress or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setFormattedAddress(java.lang.String formattedAddress) {
    this.formattedAddress = formattedAddress;
    return this;
  }

  /**
   * Output only. A URL providing more information about this place.
   * @return value or {@code null} for none
   */
  public java.lang.String getGoogleMapsUri() {
    return googleMapsUri;
  }

  /**
   * Output only. A URL providing more information about this place.
   * @param googleMapsUri googleMapsUri or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setGoogleMapsUri(java.lang.String googleMapsUri) {
    this.googleMapsUri = googleMapsUri;
    return this;
  }

  /**
   * Output only. Background color for icon_mask in hex format, e.g. #909CE1.
   * @return value or {@code null} for none
   */
  public java.lang.String getIconBackgroundColor() {
    return iconBackgroundColor;
  }

  /**
   * Output only. Background color for icon_mask in hex format, e.g. #909CE1.
   * @param iconBackgroundColor iconBackgroundColor or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setIconBackgroundColor(java.lang.String iconBackgroundColor) {
    this.iconBackgroundColor = iconBackgroundColor;
    return this;
  }

  /**
   * Output only. A truncated URL to an v2 icon mask. User can access different icon type by
   * appending type suffix to the end (eg, ".svg" or ".png").
   * @return value or {@code null} for none
   */
  public java.lang.String getIconMaskBaseUri() {
    return iconMaskBaseUri;
  }

  /**
   * Output only. A truncated URL to an v2 icon mask. User can access different icon type by
   * appending type suffix to the end (eg, ".svg" or ".png").
   * @param iconMaskBaseUri iconMaskBaseUri or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setIconMaskBaseUri(java.lang.String iconMaskBaseUri) {
    this.iconMaskBaseUri = iconMaskBaseUri;
    return this;
  }

  /**
   * Output only. The unique identifier of a place.
   * @return value or {@code null} for none
   */
  public java.lang.String getId() {
    return id;
  }

  /**
   * Output only. The unique identifier of a place.
   * @param id id or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setId(java.lang.String id) {
    this.id = id;
    return this;
  }

  /**
   * Output only. A human-readable phone number for the place, in international format.
   * @return value or {@code null} for none
   */
  public java.lang.String getInternationalPhoneNumber() {
    return internationalPhoneNumber;
  }

  /**
   * Output only. A human-readable phone number for the place, in international format.
   * @param internationalPhoneNumber internationalPhoneNumber or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setInternationalPhoneNumber(java.lang.String internationalPhoneNumber) {
    this.internationalPhoneNumber = internationalPhoneNumber;
    return this;
  }

  /**
   * Output only. The position of this place.
   * @return value or {@code null} for none
   */
  public GoogleTypeLatLng getLocation() {
    return location;
  }

  /**
   * Output only. The position of this place.
   * @param location location or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setLocation(GoogleTypeLatLng location) {
    this.location = location;
    return this;
  }

  /**
   * Output only. An ID representing this place which may be used to look up this place again
   * (a.k.a. the API "resource" name: places/).
   * @return value or {@code null} for none
   */
  public java.lang.String getName() {
    return name;
  }

  /**
   * Output only. An ID representing this place which may be used to look up this place again
   * (a.k.a. the API "resource" name: places/).
   * @param name name or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setName(java.lang.String name) {
    this.name = name;
    return this;
  }

  /**
   * Output only. A human-readable phone number for the place, in national format.
   * @return value or {@code null} for none
   */
  public java.lang.String getNationalPhoneNumber() {
    return nationalPhoneNumber;
  }

  /**
   * Output only. A human-readable phone number for the place, in national format.
   * @param nationalPhoneNumber nationalPhoneNumber or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setNationalPhoneNumber(java.lang.String nationalPhoneNumber) {
    this.nationalPhoneNumber = nationalPhoneNumber;
    return this;
  }

  /**
   * Output only. The regular hours of operation.
   * @return value or {@code null} for none
   */
  public GoogleMapsPlacesV1PlaceOpeningHours getOpeningHours() {
    return openingHours;
  }

  /**
   * Output only. The regular hours of operation.
   * @param openingHours openingHours or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setOpeningHours(GoogleMapsPlacesV1PlaceOpeningHours openingHours) {
    this.openingHours = openingHours;
    return this;
  }

  /**
   * Output only. Plus code of the place location lat/long.
   * @return value or {@code null} for none
   */
  public GoogleMapsPlacesV1PlacePlusCode getPlusCode() {
    return plusCode;
  }

  /**
   * Output only. Plus code of the place location lat/long.
   * @param plusCode plusCode or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setPlusCode(GoogleMapsPlacesV1PlacePlusCode plusCode) {
    this.plusCode = plusCode;
    return this;
  }

  /**
   * Output only. Price level of the place.
   * @return value or {@code null} for none
   */
  public java.lang.String getPriceLevel() {
    return priceLevel;
  }

  /**
   * Output only. Price level of the place.
   * @param priceLevel priceLevel or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setPriceLevel(java.lang.String priceLevel) {
    this.priceLevel = priceLevel;
    return this;
  }

  /**
   * Output only. A rating between 1.0 and 5.0, based on user reviews of this place.
   * @return value or {@code null} for none
   */
  public java.lang.Double getRating() {
    return rating;
  }

  /**
   * Output only. A rating between 1.0 and 5.0, based on user reviews of this place.
   * @param rating rating or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setRating(java.lang.Double rating) {
    this.rating = rating;
    return this;
  }

  /**
   * Output only. Specifies if the place supports reservations.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getReservable() {
    return reservable;
  }

  /**
   * Output only. Specifies if the place supports reservations.
   * @param reservable reservable or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setReservable(java.lang.Boolean reservable) {
    this.reservable = reservable;
    return this;
  }

  /**
   * Output only. List of reviews about this place.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleMapsPlacesV1Review> getReviews() {
    return reviews;
  }

  /**
   * Output only. List of reviews about this place.
   * @param reviews reviews or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setReviews(java.util.List<GoogleMapsPlacesV1Review> reviews) {
    this.reviews = reviews;
    return this;
  }

  /**
   * Output only. Contains an array of entries for information about regular secondary hours of a
   * business. Secondary hours are different from a business's main hours. For example, a restaurant
   * can specify drive through hours or delivery hours as its secondary hours. This field populates
   * the type subfield, which draws from a predefined list of opening hours types (such as
   * DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the place.
   * @return value or {@code null} for none
   */
  public java.util.List<GoogleMapsPlacesV1PlaceOpeningHours> getSecondaryOpeningHours() {
    return secondaryOpeningHours;
  }

  /**
   * Output only. Contains an array of entries for information about regular secondary hours of a
   * business. Secondary hours are different from a business's main hours. For example, a restaurant
   * can specify drive through hours or delivery hours as its secondary hours. This field populates
   * the type subfield, which draws from a predefined list of opening hours types (such as
   * DRIVE_THROUGH, PICKUP, or TAKEOUT) based on the types of the place.
   * @param secondaryOpeningHours secondaryOpeningHours or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setSecondaryOpeningHours(java.util.List<GoogleMapsPlacesV1PlaceOpeningHours> secondaryOpeningHours) {
    this.secondaryOpeningHours = secondaryOpeningHours;
    return this;
  }

  /**
   * Output only. Specifies if the place serves beer.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesBeer() {
    return servesBeer;
  }

  /**
   * Output only. Specifies if the place serves beer.
   * @param servesBeer servesBeer or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesBeer(java.lang.Boolean servesBeer) {
    this.servesBeer = servesBeer;
    return this;
  }

  /**
   * Output only. Specifies if the place serves breakfast.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesBreakfast() {
    return servesBreakfast;
  }

  /**
   * Output only. Specifies if the place serves breakfast.
   * @param servesBreakfast servesBreakfast or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesBreakfast(java.lang.Boolean servesBreakfast) {
    this.servesBreakfast = servesBreakfast;
    return this;
  }

  /**
   * Output only. Specifies if the place serves brunch.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesBrunch() {
    return servesBrunch;
  }

  /**
   * Output only. Specifies if the place serves brunch.
   * @param servesBrunch servesBrunch or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesBrunch(java.lang.Boolean servesBrunch) {
    this.servesBrunch = servesBrunch;
    return this;
  }

  /**
   * Output only. Specifies if the place serves dinner.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesDinner() {
    return servesDinner;
  }

  /**
   * Output only. Specifies if the place serves dinner.
   * @param servesDinner servesDinner or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesDinner(java.lang.Boolean servesDinner) {
    this.servesDinner = servesDinner;
    return this;
  }

  /**
   * Output only. Specifies if the place serves lunch.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesLunch() {
    return servesLunch;
  }

  /**
   * Output only. Specifies if the place serves lunch.
   * @param servesLunch servesLunch or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesLunch(java.lang.Boolean servesLunch) {
    this.servesLunch = servesLunch;
    return this;
  }

  /**
   * Output only. Specifies if the place serves vegetarian food.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesVegetarianFood() {
    return servesVegetarianFood;
  }

  /**
   * Output only. Specifies if the place serves vegetarian food.
   * @param servesVegetarianFood servesVegetarianFood or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesVegetarianFood(java.lang.Boolean servesVegetarianFood) {
    this.servesVegetarianFood = servesVegetarianFood;
    return this;
  }

  /**
   * Output only. Specifies if the place serves wine.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServesWine() {
    return servesWine;
  }

  /**
   * Output only. Specifies if the place serves wine.
   * @param servesWine servesWine or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setServesWine(java.lang.Boolean servesWine) {
    this.servesWine = servesWine;
    return this;
  }

  /**
   * Output only. Specifies if the business supports takeout.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getTakeout() {
    return takeout;
  }

  /**
   * Output only. Specifies if the business supports takeout.
   * @param takeout takeout or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setTakeout(java.lang.Boolean takeout) {
    this.takeout = takeout;
    return this;
  }

  /**
   * Output only. A set of type tags for this result. For example, "political" and "locality".
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getTypes() {
    return types;
  }

  /**
   * Output only. A set of type tags for this result. For example, "political" and "locality".
   * @param types types or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setTypes(java.util.List<java.lang.String> types) {
    this.types = types;
    return this;
  }

  /**
   * Output only. The total number of reviews (with or without text) for this place.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getUserRatingCount() {
    return userRatingCount;
  }

  /**
   * Output only. The total number of reviews (with or without text) for this place.
   * @param userRatingCount userRatingCount or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setUserRatingCount(java.lang.Integer userRatingCount) {
    this.userRatingCount = userRatingCount;
    return this;
  }

  /**
   * Output only. Number of minutes this place's timezone is currently offset from UTC. This is
   * expressed in minutes to support timezones that are offset by fractions of an hour, e.g. X hours
   * and 15 minutes.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getUtcOffsetMinutes() {
    return utcOffsetMinutes;
  }

  /**
   * Output only. Number of minutes this place's timezone is currently offset from UTC. This is
   * expressed in minutes to support timezones that are offset by fractions of an hour, e.g. X hours
   * and 15 minutes.
   * @param utcOffsetMinutes utcOffsetMinutes or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setUtcOffsetMinutes(java.lang.Integer utcOffsetMinutes) {
    this.utcOffsetMinutes = utcOffsetMinutes;
    return this;
  }

  /**
   * Output only. A viewport suitable for displaying the place on an average-sized map.
   * @return value or {@code null} for none
   */
  public GoogleGeoTypeViewport getViewport() {
    return viewport;
  }

  /**
   * Output only. A viewport suitable for displaying the place on an average-sized map.
   * @param viewport viewport or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setViewport(GoogleGeoTypeViewport viewport) {
    this.viewport = viewport;
    return this;
  }

  /**
   * Output only. The authoritative website for this place, e.g. a business' homepage. Note that for
   * places that are part of a chain (e.g. an IKEA store), this will usually be the website for the
   * individual store, not the overall chain.
   * @return value or {@code null} for none
   */
  public java.lang.String getWebsiteUri() {
    return websiteUri;
  }

  /**
   * Output only. The authoritative website for this place, e.g. a business' homepage. Note that for
   * places that are part of a chain (e.g. an IKEA store), this will usually be the website for the
   * individual store, not the overall chain.
   * @param websiteUri websiteUri or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setWebsiteUri(java.lang.String websiteUri) {
    this.websiteUri = websiteUri;
    return this;
  }

  /**
   * Output only. Specifies if the place has an entrance that is wheelchair-accessible.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getWheelchairAccessibleEntrance() {
    return wheelchairAccessibleEntrance;
  }

  /**
   * Output only. Specifies if the place has an entrance that is wheelchair-accessible.
   * @param wheelchairAccessibleEntrance wheelchairAccessibleEntrance or {@code null} for none
   */
  public GoogleMapsPlacesV1Place setWheelchairAccessibleEntrance(java.lang.Boolean wheelchairAccessibleEntrance) {
    this.wheelchairAccessibleEntrance = wheelchairAccessibleEntrance;
    return this;
  }

  @Override
  public GoogleMapsPlacesV1Place set(String fieldName, Object value) {
    return (GoogleMapsPlacesV1Place) super.set(fieldName, value);
  }

  @Override
  public GoogleMapsPlacesV1Place clone() {
    return (GoogleMapsPlacesV1Place) super.clone();
  }

}
