/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.model.api;
import java.util.List;
import java.util.Set;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationDefinition;
import de.rcenvironment.core.component.model.configuration.api.ConfigurationExtensionDefinition;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinition;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinitionsProvider;
import de.rcenvironment.core.datamodel.api.DataType;
import de.rcenvironment.core.datamodel.types.api.NotAValueTD;
/**
* Represents the part of a component that is "anchored" in a workflow. Several
* {@link ComponentRevision}s may be suitable to be selected for the same {@link ComponentInterface}
* .
*
* In the user interface, available {@link ComponentInterface}s are shown as top-level elements in
* the workflow editor palette.
*
* @author Robert Mischke
* @author Doreen Seider
*/
public interface ComponentInterface {
/**
* @return the end-user name of this "component"
*/
String getDisplayName();
/**
* @return the name of the group/category to show this "component" under
*/
String getGroupName();
/**
* @return The MD5 hash as a 32 character hex string of the concatenated icons.
*/
String getIconHash();
/**
* @return 16x16 icon data (TODO specify format)
*/
byte[] getIcon16();
/**
* @return 24x24 icon data (TODO specify format)
*/
byte[] getIcon24();
/**
* @return 32x32 icon data (TODO specify format)
*/
byte[] getIcon32();
/**
* @return color of component
*/
ComponentColor getColor();
/**
* @return size of component
*/
ComponentSize getSize();
/**
* @return shape of component
*/
ComponentShape getShape();
/**
* @return the default identifier under which the component is registered; may be
* removed/replaced after migration
*/
String getIdentifier();
/**
* @return all of the identifiers, under which the component is registered. It includes the
* default identifier and mainly, deprecated ones; may be removed/replaced after
* migration
*/
List<String> getIdentifiers();
/**
* @return version information equivalent to {@link ComponentDescription#getVersion()} id; may
* be removed/replaced after migration
*/
String getVersion();
/**
* @return {@link EndpointDefinitionsProvider} providing static and dynamic inpout
* {@link EndpointDefinition}s
*/
EndpointDefinitionsProvider getInputDefinitionsProvider();
/**
* @return {@link EndpointDefinitionsProvider} providing static and dynamic outpout
* {@link EndpointDefinition}s
*/
EndpointDefinitionsProvider getOutputDefinitionsProvider();
/**
* @return information about the component's configuration options
*/
ConfigurationDefinition getConfigurationDefinition();
/**
* @return information about extended configuration options of a component
*/
Set<ConfigurationExtensionDefinition> getConfigurationExtensionDefinitions();
/**
* @return <code>true</code> if the component can technically only be executed locally,
* otherwise <code>false</code>
*/
boolean getLocalExecutionOnly();
/**
* @return <code>true</code> if the component should be disposed workflow disposal,
* <code>false</code> if immediately when the component had finished (default behavior)
*/
boolean getPerformLazyDisposal();
/**
* @return <code>true</code> if the component is marked as deprecated and should not be used
* anymore as it will be removed in later versions
*/
boolean getIsDeprecated();
/**
* @return <code>true</code> if the component can handle incoming {@link TypedDatum}s of
* {@link DataType} {@link NotAValueTD}, otherwise <code>false</code>
*/
boolean getCanHandleNotAValueDataTypes();
/**
* @return <code>true</code> if {@link TypedDatum}s of {@link DataType} {@link NotAValueTD} must
* not pass the component, otherwise <code>false</code>
*/
boolean getIsLoopDriver();
/**
* @return hash of the documentation folder for the component or an empty string if it doesn't
* exist.
*/
String getDocumentationHash();
}