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

software.amazon.awssdk.enhanced.dynamodb.update.RemoveAction Maven / Gradle / Ivy

/*
 * Copyright 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 software.amazon.awssdk.enhanced.dynamodb.update;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.utils.Validate;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;

/**
 * A representation of a single {@link UpdateExpression} REMOVE action.
 * 

* At a minimum, this action must contain a path string referencing the attribute that should be removed when applying this * action. Consult the DynamoDB UpdateExpression documentation for details on this action. *

* Optionally, attribute names can be substituted with tokens using the '#name_token' syntax. If tokens are used in the * expression then the names associated with those tokens must be explicitly added to the expressionNames map * that is also stored on this object. *

* Example:- *

 * {@code
 * RemoveUpdateAction removeAction = RemoveUpdateAction.builder()
 *                                                     .path("#a")
 *                                                     .putExpressionName("#a", "attributeA")
 *                                                     .build();
 * }
 * 
*/ @SdkPublicApi public final class RemoveAction implements UpdateAction, ToCopyableBuilder { private final String path; private final Map expressionNames; private RemoveAction(Builder builder) { this.path = Validate.paramNotNull(builder.path, "path"); this.expressionNames = wrapSecure(builder.expressionNames != null ? builder.expressionNames : new HashMap<>()); } private static Map wrapSecure(Map map) { return Collections.unmodifiableMap(new HashMap<>(map)); } /** * Constructs a new builder for {@link RemoveAction}. * * @return a new builder. */ public static Builder builder() { return new Builder(); } @Override public Builder toBuilder() { return builder().path(path) .expressionNames(expressionNames); } public String path() { return path; } public Map expressionNames() { return expressionNames; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } RemoveAction that = (RemoveAction) o; if (path != null ? ! path.equals(that.path) : that.path != null) { return false; } return expressionNames != null ? expressionNames.equals(that.expressionNames) : that.expressionNames == null; } @Override public int hashCode() { int result = path != null ? path.hashCode() : 0; result = 31 * result + (expressionNames != null ? expressionNames.hashCode() : 0); return result; } /** * A builder for {@link RemoveAction} */ public static final class Builder implements CopyableBuilder { private String path; private Map expressionNames; private Builder() { } /** * A string expression representing the attribute to remove */ public Builder path(String path) { this.path = path; return this; } /** * Sets the optional 'expression names' token map, overriding any existing values. Use if the attribute * references in the path expression are token ('expression attribute names') prepended with the * '#' (pound) sign. It should map from token name to real attribute name. * * @see #putExpressionName(String, String) */ public Builder expressionNames(Map expressionNames) { this.expressionNames = expressionNames == null ? null : new HashMap<>(expressionNames); return this; } /** * Adds a single element to the optional 'expression names' token map. * * @see #expressionNames(Map) */ public Builder putExpressionName(String key, String value) { if (this.expressionNames == null) { this.expressionNames = new HashMap<>(); } this.expressionNames.put(key, value); return this; } /** * Builds an {@link RemoveAction} based on the values stored in this builder. */ public RemoveAction build() { return new RemoveAction(this); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy