/*
 * 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.directory.model;

/**
 * JSON template for a location entry.
 *
 * <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 Admin Directory API. 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 UserLocation extends com.google.api.client.json.GenericJson {

  /**
   * Textual location. This is most useful for display purposes to concisely describe the location.
   * For example, "Mountain View, CA", "Near Seattle", "US-NYC-9TH 9A209A".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String area;

  /**
   * Building Identifier.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String buildingId;

  /**
   * Custom Type.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String customType;

  /**
   * Most specific textual code of individual desk location.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deskCode;

  /**
   * Floor name/number.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String floorName;

  /**
   * Floor section. More specific location within the floor. For example, if a floor is divided into
   * sections "A", "B", and "C", this field would identify one of those values.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String floorSection;

  /**
   * Each entry can have a type which indicates standard types of that entry. For example location
   * could be of types default and desk. In addition to standard type, an entry can have a custom
   * type and can give it any name. Such types should have "custom" as type and also have a
   * customType value.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String type;

  /**
   * Textual location. This is most useful for display purposes to concisely describe the location.
   * For example, "Mountain View, CA", "Near Seattle", "US-NYC-9TH 9A209A".
   * @return value or {@code null} for none
   */
  public java.lang.String getArea() {
    return area;
  }

  /**
   * Textual location. This is most useful for display purposes to concisely describe the location.
   * For example, "Mountain View, CA", "Near Seattle", "US-NYC-9TH 9A209A".
   * @param area area or {@code null} for none
   */
  public UserLocation setArea(java.lang.String area) {
    this.area = area;
    return this;
  }

  /**
   * Building Identifier.
   * @return value or {@code null} for none
   */
  public java.lang.String getBuildingId() {
    return buildingId;
  }

  /**
   * Building Identifier.
   * @param buildingId buildingId or {@code null} for none
   */
  public UserLocation setBuildingId(java.lang.String buildingId) {
    this.buildingId = buildingId;
    return this;
  }

  /**
   * Custom Type.
   * @return value or {@code null} for none
   */
  public java.lang.String getCustomType() {
    return customType;
  }

  /**
   * Custom Type.
   * @param customType customType or {@code null} for none
   */
  public UserLocation setCustomType(java.lang.String customType) {
    this.customType = customType;
    return this;
  }

  /**
   * Most specific textual code of individual desk location.
   * @return value or {@code null} for none
   */
  public java.lang.String getDeskCode() {
    return deskCode;
  }

  /**
   * Most specific textual code of individual desk location.
   * @param deskCode deskCode or {@code null} for none
   */
  public UserLocation setDeskCode(java.lang.String deskCode) {
    this.deskCode = deskCode;
    return this;
  }

  /**
   * Floor name/number.
   * @return value or {@code null} for none
   */
  public java.lang.String getFloorName() {
    return floorName;
  }

  /**
   * Floor name/number.
   * @param floorName floorName or {@code null} for none
   */
  public UserLocation setFloorName(java.lang.String floorName) {
    this.floorName = floorName;
    return this;
  }

  /**
   * Floor section. More specific location within the floor. For example, if a floor is divided into
   * sections "A", "B", and "C", this field would identify one of those values.
   * @return value or {@code null} for none
   */
  public java.lang.String getFloorSection() {
    return floorSection;
  }

  /**
   * Floor section. More specific location within the floor. For example, if a floor is divided into
   * sections "A", "B", and "C", this field would identify one of those values.
   * @param floorSection floorSection or {@code null} for none
   */
  public UserLocation setFloorSection(java.lang.String floorSection) {
    this.floorSection = floorSection;
    return this;
  }

  /**
   * Each entry can have a type which indicates standard types of that entry. For example location
   * could be of types default and desk. In addition to standard type, an entry can have a custom
   * type and can give it any name. Such types should have "custom" as type and also have a
   * customType value.
   * @return value or {@code null} for none
   */
  public java.lang.String getType() {
    return type;
  }

  /**
   * Each entry can have a type which indicates standard types of that entry. For example location
   * could be of types default and desk. In addition to standard type, an entry can have a custom
   * type and can give it any name. Such types should have "custom" as type and also have a
   * customType value.
   * @param type type or {@code null} for none
   */
  public UserLocation setType(java.lang.String type) {
    this.type = type;
    return this;
  }

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

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

}
