= How-to create your own port-kinds =

A port kind characterizes a port. Simple examples of port kinds are (1) the UseInterface and
ProvideInterface kinds which describe client/server ports and (2) PushPublisher which describe a data
publisher port for a given data type. In the first case, the port is typed with the interface that is
provided or required, in the second case, the port is typed with datatype.

Although it does not formally define its semantics, each port kind should be associated with a
description of the intention behind it. A port kind is always associated with a mapping rule
that describes which interface a port provides and/or requires when in function
of its type (and/or additional information, e.g. coming from a MARTE stereotype).
On the model level, a port kind is first a stereotyped class. It can be created with the SW Designer palette.

The associated mapping rule is defined defined by means of Java code. You have to create a plugin
that defines the (plug-in) extension port-mapping provided by the FCM profile plugin. The extension
contains the (unqualified) name of the port kind and associated rules for the mapping.

The class must implement the interface FCM.util.IMappingRule, i.e. the operations getProvided,
getRequired and needsTransaction. The former two return the provided (required) interface in function
of the port type. The latter indicates whether the calculation of one of these (potentially) modifies
the model by creating/or updating a derived interface and thus requires a transaction.
Examples can be found in the plug-in org.eclipse.papyrus.designer.components.transformation.stdmappingRules.
