// 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 streamer; import java.util.Set; /** * Element is basic building block for constructing data processing pipes. It has one or more contact pads, which can * be wired with other elements using links. */ public interface Element { /** * Name of pad for standard input. Should be set in all elements except pure * sinks. */ public static final String STDIN = "stdin"; /** * Name of pad for standard output. Should be set in all elements except pure * sources. */ public static final String STDOUT = "stdout"; /** * Get link connected to given pad. * * @param padName * Standard pads are "stdin" and "stdout". */ Link getLink(String padName); /** * Get pads of this element. */ Set<String> getPads(Direction direction); /** * Connect link to given pad. * * @param padName * a pad name. Standard pads are "stdin" and "stdout". */ void setLink(String padName, Link link, Direction direction); /** * Disconnect link from given pad. * * @param padName * Standard pads are "stdin" and "stdout". */ void dropLink(String padName); /** * Pull data from element and handle it. Element should ask one of it input * pads for data, handle data and push result to it sink(s), if any. * * @param block * block until data will be available, or do a slight delay at least, * when data is not available */ void poll(boolean block); /** * Handle incoming data. * * @param buf * a data * @param link * TODO */ void handleData(ByteBuffer buf, Link link); /** * Handle event. * * @param event * an event * @param direction * if IN, then send event to input pads, when OUT, then send to * output pads */ void handleEvent(Event event, Direction direction); /** * Get element ID. */ String getId(); /** * Validate element: check is all required pads are connected. */ void validate(); /** * Drop link. * * @param link a link to drop */ void dropLink(Link link); /** * Drop existing link and replace it by new link. */ void replaceLink(Link existingLink, Link newLink); }