| // 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); | |
| } |