blob: e78e301285675630726420d0d7661b9915495367 [file] [log] [blame]
// 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);
}