/* * Copyright 2014-2017 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.dynamodbv2.document.utils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import com.amazonaws.services.dynamodbv2.document.internal.InternalUtils; /** * Utility value list. */ public class ValueList extends FluentArrayList<Object> { private static final long serialVersionUID = 1L; public ValueList(int initialCapacity) { super(initialCapacity); } public ValueList(Object ... elements) { super(elements); } public ValueList() { super(); } public ValueList(Collection<?> c) { super(c); } public ValueList appendAll(Object ... elements) { super.appendAll(elements); return this; } /** * Appends the given value to this list. */ public ValueList appendString(String val) { super.append(val); return this; } /** * Appends the given value to this list. */ public ValueList appendNumber(BigDecimal val) { super.append(val); return this; } /** * Appends the given value to this list. */ public ValueList appendNumber(Number val) { super.append(InternalUtils.toBigDecimal(val)); return this; } /** * Appends the given value to this list. */ public ValueList appendInt(int val) { return appendNumber(Integer.valueOf(val)); } /** * Appends the given value to this list. */ public ValueList appendLong(long val) { return appendNumber(Long.valueOf(val)); } /** * Appends the given value to this list. */ public ValueList appendBinary(byte[] val) { super.append(val); return this; } /** * Appends the given value to this list. */ public ValueList appendStringSet(Set<String> val) { super.append(val); return this; } /** * Appends the given values to this list as a string set. */ public ValueList appendStringSet(String ...val) { super.append(new LinkedHashSet<String>(Arrays.asList(val))); return this; } /** * Appends the given value to this list. */ public ValueList appendNumberSet(Set<BigDecimal> val) { super.append(val); return this; } /** * Appends the given value to this list as a set of BigDecimals. */ public ValueList appendNumberSet(BigDecimal ... val) { super.append(new LinkedHashSet<BigDecimal>(Arrays.asList(val))); return this; } /** * Appends the given values to this list as a number set. */ public ValueList appendNumberSet(Number ... val) { super.append(InternalUtils.toBigDecimalSet(val)); return this; } /** * Appends the given value to this list. */ public ValueList appendBinarySet(Set<byte[]> val) { super.append(val); return this; } /** * Appends the given values to this list as a set of byte arrays. */ public ValueList appendBinarySet(byte[] ... val) { super.append(new LinkedHashSet<byte[]>(Arrays.asList(val))); return this; } /** * Appends the given value to this list. */ public ValueList appendList(List<?> val) { super.append(new ArrayList<Object>(val)); return this; } /** * Appends the given values to this list as a list. */ public ValueList appendList(Object ... vals) { super.append(new ArrayList<Object>(Arrays.asList(vals))); return this; } /** * Appends the given value to this list. */ public ValueList appendMap(Map<String, ?> val) { super.append(val); return this; } /** * Appends the given value to this list. */ public ValueList appendBoolean(boolean val) { super.append(Boolean.valueOf(val)); return this; } /** * Appends a null value to this list. */ public ValueList appendNull() { super.append(null); return this; } /** * Appends the given value to this list. A value can be a * <ul> * <li>Number</li> * <li>String</li> * <li>binary (ie byte array or byte buffer)</li> * <li>boolean</li> * <li>null</li> * <li>list (of any of the types on this list)</li> * <li>map (append string key to value of any of the types on this list)</li> * <li>set (of any of the types on this list)</li> * </ul> */ public ValueList append(Object val) { if (val == this) throw new IllegalArgumentException("Self reference is not allowed"); // TODO: fail fast if val is not a supported type super.append(val); return this; } }