/*
 * 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;

/**
 * This capability represents device action needed capability. Next ID: 10
 *
 * <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 AssistantDevicesPlatformProtoDeviceActionCapability extends com.google.api.client.json.GenericJson {

  /**
   * Integrate your device with Google's Smart Home solution by putting your device into Google's
   * Home Graph, a database that stores and provides contextual data about the home and its devices.
   * For example, Home Graph can store the concept of a living room that contains multiple types of
   * devices, when you say "turn on the light" to a device, if you have light in the living room,
   * that light will be turned on.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean assistantDeviceInRoomOptOut;

  /**
   * Specifies behavior for built-in device actions for this device model. If not specified,
   * defaults to ENABLE_CONFIGURED_INTENTS_ONLY.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String builtInIntentMode;

  /**
   * Specifies which custom device actions should be enabled for this device model. This will only
   * affect the behavior of intents corresponding to those from the Action Package of this project.
   * If not specified, defaults to ENABLE_ALL.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String customIntentMode;

  /**
   * Default instructions for routing of any Intent. The data here could be overridden for specific
   * Intents if provided directly in the 'intents' field.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantDevicesPlatformProtoExecutionConfig defaultExecutionConfig;

  /**
   * Specifies capabilities for device actions that are inlined in the
   * google.assistant.embedded.v1.DeviceAction message.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantDevicesPlatformProtoInlinedActionCapability inlinedActionCapability;

  /**
   * Intent configurations. Built-in and custom intents may be configured here. Note that built-in
   * intents will always behave with IntentMode of ENABLE_CONFIGURED_INTENTS_ONLY. The IntentMode
   * for custom intents can be changed using the custom_intent_mode. To configure an intent, list it
   * here with its intent name, e.g. "MY_CUSTOM_INTENT",
   * "google.assistant.car.model.capabilities.AC_TEMPERATURE".
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<AssistantDevicesPlatformProtoIntent> intents;

  /**
   * Provided data which augments the device action capabilities. Some built-in intents may require
   * additional configuration to be provided. One example could be the list of channels available
   * for the `action.intent.SelectChannel` intent.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<AssistantDevicesPlatformProtoProvidedData> providedData;

  /**
   * List of built-in traits such as "action.devices.traits.OnOff" See
   * java/com/google/home/graph/service/config/protoconf.pi As of Nov. 2017, we also support custom
   * traits for EAP users. We'll eventually disable custom traits once custom actions are in place.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> traits;

  /**
   * Specifies the format how Google routes queries to 3P cloud. By default, this field is unset,
   * all partners should get shallow NLU. This is needed *ONLY* for specific partners for strong
   * business reasons.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantDevicesPlatformProtoUnderstandingConfig understandingConfig;

  /**
   * Integrate your device with Google's Smart Home solution by putting your device into Google's
   * Home Graph, a database that stores and provides contextual data about the home and its devices.
   * For example, Home Graph can store the concept of a living room that contains multiple types of
   * devices, when you say "turn on the light" to a device, if you have light in the living room,
   * that light will be turned on.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAssistantDeviceInRoomOptOut() {
    return assistantDeviceInRoomOptOut;
  }

  /**
   * Integrate your device with Google's Smart Home solution by putting your device into Google's
   * Home Graph, a database that stores and provides contextual data about the home and its devices.
   * For example, Home Graph can store the concept of a living room that contains multiple types of
   * devices, when you say "turn on the light" to a device, if you have light in the living room,
   * that light will be turned on.
   * @param assistantDeviceInRoomOptOut assistantDeviceInRoomOptOut or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setAssistantDeviceInRoomOptOut(java.lang.Boolean assistantDeviceInRoomOptOut) {
    this.assistantDeviceInRoomOptOut = assistantDeviceInRoomOptOut;
    return this;
  }

  /**
   * Specifies behavior for built-in device actions for this device model. If not specified,
   * defaults to ENABLE_CONFIGURED_INTENTS_ONLY.
   * @return value or {@code null} for none
   */
  public java.lang.String getBuiltInIntentMode() {
    return builtInIntentMode;
  }

  /**
   * Specifies behavior for built-in device actions for this device model. If not specified,
   * defaults to ENABLE_CONFIGURED_INTENTS_ONLY.
   * @param builtInIntentMode builtInIntentMode or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setBuiltInIntentMode(java.lang.String builtInIntentMode) {
    this.builtInIntentMode = builtInIntentMode;
    return this;
  }

  /**
   * Specifies which custom device actions should be enabled for this device model. This will only
   * affect the behavior of intents corresponding to those from the Action Package of this project.
   * If not specified, defaults to ENABLE_ALL.
   * @return value or {@code null} for none
   */
  public java.lang.String getCustomIntentMode() {
    return customIntentMode;
  }

  /**
   * Specifies which custom device actions should be enabled for this device model. This will only
   * affect the behavior of intents corresponding to those from the Action Package of this project.
   * If not specified, defaults to ENABLE_ALL.
   * @param customIntentMode customIntentMode or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setCustomIntentMode(java.lang.String customIntentMode) {
    this.customIntentMode = customIntentMode;
    return this;
  }

  /**
   * Default instructions for routing of any Intent. The data here could be overridden for specific
   * Intents if provided directly in the 'intents' field.
   * @return value or {@code null} for none
   */
  public AssistantDevicesPlatformProtoExecutionConfig getDefaultExecutionConfig() {
    return defaultExecutionConfig;
  }

  /**
   * Default instructions for routing of any Intent. The data here could be overridden for specific
   * Intents if provided directly in the 'intents' field.
   * @param defaultExecutionConfig defaultExecutionConfig or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setDefaultExecutionConfig(AssistantDevicesPlatformProtoExecutionConfig defaultExecutionConfig) {
    this.defaultExecutionConfig = defaultExecutionConfig;
    return this;
  }

  /**
   * Specifies capabilities for device actions that are inlined in the
   * google.assistant.embedded.v1.DeviceAction message.
   * @return value or {@code null} for none
   */
  public AssistantDevicesPlatformProtoInlinedActionCapability getInlinedActionCapability() {
    return inlinedActionCapability;
  }

  /**
   * Specifies capabilities for device actions that are inlined in the
   * google.assistant.embedded.v1.DeviceAction message.
   * @param inlinedActionCapability inlinedActionCapability or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setInlinedActionCapability(AssistantDevicesPlatformProtoInlinedActionCapability inlinedActionCapability) {
    this.inlinedActionCapability = inlinedActionCapability;
    return this;
  }

  /**
   * Intent configurations. Built-in and custom intents may be configured here. Note that built-in
   * intents will always behave with IntentMode of ENABLE_CONFIGURED_INTENTS_ONLY. The IntentMode
   * for custom intents can be changed using the custom_intent_mode. To configure an intent, list it
   * here with its intent name, e.g. "MY_CUSTOM_INTENT",
   * "google.assistant.car.model.capabilities.AC_TEMPERATURE".
   * @return value or {@code null} for none
   */
  public java.util.List<AssistantDevicesPlatformProtoIntent> getIntents() {
    return intents;
  }

  /**
   * Intent configurations. Built-in and custom intents may be configured here. Note that built-in
   * intents will always behave with IntentMode of ENABLE_CONFIGURED_INTENTS_ONLY. The IntentMode
   * for custom intents can be changed using the custom_intent_mode. To configure an intent, list it
   * here with its intent name, e.g. "MY_CUSTOM_INTENT",
   * "google.assistant.car.model.capabilities.AC_TEMPERATURE".
   * @param intents intents or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setIntents(java.util.List<AssistantDevicesPlatformProtoIntent> intents) {
    this.intents = intents;
    return this;
  }

  /**
   * Provided data which augments the device action capabilities. Some built-in intents may require
   * additional configuration to be provided. One example could be the list of channels available
   * for the `action.intent.SelectChannel` intent.
   * @return value or {@code null} for none
   */
  public java.util.List<AssistantDevicesPlatformProtoProvidedData> getProvidedData() {
    return providedData;
  }

  /**
   * Provided data which augments the device action capabilities. Some built-in intents may require
   * additional configuration to be provided. One example could be the list of channels available
   * for the `action.intent.SelectChannel` intent.
   * @param providedData providedData or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setProvidedData(java.util.List<AssistantDevicesPlatformProtoProvidedData> providedData) {
    this.providedData = providedData;
    return this;
  }

  /**
   * List of built-in traits such as "action.devices.traits.OnOff" See
   * java/com/google/home/graph/service/config/protoconf.pi As of Nov. 2017, we also support custom
   * traits for EAP users. We'll eventually disable custom traits once custom actions are in place.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getTraits() {
    return traits;
  }

  /**
   * List of built-in traits such as "action.devices.traits.OnOff" See
   * java/com/google/home/graph/service/config/protoconf.pi As of Nov. 2017, we also support custom
   * traits for EAP users. We'll eventually disable custom traits once custom actions are in place.
   * @param traits traits or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setTraits(java.util.List<java.lang.String> traits) {
    this.traits = traits;
    return this;
  }

  /**
   * Specifies the format how Google routes queries to 3P cloud. By default, this field is unset,
   * all partners should get shallow NLU. This is needed *ONLY* for specific partners for strong
   * business reasons.
   * @return value or {@code null} for none
   */
  public AssistantDevicesPlatformProtoUnderstandingConfig getUnderstandingConfig() {
    return understandingConfig;
  }

  /**
   * Specifies the format how Google routes queries to 3P cloud. By default, this field is unset,
   * all partners should get shallow NLU. This is needed *ONLY* for specific partners for strong
   * business reasons.
   * @param understandingConfig understandingConfig or {@code null} for none
   */
  public AssistantDevicesPlatformProtoDeviceActionCapability setUnderstandingConfig(AssistantDevicesPlatformProtoUnderstandingConfig understandingConfig) {
    this.understandingConfig = understandingConfig;
    return this;
  }

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

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

}
