/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ package backtype.storm.tuple; import java.util.List; /** * The tuple is the main data structure in Storm. A tuple is a named list of values, * where each value can be any type. Tuples are dynamically typed -- the types of the fields * do not need to be declared. Tuples have helper methods like getInteger and getString * to get field values without having to cast the result. * <p> * Storm needs to know how to serialize all the values in a tuple. By default, Storm * knows how to serialize the primitive types, strings, and byte arrays. If you want to * use another type, you'll need to implement and register a serializer for that type. * @see <a href="https://storm.apache.org/documentation/Serialization.html">Storm serialization</a> */ public class TupleImpl implements Tuple { private com.twitter.heron.api.tuple.Tuple delegate; public TupleImpl(com.twitter.heron.api.tuple.Tuple t) { delegate = t; } public com.twitter.heron.api.tuple.Tuple getDelegate() { return delegate; } /** * Returns the number of fields in this tuple. */ public int size() { return delegate.size(); } /** * Returns the position of the specified field in this tuple. */ public int fieldIndex(String field) { return delegate.fieldIndex(field); } /** * Returns true if this tuple contains the specified name of the field. */ public boolean contains(String field) { return delegate.contains(field); } /** * Gets the field at position i in the tuple. Returns object since tuples are dynamically typed. */ public Object getValue(int i) { return delegate.getValue(i); } /** * Returns the String at position i in the tuple. If that field is not a String, * you will get a runtime error. */ public String getString(int i) { return delegate.getString(i); } /** * Returns the Integer at position i in the tuple. If that field is not an Integer, * you will get a runtime error. */ public Integer getInteger(int i) { return delegate.getInteger(i); } /** * Returns the Long at position i in the tuple. If that field is not a Long, * you will get a runtime error. */ public Long getLong(int i) { return delegate.getLong(i); } /** * Returns the Boolean at position i in the tuple. If that field is not a Boolean, * you will get a runtime error. */ public Boolean getBoolean(int i) { return delegate.getBoolean(i); } /** * Returns the Short at position i in the tuple. If that field is not a Short, * you will get a runtime error. */ public Short getShort(int i) { return delegate.getShort(i); } /** * Returns the Byte at position i in the tuple. If that field is not a Byte, * you will get a runtime error. */ public Byte getByte(int i) { return delegate.getByte(i); } /** * Returns the Double at position i in the tuple. If that field is not a Double, * you will get a runtime error. */ public Double getDouble(int i) { return delegate.getDouble(i); } /** * Returns the Float at position i in the tuple. If that field is not a Float, * you will get a runtime error. */ public Float getFloat(int i) { return delegate.getFloat(i); } /** * Returns the byte array at position i in the tuple. If that field is not a byte array, * you will get a runtime error. */ public byte[] getBinary(int i) { return delegate.getBinary(i); } public Object getValueByField(String field) { return delegate.getValueByField(field); } public String getStringByField(String field) { return delegate.getStringByField(field); } public Integer getIntegerByField(String field) { return delegate.getIntegerByField(field); } public Long getLongByField(String field) { return delegate.getLongByField(field); } public Boolean getBooleanByField(String field) { return delegate.getBooleanByField(field); } public Short getShortByField(String field) { return delegate.getShortByField(field); } public Byte getByteByField(String field) { return delegate.getByteByField(field); } public Double getDoubleByField(String field) { return delegate.getDoubleByField(field); } public Float getFloatByField(String field) { return delegate.getFloatByField(field); } public byte[] getBinaryByField(String field) { return delegate.getBinaryByField(field); } /** * Gets all the values in this tuple. */ public List<Object> getValues() { return delegate.getValues(); } /** * Gets the names of the fields in this tuple. */ public Fields getFields() { return new Fields(delegate.getFields()); } /** * Returns a subset of the tuple based on the fields selector. */ public List<Object> select(Fields selector) { return delegate.select(selector.getDelegate()); } /** * Returns the global stream id (component + stream) of this tuple. */ /* TODO:- One can get this using getSourceStreamId and getSourceComponent public GlobalStreamId getSourceGlobalStreamid(); */ /** * Gets the id of the component that created this tuple. */ public String getSourceComponent() { return delegate.getSourceComponent(); } /** * Gets the id of the task that created this tuple. */ public int getSourceTask() { return delegate.getSourceTask(); } /** * Gets the id of the stream that this tuple was emitted to. */ public String getSourceStreamId() { return delegate.getSourceStreamId(); } /** * Gets the message id that associated with this tuple. */ /* TODO:- does anyone use this public MessageId getMessageId(); */ /** * Resets the tuple values to null * TODO:- Is this needed */ public void resetValues() { delegate.resetValues(); } }