/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.model.endpoint.api; import java.util.List; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.datamodel.api.EndpointCharacter; import de.rcenvironment.core.datamodel.api.EndpointType; import de.rcenvironment.core.datamodel.api.TypedDatum; /** * Represents one endpoint of a component. * * @author Doreen Seider * @author Sascha Zur */ public interface EndpointDefinition extends EndpointGroupDefinition { /** * Attributes an input can have. * * @author Doreen Seider */ enum InputDatumHandling { /** The input value will be consumed by the component. Input values can be queued. */ Queue("Queue (consumed)"), /** The input value will be consumed by the component. Input values must not be queued. */ Single("Single (consumed)"), /** * The input value won't be consumed by the component. Values must not be sent multiple times within one inner loop/workflow run. * This value is available for the component during the entire inner loop/workflow run. If a another value is sent, it is an error * and the workflow will fail. */ Constant("Constant (not consumed)"); private String displayName; InputDatumHandling(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } } /** * Attributes an input can have. * * @author Doreen Seider */ enum InputExecutionContraint { /** * The input is required, no matter if it is connected to an output or not. */ Required("Required"), /** * The input is considered as required if it is connected to an output. */ RequiredIfConnected("Required if connected"), /** * It is not required If input value is available, the value will be provided to the component othwise not. The component will run * in either way. */ NotRequired("Not required"), /** * There is not execution constraint as it is delegated to the parent group. Thus, it is only valid if input/input group belongs to * an(other) input group. */ None("-"); private String displayName; InputExecutionContraint(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } } /** * @return <code>true</code> if it is a static endpoint, <code>false</code> otherwise */ boolean isStatic(); /** * @return <code>true</code> if endpoint is not modifiable, <code>false</code> otherwise */ boolean isReadOnly(); /** * @return <code>true</code> if endpoint name is not modifiable, <code>false</code> otherwise */ boolean isNameReadOnly(); /** * @return {@link DataTypes}s which are valid for this endpoint */ List<DataType> getPossibleDataTypes(); /** * @return default {@link TypedDatum} of this endpoint */ DataType getDefaultDataType(); /** * @return {@link InputDatumHandling}s which are valid for this endpoint. Is empty for outputs. */ List<InputDatumHandling> getInputDatumOptions(); /** * @return default {@link InputDatumHandling} of this endpoint. Is <code>null</code> for outputs. */ InputDatumHandling getDefaultInputDatumHandling(); /** * @return {@link InputExecutionContraint}s which are valid for this endpoint. Is empty for outputs. */ List<InputExecutionContraint> getInputExecutionConstraintOptions(); /** * @return default {@link InputExecutionContraint} of this endpoint. Is <code>null</code> for outputs. */ InputExecutionContraint getDefaultInputExecutionConstraint(); /** * @return {@link EndpointType#INPUT} if is an input, {@link EndpointType#OUTPUT} if is an output */ EndpointType getEndpointType(); /** * @return the {@link EndpointCharacter} of this endpoint */ EndpointCharacter getEndpointCharacter(); /** * @return meta data description of this endpoint */ EndpointMetaDataDefinition getMetaDataDefinition(); /** * @return definitions of initial dynamic endpoints (will be used if no one was specified during configuration) */ List<InitialDynamicEndpointDefinition> getInitialDynamicEndpointDefinitions(); }