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

package com.azure.health.insights.clinicalmatching.models;

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

/** A filter defining a subset of clinical trials from a given clinical trial registry (e.g. clinicaltrials.gov). */
@Fluent
public final class ClinicalTrialRegistryFilter {
    /*
     * Trials with any of the given medical conditions will be included in the selection (provided that other
     * limitations are satisfied).
     * Leaving this list empty will not limit the medical conditions.
     */
    @JsonProperty(value = "conditions")
    private List<String> conditions;

    /*
     * Trials with any of the given study types will be included in the selection (provided that other limitations are
     * satisfied).
     * Leaving this list empty will not limit the study types.
     */
    @JsonProperty(value = "studyTypes")
    private List<ClinicalTrialStudyType> studyTypes;

    /*
     * Trials with any of the given recruitment statuses will be included in the selection (provided that other
     * limitations are satisfied).
     * Leaving this list empty will not limit the recruitment statuses.
     */
    @JsonProperty(value = "recruitmentStatuses")
    private List<ClinicalTrialRecruitmentStatus> recruitmentStatuses;

    /*
     * Trials with any of the given sponsors will be included in the selection (provided that other limitations are
     * satisfied).
     * Leaving this list empty will not limit the sponsors.
     */
    @JsonProperty(value = "sponsors")
    private List<String> sponsors;

    /*
     * Trials with any of the given phases will be included in the selection (provided that other limitations are
     * satisfied).
     * Leaving this list empty will not limit the phases.
     */
    @JsonProperty(value = "phases")
    private List<ClinicalTrialPhase> phases;

    /*
     * Trials with any of the given purposes will be included in the selection (provided that other limitations are
     * satisfied).
     * Leaving this list empty will not limit the purposes.
     */
    @JsonProperty(value = "purposes")
    private List<ClinicalTrialPurpose> purposes;

    /*
     * Trials with any of the given identifiers will be included in the selection (provided that other limitations are
     * satisfied).
     * Leaving this list empty will not limit the trial identifiers.
     */
    @JsonProperty(value = "ids")
    private List<String> ids;

    /*
     * Trials with any of the given sources will be included in the selection (provided that other limitations are
     * satisfied).
     * Leaving this list empty will not limit the sources.
     */
    @JsonProperty(value = "sources")
    private List<ClinicalTrialSource> sources;

    /*
     * Trials with any of the given facility names will be included in the selection (provided that other limitations
     * are satisfied).
     * Leaving this list empty will not limit the trial facility names.
     */
    @JsonProperty(value = "facilityNames")
    private List<String> facilityNames;

    /*
     * Trials with any of the given facility locations will be included in the selection (provided that other
     * limitations are satisfied).
     * Leaving this list empty will not limit the trial facility locations.
     */
    @JsonProperty(value = "facilityLocations")
    private List<GeographicLocation> facilityLocations;

    /*
     * Trials with any of the given facility area boundaries will be included in the selection (provided that other
     * limitations are satisfied).
     * Leaving this list empty will not limit the trial facility area boundaries.
     */
    @JsonProperty(value = "facilityAreas")
    private List<GeographicArea> facilityAreas;

    /** Creates an instance of ClinicalTrialRegistryFilter class. */
    public ClinicalTrialRegistryFilter() {}

    /**
     * Get the conditions property: Trials with any of the given medical conditions will be included in the selection
     * (provided that other limitations are satisfied). Leaving this list empty will not limit the medical conditions.
     *
     * @return the conditions value.
     */
    public List<String> getConditions() {
        return this.conditions;
    }

    /**
     * Set the conditions property: Trials with any of the given medical conditions will be included in the selection
     * (provided that other limitations are satisfied). Leaving this list empty will not limit the medical conditions.
     *
     * @param conditions the conditions value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setConditions(List<String> conditions) {
        this.conditions = conditions;
        return this;
    }

    /**
     * Get the studyTypes property: Trials with any of the given study types will be included in the selection (provided
     * that other limitations are satisfied). Leaving this list empty will not limit the study types.
     *
     * @return the studyTypes value.
     */
    public List<ClinicalTrialStudyType> getStudyTypes() {
        return this.studyTypes;
    }

    /**
     * Set the studyTypes property: Trials with any of the given study types will be included in the selection (provided
     * that other limitations are satisfied). Leaving this list empty will not limit the study types.
     *
     * @param studyTypes the studyTypes value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setStudyTypes(List<ClinicalTrialStudyType> studyTypes) {
        this.studyTypes = studyTypes;
        return this;
    }

    /**
     * Get the recruitmentStatuses property: Trials with any of the given recruitment statuses will be included in the
     * selection (provided that other limitations are satisfied). Leaving this list empty will not limit the recruitment
     * statuses.
     *
     * @return the recruitmentStatuses value.
     */
    public List<ClinicalTrialRecruitmentStatus> getRecruitmentStatuses() {
        return this.recruitmentStatuses;
    }

    /**
     * Set the recruitmentStatuses property: Trials with any of the given recruitment statuses will be included in the
     * selection (provided that other limitations are satisfied). Leaving this list empty will not limit the recruitment
     * statuses.
     *
     * @param recruitmentStatuses the recruitmentStatuses value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setRecruitmentStatuses(
            List<ClinicalTrialRecruitmentStatus> recruitmentStatuses) {
        this.recruitmentStatuses = recruitmentStatuses;
        return this;
    }

    /**
     * Get the sponsors property: Trials with any of the given sponsors will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the sponsors.
     *
     * @return the sponsors value.
     */
    public List<String> getSponsors() {
        return this.sponsors;
    }

    /**
     * Set the sponsors property: Trials with any of the given sponsors will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the sponsors.
     *
     * @param sponsors the sponsors value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setSponsors(List<String> sponsors) {
        this.sponsors = sponsors;
        return this;
    }

    /**
     * Get the phases property: Trials with any of the given phases will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the phases.
     *
     * @return the phases value.
     */
    public List<ClinicalTrialPhase> getPhases() {
        return this.phases;
    }

    /**
     * Set the phases property: Trials with any of the given phases will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the phases.
     *
     * @param phases the phases value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setPhases(List<ClinicalTrialPhase> phases) {
        this.phases = phases;
        return this;
    }

    /**
     * Get the purposes property: Trials with any of the given purposes will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the purposes.
     *
     * @return the purposes value.
     */
    public List<ClinicalTrialPurpose> getPurposes() {
        return this.purposes;
    }

    /**
     * Set the purposes property: Trials with any of the given purposes will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the purposes.
     *
     * @param purposes the purposes value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setPurposes(List<ClinicalTrialPurpose> purposes) {
        this.purposes = purposes;
        return this;
    }

    /**
     * Get the ids property: Trials with any of the given identifiers will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the trial identifiers.
     *
     * @return the ids value.
     */
    public List<String> getIds() {
        return this.ids;
    }

    /**
     * Set the ids property: Trials with any of the given identifiers will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the trial identifiers.
     *
     * @param ids the ids value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setIds(List<String> ids) {
        this.ids = ids;
        return this;
    }

    /**
     * Get the sources property: Trials with any of the given sources will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the sources.
     *
     * @return the sources value.
     */
    public List<ClinicalTrialSource> getSources() {
        return this.sources;
    }

    /**
     * Set the sources property: Trials with any of the given sources will be included in the selection (provided that
     * other limitations are satisfied). Leaving this list empty will not limit the sources.
     *
     * @param sources the sources value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setSources(List<ClinicalTrialSource> sources) {
        this.sources = sources;
        return this;
    }

    /**
     * Get the facilityNames property: Trials with any of the given facility names will be included in the selection
     * (provided that other limitations are satisfied). Leaving this list empty will not limit the trial facility names.
     *
     * @return the facilityNames value.
     */
    public List<String> getFacilityNames() {
        return this.facilityNames;
    }

    /**
     * Set the facilityNames property: Trials with any of the given facility names will be included in the selection
     * (provided that other limitations are satisfied). Leaving this list empty will not limit the trial facility names.
     *
     * @param facilityNames the facilityNames value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setFacilityNames(List<String> facilityNames) {
        this.facilityNames = facilityNames;
        return this;
    }

    /**
     * Get the facilityLocations property: Trials with any of the given facility locations will be included in the
     * selection (provided that other limitations are satisfied). Leaving this list empty will not limit the trial
     * facility locations.
     *
     * @return the facilityLocations value.
     */
    public List<GeographicLocation> getFacilityLocations() {
        return this.facilityLocations;
    }

    /**
     * Set the facilityLocations property: Trials with any of the given facility locations will be included in the
     * selection (provided that other limitations are satisfied). Leaving this list empty will not limit the trial
     * facility locations.
     *
     * @param facilityLocations the facilityLocations value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setFacilityLocations(List<GeographicLocation> facilityLocations) {
        this.facilityLocations = facilityLocations;
        return this;
    }

    /**
     * Get the facilityAreas property: Trials with any of the given facility area boundaries will be included in the
     * selection (provided that other limitations are satisfied). Leaving this list empty will not limit the trial
     * facility area boundaries.
     *
     * @return the facilityAreas value.
     */
    public List<GeographicArea> getFacilityAreas() {
        return this.facilityAreas;
    }

    /**
     * Set the facilityAreas property: Trials with any of the given facility area boundaries will be included in the
     * selection (provided that other limitations are satisfied). Leaving this list empty will not limit the trial
     * facility area boundaries.
     *
     * @param facilityAreas the facilityAreas value to set.
     * @return the ClinicalTrialRegistryFilter object itself.
     */
    public ClinicalTrialRegistryFilter setFacilityAreas(List<GeographicArea> facilityAreas) {
        this.facilityAreas = facilityAreas;
        return this;
    }
}
