All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.iotevents.model.DynamoDBAction Maven / Gradle / Ivy

Go to download

The AWS Java SDK for AWS IoT Events module holds the client classes that are used for communicating with AWS IoT Events Service

The newest version!
/*
 * Copyright 2019-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file 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.
 */
package com.amazonaws.services.iotevents.model;

import java.io.Serializable;
import javax.annotation.Generated;
import com.amazonaws.protocol.StructuredPojo;
import com.amazonaws.protocol.ProtocolMarshaller;

/**
 * 

* Defines an action to write to the Amazon DynamoDB table that you created. The standard action payload contains all * the information about the detector model instance and the event that triggered the action. You can customize the payload. One column of the * DynamoDB table receives all attribute-value pairs in the payload that you specify. *

*

* You must use expressions for all parameters in DynamoDBAction. The expressions accept literals, * operators, functions, references, and substitution templates. *

*

* Examples *

*
    *
  • *

    * For literal values, the expressions must contain single quotes. For example, the value for the * hashKeyType parameter can be 'STRING'. *

    *
  • *
  • *

    * For references, you must specify either variables or input values. For example, the value for the * hashKeyField parameter can be $input.GreenhouseInput.name. *

    *
  • *
  • *

    * For a substitution template, you must use ${}, and the template must be in single quotes. A substitution * template can also contain a combination of literals, operators, functions, references, and substitution templates. *

    *

    * In the following example, the value for the hashKeyValue parameter uses a substitution template. *

    *

    * '${$input.GreenhouseInput.temperature * 6 / 5 + 32} in Fahrenheit' *

    *
  • *
  • *

    * For a string concatenation, you must use +. A string concatenation can also contain a combination of * literals, operators, functions, references, and substitution templates. *

    *

    * In the following example, the value for the tableName parameter uses a string concatenation. *

    *

    * 'GreenhouseTemperatureTable ' + $input.GreenhouseInput.date *

    *
  • *
*

* For more information, see Expressions in the * AWS IoT Events Developer Guide. *

*

* If the defined payload type is a string, DynamoDBAction writes non-JSON data to the DynamoDB table as * binary data. The DynamoDB console displays the data as Base64-encoded text. The value for the * payloadField parameter is <payload-field>_raw. *

* * @see AWS API * Documentation */ @Generated("com.amazonaws:aws-java-sdk-code-generator") public class DynamoDBAction implements Serializable, Cloneable, StructuredPojo { /** *

* The data type for the hash key (also called the partition key). You can specify the following values: *

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. *

*/ private String hashKeyType; /** *

* The name of the hash key (also called the partition key). The hashKeyField value must match the * partition key of the target DynamoDB table. *

*/ private String hashKeyField; /** *

* The value of the hash key (also called the partition key). *

*/ private String hashKeyValue; /** *

* The data type for the range key (also called the sort key), You can specify the following values: *

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. *

*/ private String rangeKeyType; /** *

* The name of the range key (also called the sort key). The rangeKeyField value must match the sort * key of the target DynamoDB table. *

*/ private String rangeKeyField; /** *

* The value of the range key (also called the sort key). *

*/ private String rangeKeyValue; /** *

* The type of operation to perform. You can specify the following values: *

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified hash key * as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's partition key * must match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must match the * specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. *

*/ private String operation; /** *

* The name of the DynamoDB column that receives the action payload. *

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. *

*/ private String payloadField; /** *

* The name of the DynamoDB table. The tableName value must match the table name of the target DynamoDB * table. *

*/ private String tableName; private Payload payload; /** *

* The data type for the hash key (also called the partition key). You can specify the following values: *

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. *

* * @param hashKeyType * The data type for the hash key (also called the partition key). You can specify the following values:

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. */ public void setHashKeyType(String hashKeyType) { this.hashKeyType = hashKeyType; } /** *

* The data type for the hash key (also called the partition key). You can specify the following values: *

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. *

* * @return The data type for the hash key (also called the partition key). You can specify the following values:

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. */ public String getHashKeyType() { return this.hashKeyType; } /** *

* The data type for the hash key (also called the partition key). You can specify the following values: *

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. *

* * @param hashKeyType * The data type for the hash key (also called the partition key). You can specify the following values:

*
    *
  • *

    * 'STRING' - The hash key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The hash key is a number. *

    *
  • *
*

* If you don't specify hashKeyType, the default value is 'STRING'. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withHashKeyType(String hashKeyType) { setHashKeyType(hashKeyType); return this; } /** *

* The name of the hash key (also called the partition key). The hashKeyField value must match the * partition key of the target DynamoDB table. *

* * @param hashKeyField * The name of the hash key (also called the partition key). The hashKeyField value must match * the partition key of the target DynamoDB table. */ public void setHashKeyField(String hashKeyField) { this.hashKeyField = hashKeyField; } /** *

* The name of the hash key (also called the partition key). The hashKeyField value must match the * partition key of the target DynamoDB table. *

* * @return The name of the hash key (also called the partition key). The hashKeyField value must match * the partition key of the target DynamoDB table. */ public String getHashKeyField() { return this.hashKeyField; } /** *

* The name of the hash key (also called the partition key). The hashKeyField value must match the * partition key of the target DynamoDB table. *

* * @param hashKeyField * The name of the hash key (also called the partition key). The hashKeyField value must match * the partition key of the target DynamoDB table. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withHashKeyField(String hashKeyField) { setHashKeyField(hashKeyField); return this; } /** *

* The value of the hash key (also called the partition key). *

* * @param hashKeyValue * The value of the hash key (also called the partition key). */ public void setHashKeyValue(String hashKeyValue) { this.hashKeyValue = hashKeyValue; } /** *

* The value of the hash key (also called the partition key). *

* * @return The value of the hash key (also called the partition key). */ public String getHashKeyValue() { return this.hashKeyValue; } /** *

* The value of the hash key (also called the partition key). *

* * @param hashKeyValue * The value of the hash key (also called the partition key). * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withHashKeyValue(String hashKeyValue) { setHashKeyValue(hashKeyValue); return this; } /** *

* The data type for the range key (also called the sort key), You can specify the following values: *

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. *

* * @param rangeKeyType * The data type for the range key (also called the sort key), You can specify the following values:

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. */ public void setRangeKeyType(String rangeKeyType) { this.rangeKeyType = rangeKeyType; } /** *

* The data type for the range key (also called the sort key), You can specify the following values: *

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. *

* * @return The data type for the range key (also called the sort key), You can specify the following values:

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. */ public String getRangeKeyType() { return this.rangeKeyType; } /** *

* The data type for the range key (also called the sort key), You can specify the following values: *

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. *

* * @param rangeKeyType * The data type for the range key (also called the sort key), You can specify the following values:

*
    *
  • *

    * 'STRING' - The range key is a string. *

    *
  • *
  • *

    * 'NUMBER' - The range key is number. *

    *
  • *
*

* If you don't specify rangeKeyField, the default value is 'STRING'. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withRangeKeyType(String rangeKeyType) { setRangeKeyType(rangeKeyType); return this; } /** *

* The name of the range key (also called the sort key). The rangeKeyField value must match the sort * key of the target DynamoDB table. *

* * @param rangeKeyField * The name of the range key (also called the sort key). The rangeKeyField value must match the * sort key of the target DynamoDB table. */ public void setRangeKeyField(String rangeKeyField) { this.rangeKeyField = rangeKeyField; } /** *

* The name of the range key (also called the sort key). The rangeKeyField value must match the sort * key of the target DynamoDB table. *

* * @return The name of the range key (also called the sort key). The rangeKeyField value must match the * sort key of the target DynamoDB table. */ public String getRangeKeyField() { return this.rangeKeyField; } /** *

* The name of the range key (also called the sort key). The rangeKeyField value must match the sort * key of the target DynamoDB table. *

* * @param rangeKeyField * The name of the range key (also called the sort key). The rangeKeyField value must match the * sort key of the target DynamoDB table. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withRangeKeyField(String rangeKeyField) { setRangeKeyField(rangeKeyField); return this; } /** *

* The value of the range key (also called the sort key). *

* * @param rangeKeyValue * The value of the range key (also called the sort key). */ public void setRangeKeyValue(String rangeKeyValue) { this.rangeKeyValue = rangeKeyValue; } /** *

* The value of the range key (also called the sort key). *

* * @return The value of the range key (also called the sort key). */ public String getRangeKeyValue() { return this.rangeKeyValue; } /** *

* The value of the range key (also called the sort key). *

* * @param rangeKeyValue * The value of the range key (also called the sort key). * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withRangeKeyValue(String rangeKeyValue) { setRangeKeyValue(rangeKeyValue); return this; } /** *

* The type of operation to perform. You can specify the following values: *

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified hash key * as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's partition key * must match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must match the * specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. *

* * @param operation * The type of operation to perform. You can specify the following values:

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified * hash key as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's partition * key must match the specified hash key. If you specified a range key, the range key must match the item's * sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must * match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. */ public void setOperation(String operation) { this.operation = operation; } /** *

* The type of operation to perform. You can specify the following values: *

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified hash key * as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's partition key * must match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must match the * specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. *

* * @return The type of operation to perform. You can specify the following values:

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified * hash key as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's * partition key must match the specified hash key. If you specified a range key, the range key must match * the item's sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must * match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. */ public String getOperation() { return this.operation; } /** *

* The type of operation to perform. You can specify the following values: *

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified hash key * as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's partition key * must match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must match the * specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. *

* * @param operation * The type of operation to perform. You can specify the following values:

*
    *
  • *

    * 'INSERT' - Insert data as a new item into the DynamoDB table. This item uses the specified * hash key as a partition key. If you specified a range key, the item uses the range key as a sort key. *

    *
  • *
  • *

    * 'UPDATE' - Update an existing item of the DynamoDB table with new data. This item's partition * key must match the specified hash key. If you specified a range key, the range key must match the item's * sort key. *

    *
  • *
  • *

    * 'DELETE' - Delete an existing item of the DynamoDB table. This item's partition key must * match the specified hash key. If you specified a range key, the range key must match the item's sort key. *

    *
  • *
*

* If you don't specify this parameter, AWS IoT Events triggers the 'INSERT' operation. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withOperation(String operation) { setOperation(operation); return this; } /** *

* The name of the DynamoDB column that receives the action payload. *

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. *

* * @param payloadField * The name of the DynamoDB column that receives the action payload.

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. */ public void setPayloadField(String payloadField) { this.payloadField = payloadField; } /** *

* The name of the DynamoDB column that receives the action payload. *

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. *

* * @return The name of the DynamoDB column that receives the action payload.

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. */ public String getPayloadField() { return this.payloadField; } /** *

* The name of the DynamoDB column that receives the action payload. *

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. *

* * @param payloadField * The name of the DynamoDB column that receives the action payload.

*

* If you don't specify this parameter, the name of the DynamoDB column is payload. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withPayloadField(String payloadField) { setPayloadField(payloadField); return this; } /** *

* The name of the DynamoDB table. The tableName value must match the table name of the target DynamoDB * table. *

* * @param tableName * The name of the DynamoDB table. The tableName value must match the table name of the target * DynamoDB table. */ public void setTableName(String tableName) { this.tableName = tableName; } /** *

* The name of the DynamoDB table. The tableName value must match the table name of the target DynamoDB * table. *

* * @return The name of the DynamoDB table. The tableName value must match the table name of the target * DynamoDB table. */ public String getTableName() { return this.tableName; } /** *

* The name of the DynamoDB table. The tableName value must match the table name of the target DynamoDB * table. *

* * @param tableName * The name of the DynamoDB table. The tableName value must match the table name of the target * DynamoDB table. * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withTableName(String tableName) { setTableName(tableName); return this; } /** * @param payload */ public void setPayload(Payload payload) { this.payload = payload; } /** * @return */ public Payload getPayload() { return this.payload; } /** * @param payload * @return Returns a reference to this object so that method calls can be chained together. */ public DynamoDBAction withPayload(Payload payload) { setPayload(payload); return this; } /** * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be * redacted from this string using a placeholder value. * * @return A string representation of this object. * * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{"); if (getHashKeyType() != null) sb.append("HashKeyType: ").append(getHashKeyType()).append(","); if (getHashKeyField() != null) sb.append("HashKeyField: ").append(getHashKeyField()).append(","); if (getHashKeyValue() != null) sb.append("HashKeyValue: ").append(getHashKeyValue()).append(","); if (getRangeKeyType() != null) sb.append("RangeKeyType: ").append(getRangeKeyType()).append(","); if (getRangeKeyField() != null) sb.append("RangeKeyField: ").append(getRangeKeyField()).append(","); if (getRangeKeyValue() != null) sb.append("RangeKeyValue: ").append(getRangeKeyValue()).append(","); if (getOperation() != null) sb.append("Operation: ").append(getOperation()).append(","); if (getPayloadField() != null) sb.append("PayloadField: ").append(getPayloadField()).append(","); if (getTableName() != null) sb.append("TableName: ").append(getTableName()).append(","); if (getPayload() != null) sb.append("Payload: ").append(getPayload()); sb.append("}"); return sb.toString(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (obj instanceof DynamoDBAction == false) return false; DynamoDBAction other = (DynamoDBAction) obj; if (other.getHashKeyType() == null ^ this.getHashKeyType() == null) return false; if (other.getHashKeyType() != null && other.getHashKeyType().equals(this.getHashKeyType()) == false) return false; if (other.getHashKeyField() == null ^ this.getHashKeyField() == null) return false; if (other.getHashKeyField() != null && other.getHashKeyField().equals(this.getHashKeyField()) == false) return false; if (other.getHashKeyValue() == null ^ this.getHashKeyValue() == null) return false; if (other.getHashKeyValue() != null && other.getHashKeyValue().equals(this.getHashKeyValue()) == false) return false; if (other.getRangeKeyType() == null ^ this.getRangeKeyType() == null) return false; if (other.getRangeKeyType() != null && other.getRangeKeyType().equals(this.getRangeKeyType()) == false) return false; if (other.getRangeKeyField() == null ^ this.getRangeKeyField() == null) return false; if (other.getRangeKeyField() != null && other.getRangeKeyField().equals(this.getRangeKeyField()) == false) return false; if (other.getRangeKeyValue() == null ^ this.getRangeKeyValue() == null) return false; if (other.getRangeKeyValue() != null && other.getRangeKeyValue().equals(this.getRangeKeyValue()) == false) return false; if (other.getOperation() == null ^ this.getOperation() == null) return false; if (other.getOperation() != null && other.getOperation().equals(this.getOperation()) == false) return false; if (other.getPayloadField() == null ^ this.getPayloadField() == null) return false; if (other.getPayloadField() != null && other.getPayloadField().equals(this.getPayloadField()) == false) return false; if (other.getTableName() == null ^ this.getTableName() == null) return false; if (other.getTableName() != null && other.getTableName().equals(this.getTableName()) == false) return false; if (other.getPayload() == null ^ this.getPayload() == null) return false; if (other.getPayload() != null && other.getPayload().equals(this.getPayload()) == false) return false; return true; } @Override public int hashCode() { final int prime = 31; int hashCode = 1; hashCode = prime * hashCode + ((getHashKeyType() == null) ? 0 : getHashKeyType().hashCode()); hashCode = prime * hashCode + ((getHashKeyField() == null) ? 0 : getHashKeyField().hashCode()); hashCode = prime * hashCode + ((getHashKeyValue() == null) ? 0 : getHashKeyValue().hashCode()); hashCode = prime * hashCode + ((getRangeKeyType() == null) ? 0 : getRangeKeyType().hashCode()); hashCode = prime * hashCode + ((getRangeKeyField() == null) ? 0 : getRangeKeyField().hashCode()); hashCode = prime * hashCode + ((getRangeKeyValue() == null) ? 0 : getRangeKeyValue().hashCode()); hashCode = prime * hashCode + ((getOperation() == null) ? 0 : getOperation().hashCode()); hashCode = prime * hashCode + ((getPayloadField() == null) ? 0 : getPayloadField().hashCode()); hashCode = prime * hashCode + ((getTableName() == null) ? 0 : getTableName().hashCode()); hashCode = prime * hashCode + ((getPayload() == null) ? 0 : getPayload().hashCode()); return hashCode; } @Override public DynamoDBAction clone() { try { return (DynamoDBAction) super.clone(); } catch (CloneNotSupportedException e) { throw new IllegalStateException("Got a CloneNotSupportedException from Object.clone() " + "even though we're Cloneable!", e); } } @com.amazonaws.annotation.SdkInternalApi @Override public void marshall(ProtocolMarshaller protocolMarshaller) { com.amazonaws.services.iotevents.model.transform.DynamoDBActionMarshaller.getInstance().marshall(this, protocolMarshaller); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy