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

org.apache.storm.tuple.Tuple Maven / Gradle / Ivy

The newest version!
/**
 * 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 org.apache.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.
 * 

* 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 Storm serialization */ public interface Tuple { /** * Returns the number of fields in this tuple. */ int size(); /** * Returns true if this tuple contains the specified name of the field. */ boolean contains(String field); /** * Gets the names of the fields in this tuple. */ Fields getFields(); /** * Returns the position of the specified field in this tuple. * * @throws IllegalArgumentException - if field does not exist */ int fieldIndex(String field); /** * Returns a subset of the tuple based on the fields selector. */ List select(Fields selector); /** * Gets the field at position i in the tuple. Returns object since tuples are dynamically typed. * * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Object getValue(int i); /** * Returns the String at position i in the tuple. * * @throws ClassCastException If that field is not a String * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ String getString(int i); /** * Returns the Integer at position i in the tuple. * * @throws ClassCastException If that field is not a Integer * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Integer getInteger(int i); /** * Returns the Long at position i in the tuple. * * @throws ClassCastException If that field is not a Long * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Long getLong(int i); /** * Returns the Boolean at position i in the tuple. * * @throws ClassCastException If that field is not a Boolean * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Boolean getBoolean(int i); /** * Returns the Short at position i in the tuple. * * @throws ClassCastException If that field is not a Short * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Short getShort(int i); /** * Returns the Byte at position i in the tuple. * * @throws ClassCastException If that field is not a Byte * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Byte getByte(int i); /** * Returns the Double at position i in the tuple. * * @throws ClassCastException If that field is not a Double * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Double getDouble(int i); /** * Returns the Float at position i in the tuple. * * @throws ClassCastException If that field is not a Float * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ Float getFloat(int i); /** * Returns the byte array at position i in the tuple. * * @throws ClassCastException If that field is not a byte array * @throws IndexOutOfBoundsException - if the index is out of range `(index < 0 || index >= size())` */ byte[] getBinary(int i); /** * Gets the field with a specific name. Returns object since tuples are dynamically typed. * * @throws IllegalArgumentException - if field does not exist */ Object getValueByField(String field); /** * Gets the String field with a specific name. * * @throws ClassCastException If that field is not a String * @throws IllegalArgumentException - if field does not exist */ String getStringByField(String field); /** * Gets the Integer field with a specific name. * * @throws ClassCastException If that field is not an Integer * @throws IllegalArgumentException - if field does not exist */ Integer getIntegerByField(String field); /** * Gets the Long field with a specific name. * * @throws ClassCastException If that field is not a Long * @throws IllegalArgumentException - if field does not exist */ Long getLongByField(String field); /** * Gets the Boolean field with a specific name. * * @throws ClassCastException If that field is not a Boolean * @throws IllegalArgumentException - if field does not exist */ Boolean getBooleanByField(String field); /** * Gets the Short field with a specific name. * * @throws ClassCastException If that field is not a Short * @throws IllegalArgumentException - if field does not exist */ Short getShortByField(String field); /** * Gets the Byte field with a specific name. * * @throws ClassCastException If that field is not a Byte * @throws IllegalArgumentException - if field does not exist */ Byte getByteByField(String field); /** * Gets the Double field with a specific name. * * @throws ClassCastException If that field is not a Double * @throws IllegalArgumentException - if field does not exist */ Double getDoubleByField(String field); /** * Gets the Float field with a specific name. * * @throws ClassCastException If that field is not a Float * @throws IllegalArgumentException - if field does not exist */ Float getFloatByField(String field); /** * Gets the Byte array field with a specific name. * * @throws ClassCastException If that field is not a byte array * @throws IllegalArgumentException - if field does not exist */ byte[] getBinaryByField(String field); /** * Gets all the values in this tuple. */ List getValues(); /** * Returns the global stream id (component + stream) of this tuple. */ /* TODO:- One can get this using getSourceStreamId and getSourceComponent GlobalStreamId getSourceGlobalStreamid(); */ /** * Gets the id of the component that created this tuple. */ String getSourceComponent(); /** * Gets the id of the task that created this tuple. */ int getSourceTask(); /** * Gets the id of the stream that this tuple was emitted to. */ String getSourceStreamId(); /** * Gets the message id that associated with this tuple. */ /* TODO:- does anyone use this MessageId getMessageId(); */ /** * Resets the tuple values to null * TODO:- Is this needed */ void resetValues(); }