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

/**
 * Model definition for GeostoreLaneProtoLaneConnection.
 *
 * <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 Document AI Warehouse 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 GeostoreLaneProtoLaneConnection extends com.google.api.client.json.GenericJson {

  /**
   * References to any gcid:physical_lane_marker features that bound this lane connection.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<GeostoreBoundingMarkerProto> boundingMarker;

  static {
    // hack to force ProGuard to consider GeostoreBoundingMarkerProto used, since otherwise it would be stripped out
    // see https://github.com/google/google-api-java-client/issues/543
    com.google.api.client.util.Data.nullOf(GeostoreBoundingMarkerProto.class);
  }

  /**
   * A token that can be used to identify the version of the data about this lane connection.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String connectionToken;

  /**
   * Specifies how the flowline should be synthesized in this connection region. If unspecified,
   * heuristics may be used to pick a sweep shape based on retraction values or neighboring curves.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GeostoreCurveConnectionProto curve;

  /**
   * The most logical path for the center of an object to travel along within the lane connection.
   * Typically, this is the lane connection's center line, but doesn't have to be.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GeostoreFlowLineProto flow;

  /**
   * This is the lane number on the target segment. This field is not set if the target segment
   * doesn't have lanes, or we don't know the exact connectivity.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer laneNumber;

  /**
   * True if this connects to the unique, natural continuation of the current lane. At most one
   * LaneConnection per lane can have this field set true. This attribute is of interest to ADAS
   * providers as a hint to which lane a vehicle is likely to follow, in the absence of other
   * information about the vehicle's planned path.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean primaryConnection;

  /**
   * This reference to the other segment is weak, since strong would blow up bounds of all segments.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GeostoreFeatureIdProto segment;

  /**
   * The inverse of the primary connection bit that provides a hint that this connection is part of
   * a merge and a vehicle following this connection should yield to vehicles following other
   * incoming connections.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean yieldToOtherConnections;

  /**
   * References to any gcid:physical_lane_marker features that bound this lane connection.
   * @return value or {@code null} for none
   */
  public java.util.List<GeostoreBoundingMarkerProto> getBoundingMarker() {
    return boundingMarker;
  }

  /**
   * References to any gcid:physical_lane_marker features that bound this lane connection.
   * @param boundingMarker boundingMarker or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setBoundingMarker(java.util.List<GeostoreBoundingMarkerProto> boundingMarker) {
    this.boundingMarker = boundingMarker;
    return this;
  }

  /**
   * A token that can be used to identify the version of the data about this lane connection.
   * @return value or {@code null} for none
   */
  public java.lang.String getConnectionToken() {
    return connectionToken;
  }

  /**
   * A token that can be used to identify the version of the data about this lane connection.
   * @param connectionToken connectionToken or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setConnectionToken(java.lang.String connectionToken) {
    this.connectionToken = connectionToken;
    return this;
  }

  /**
   * Specifies how the flowline should be synthesized in this connection region. If unspecified,
   * heuristics may be used to pick a sweep shape based on retraction values or neighboring curves.
   * @return value or {@code null} for none
   */
  public GeostoreCurveConnectionProto getCurve() {
    return curve;
  }

  /**
   * Specifies how the flowline should be synthesized in this connection region. If unspecified,
   * heuristics may be used to pick a sweep shape based on retraction values or neighboring curves.
   * @param curve curve or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setCurve(GeostoreCurveConnectionProto curve) {
    this.curve = curve;
    return this;
  }

  /**
   * The most logical path for the center of an object to travel along within the lane connection.
   * Typically, this is the lane connection's center line, but doesn't have to be.
   * @return value or {@code null} for none
   */
  public GeostoreFlowLineProto getFlow() {
    return flow;
  }

  /**
   * The most logical path for the center of an object to travel along within the lane connection.
   * Typically, this is the lane connection's center line, but doesn't have to be.
   * @param flow flow or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setFlow(GeostoreFlowLineProto flow) {
    this.flow = flow;
    return this;
  }

  /**
   * This is the lane number on the target segment. This field is not set if the target segment
   * doesn't have lanes, or we don't know the exact connectivity.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getLaneNumber() {
    return laneNumber;
  }

  /**
   * This is the lane number on the target segment. This field is not set if the target segment
   * doesn't have lanes, or we don't know the exact connectivity.
   * @param laneNumber laneNumber or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setLaneNumber(java.lang.Integer laneNumber) {
    this.laneNumber = laneNumber;
    return this;
  }

  /**
   * True if this connects to the unique, natural continuation of the current lane. At most one
   * LaneConnection per lane can have this field set true. This attribute is of interest to ADAS
   * providers as a hint to which lane a vehicle is likely to follow, in the absence of other
   * information about the vehicle's planned path.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getPrimaryConnection() {
    return primaryConnection;
  }

  /**
   * True if this connects to the unique, natural continuation of the current lane. At most one
   * LaneConnection per lane can have this field set true. This attribute is of interest to ADAS
   * providers as a hint to which lane a vehicle is likely to follow, in the absence of other
   * information about the vehicle's planned path.
   * @param primaryConnection primaryConnection or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setPrimaryConnection(java.lang.Boolean primaryConnection) {
    this.primaryConnection = primaryConnection;
    return this;
  }

  /**
   * This reference to the other segment is weak, since strong would blow up bounds of all segments.
   * @return value or {@code null} for none
   */
  public GeostoreFeatureIdProto getSegment() {
    return segment;
  }

  /**
   * This reference to the other segment is weak, since strong would blow up bounds of all segments.
   * @param segment segment or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setSegment(GeostoreFeatureIdProto segment) {
    this.segment = segment;
    return this;
  }

  /**
   * The inverse of the primary connection bit that provides a hint that this connection is part of
   * a merge and a vehicle following this connection should yield to vehicles following other
   * incoming connections.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getYieldToOtherConnections() {
    return yieldToOtherConnections;
  }

  /**
   * The inverse of the primary connection bit that provides a hint that this connection is part of
   * a merge and a vehicle following this connection should yield to vehicles following other
   * incoming connections.
   * @param yieldToOtherConnections yieldToOtherConnections or {@code null} for none
   */
  public GeostoreLaneProtoLaneConnection setYieldToOtherConnections(java.lang.Boolean yieldToOtherConnections) {
    this.yieldToOtherConnections = yieldToOtherConnections;
    return this;
  }

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

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

}
