// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.media.videoanalyzer.edge.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** Pipeline topology properties. */
@Fluent
public final class PipelineTopologyProperties {
    /*
     * An optional description of the pipeline topology. It is recommended that
     * the expected use of the topology to be described here.
     */
    @JsonProperty(value = "description")
    private String description;

    /*
     * List of the topology parameter declarations. Parameters declared here
     * can be referenced throughout the topology nodes through the use of
     * "${PARAMETER_NAME}" string pattern. Parameters can have optional default
     * values and can later be defined in individual instances of the pipeline.
     */
    @JsonProperty(value = "parameters")
    private List<ParameterDeclaration> parameters;

    /*
     * List of the topology source nodes. Source nodes enable external data to
     * be ingested by the pipeline.
     */
    @JsonProperty(value = "sources")
    private List<SourceNodeBase> sources;

    /*
     * List of the topology processor nodes. Processor nodes enable pipeline
     * data to be analyzed, processed or transformed.
     */
    @JsonProperty(value = "processors")
    private List<ProcessorNodeBase> processors;

    /*
     * List of the topology sink nodes. Sink nodes allow pipeline data to be
     * stored or exported.
     */
    @JsonProperty(value = "sinks")
    private List<SinkNodeBase> sinks;

    /**
     * Get the description property: An optional description of the pipeline topology. It is recommended that the
     * expected use of the topology to be described here.
     *
     * @return the description value.
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Set the description property: An optional description of the pipeline topology. It is recommended that the
     * expected use of the topology to be described here.
     *
     * @param description the description value to set.
     * @return the PipelineTopologyProperties object itself.
     */
    public PipelineTopologyProperties setDescription(String description) {
        this.description = description;
        return this;
    }

    /**
     * Get the parameters property: List of the topology parameter declarations. Parameters declared here can be
     * referenced throughout the topology nodes through the use of "${PARAMETER_NAME}" string pattern. Parameters can
     * have optional default values and can later be defined in individual instances of the pipeline.
     *
     * @return the parameters value.
     */
    public List<ParameterDeclaration> getParameters() {
        return this.parameters;
    }

    /**
     * Set the parameters property: List of the topology parameter declarations. Parameters declared here can be
     * referenced throughout the topology nodes through the use of "${PARAMETER_NAME}" string pattern. Parameters can
     * have optional default values and can later be defined in individual instances of the pipeline.
     *
     * @param parameters the parameters value to set.
     * @return the PipelineTopologyProperties object itself.
     */
    public PipelineTopologyProperties setParameters(List<ParameterDeclaration> parameters) {
        this.parameters = parameters;
        return this;
    }

    /**
     * Get the sources property: List of the topology source nodes. Source nodes enable external data to be ingested by
     * the pipeline.
     *
     * @return the sources value.
     */
    public List<SourceNodeBase> getSources() {
        return this.sources;
    }

    /**
     * Set the sources property: List of the topology source nodes. Source nodes enable external data to be ingested by
     * the pipeline.
     *
     * @param sources the sources value to set.
     * @return the PipelineTopologyProperties object itself.
     */
    public PipelineTopologyProperties setSources(List<SourceNodeBase> sources) {
        this.sources = sources;
        return this;
    }

    /**
     * Get the processors property: List of the topology processor nodes. Processor nodes enable pipeline data to be
     * analyzed, processed or transformed.
     *
     * @return the processors value.
     */
    public List<ProcessorNodeBase> getProcessors() {
        return this.processors;
    }

    /**
     * Set the processors property: List of the topology processor nodes. Processor nodes enable pipeline data to be
     * analyzed, processed or transformed.
     *
     * @param processors the processors value to set.
     * @return the PipelineTopologyProperties object itself.
     */
    public PipelineTopologyProperties setProcessors(List<ProcessorNodeBase> processors) {
        this.processors = processors;
        return this;
    }

    /**
     * Get the sinks property: List of the topology sink nodes. Sink nodes allow pipeline data to be stored or exported.
     *
     * @return the sinks value.
     */
    public List<SinkNodeBase> getSinks() {
        return this.sinks;
    }

    /**
     * Set the sinks property: List of the topology sink nodes. Sink nodes allow pipeline data to be stored or exported.
     *
     * @param sinks the sinks value to set.
     * @return the PipelineTopologyProperties object itself.
     */
    public PipelineTopologyProperties setSinks(List<SinkNodeBase> sinks) {
        this.sinks = sinks;
        return this;
    }
}
