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

org.apache.nifi.flowfile.FlowFile Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show 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.nifi.flowfile;

import java.util.Map;

/**
 * 

* A flow file is a logical notion of an item in a flow with its associated * attributes and identity which can be used as a reference for its actual * content.

* * All FlowFile implementations must be Immutable - Thread safe. */ public interface FlowFile extends Comparable { /** * @return the unique identifier for this flow file which is guaranteed * to be unique within a single running instance of nifi. This identifier * should not be used for true universal unique type needs. For that consider * using the attribute found in the flow file's attribute map keyed by * {@link org.apache.nifi.flowfile.attributes.CoreAttributes.UUID CoreAttributes.UUID}. * For example, by calling getAttribute(CoreAttributes.UUID.key()). */ long getId(); /** * @return the date at which the flow file entered the flow */ long getEntryDate(); /** * @return the date at which the origin of this FlowFile entered the flow. * For example, if FlowFile Z were derived from FlowFile Y and FlowFile Y * was derived from FlowFile X, this date would be the entryDate (see * {@link #getEntryDate()} of FlowFile X. */ long getLineageStartDate(); /** * Returns a 64-bit integer that indicates the order in which the FlowFile was added to the * flow with respect to other FlowFiles that have the same last lineage start date. * I.e., if two FlowFiles return the same value for {@link #getLineageStartDate()}, the order * in which those FlowFiles were added to the flow can be determined by looking at the result of * this method. However, no guarantee is made by this method about the ordering of FlowFiles * that have different values for the {@link #getLineageStartDate()} method. * * @return the index that can be used to compare two FlowFiles with the same lineage start date * to understand the order in which the two FlowFiles were enqueued. */ long getLineageStartIndex(); /** * @return the time at which the FlowFile was most recently added to a * FlowFile queue, or {@code null} if the FlowFile has never been enqueued. * This value will always be populated before it is passed to a * FlowFilePrioritizer */ Long getLastQueueDate(); /** * Returns a 64-bit integer that indicates the order in which the FlowFile was added to the * FlowFile queue with respect to other FlowFiles that have the same last queue date. * I.e., if two FlowFiles return the same value for {@link #getLastQueueDate()}, the order * in which those FlowFiles were enqueued can be determined by looking at the result of * this method. However, no guarantee is made by this method about the ordering of FlowFiles * that have different values for the {@link #getLastQueueDate()} method. * * @return the index that can be used to compare two FlowFiles with the same last queue date * to understand the order in which the two FlowFiles were enqueued. */ long getQueueDateIndex(); /** * @return true if flow file is currently penalized; false otherwise; */ boolean isPenalized(); /** * Obtains the attribute value for the given key * * @param key of the attribute * @return value if found; null otherwise */ String getAttribute(String key); /** * @return size of flow file contents in bytes */ long getSize(); /** * @return an unmodifiable map of the flow file attributes */ Map getAttributes(); // All classes defined in an interface are public static, but keeping the definition to be explicit public static class KeyValidator { public static String validateKey(final String key) { // We used to validate the key by disallowing a handful of keywords, but this requirement no longer exists. // Therefore this method simply verifies that the key is not empty. if (key == null) { throw new IllegalArgumentException("Invalid attribute key: null"); } if (key.trim().isEmpty()) { throw new IllegalArgumentException("Invalid attribute key: "); } return key; } public static boolean isValid(final String key) { return key != null && !key.trim().isEmpty(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy