# Interface FlowAction<P extends FlowParameters>

Type Parameters:
  `P` - Parameter type for the dataflow action. Should be `FlowParameters.None` if the action does not have parameters.

@Incubating public interface FlowAction<P extends FlowParameters>
A dataflow action.

A parameterized and isolated piece of work that becomes eligible for execution within a `dataflow scope` as soon as all of its input `parameters` become available.

Implementations can benefit from constructor injection of services using the `@Inject` annotation. Currently, only a small subset of services is supported:

- `ArchiveOperations` provides means to operate on archives such as ZIP or TAR files.
- `ExecOperations` provides means to execute external processes.
- `FileSystemOperations` provides means to operate on the file system.

    /**
     * Plays a given {@link Parameters#getMediaFile() media file} using {@code ffplay}.
     */
    class FFPlay implements FlowAction<FFPlay.Parameters> {

        interface Parameters extends FlowParameters {
            @Input
            Property<File> getMediaFile();
        }

        private final ExecOperations execOperations;

        @Inject
        FFPlay(ExecOperations execOperations) {
            this.execOperations = execOperations;
        }

        @Override
        public void execute(Parameters parameters) throws Exception {
            execOperations.exec(spec -> {
                spec.commandLine(
                    "ffplay", "-nodisp", "-autoexit", "-hide_banner", "-loglevel", "quiet",
                    parameters.getMediaFile().get().getAbsolutePath()
                );
                spec.setIgnoreExitValue(true);
            });
        }
    }

Since:
  8.1
See Also:
  - `FlowScope`
  - `FlowProviders`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `execute(P parameters)`

- ## Method Details

  - ### execute

    void execute(P parameters) throws Exception
    Throws:
      `Exception`