/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 */

package com.microsoft.azure.cognitiveservices.language.luis.authoring.models;

import java.util.Map;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * Exported Model - An exported LUIS Application.
 */
public class LuisApp {
    /**
     * Unmatched properties from the message are deserialized this collection.
     */
    private Map<String, Object> additionalProperties;

    /**
     * The name of the application.
     */
    @JsonProperty(value = "name")
    private String name;

    /**
     * The version ID of the application that was exported.
     */
    @JsonProperty(value = "versionId")
    private String versionId;

    /**
     * The description of the application.
     */
    @JsonProperty(value = "desc")
    private String desc;

    /**
     * The culture of the application. E.g.: en-us.
     */
    @JsonProperty(value = "culture")
    private String culture;

    /**
     * List of intents.
     */
    @JsonProperty(value = "intents")
    private List<HierarchicalModel> intents;

    /**
     * List of entities.
     */
    @JsonProperty(value = "entities")
    private List<HierarchicalModel> entities;

    /**
     * List of list entities.
     */
    @JsonProperty(value = "closedLists")
    private List<ClosedList> closedLists;

    /**
     * List of composite entities.
     */
    @JsonProperty(value = "composites")
    private List<HierarchicalModel> composites;

    /**
     * List of hierarchical entities.
     */
    @JsonProperty(value = "hierarchicals")
    private List<HierarchicalModel> hierarchicals;

    /**
     * List of Pattern.Any entities.
     */
    @JsonProperty(value = "patternAnyEntities")
    private List<PatternAny> patternAnyEntities;

    /**
     * List of regular expression entities.
     */
    @JsonProperty(value = "regex_entities")
    private List<RegexEntity> regexEntities;

    /**
     * List of prebuilt entities.
     */
    @JsonProperty(value = "prebuiltEntities")
    private List<PrebuiltEntity> prebuiltEntities;

    /**
     * List of pattern features.
     */
    @JsonProperty(value = "regex_features")
    private List<JSONRegexFeature> regexFeatures;

    /**
     * List of model features.
     */
    @JsonProperty(value = "phraselists")
    private List<JSONModelFeature> phraselists;

    /**
     * List of patterns.
     */
    @JsonProperty(value = "patterns")
    private List<PatternRule> patterns;

    /**
     * List of example utterances.
     */
    @JsonProperty(value = "utterances")
    private List<JSONUtterance> utterances;

    /**
     * Get the additionalProperties value.
     *
     * @return the additionalProperties value
     */
    public Map<String, Object> additionalProperties() {
        return this.additionalProperties;
    }

    /**
     * Set the additionalProperties value.
     *
     * @param additionalProperties the additionalProperties value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withAdditionalProperties(Map<String, Object> additionalProperties) {
        this.additionalProperties = additionalProperties;
        return this;
    }

    /**
     * Get the name value.
     *
     * @return the name value
     */
    public String name() {
        return this.name;
    }

    /**
     * Set the name value.
     *
     * @param name the name value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withName(String name) {
        this.name = name;
        return this;
    }

    /**
     * Get the versionId value.
     *
     * @return the versionId value
     */
    public String versionId() {
        return this.versionId;
    }

    /**
     * Set the versionId value.
     *
     * @param versionId the versionId value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withVersionId(String versionId) {
        this.versionId = versionId;
        return this;
    }

    /**
     * Get the desc value.
     *
     * @return the desc value
     */
    public String desc() {
        return this.desc;
    }

    /**
     * Set the desc value.
     *
     * @param desc the desc value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withDesc(String desc) {
        this.desc = desc;
        return this;
    }

    /**
     * Get the culture value.
     *
     * @return the culture value
     */
    public String culture() {
        return this.culture;
    }

    /**
     * Set the culture value.
     *
     * @param culture the culture value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withCulture(String culture) {
        this.culture = culture;
        return this;
    }

    /**
     * Get the intents value.
     *
     * @return the intents value
     */
    public List<HierarchicalModel> intents() {
        return this.intents;
    }

    /**
     * Set the intents value.
     *
     * @param intents the intents value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withIntents(List<HierarchicalModel> intents) {
        this.intents = intents;
        return this;
    }

    /**
     * Get the entities value.
     *
     * @return the entities value
     */
    public List<HierarchicalModel> entities() {
        return this.entities;
    }

    /**
     * Set the entities value.
     *
     * @param entities the entities value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withEntities(List<HierarchicalModel> entities) {
        this.entities = entities;
        return this;
    }

    /**
     * Get the closedLists value.
     *
     * @return the closedLists value
     */
    public List<ClosedList> closedLists() {
        return this.closedLists;
    }

    /**
     * Set the closedLists value.
     *
     * @param closedLists the closedLists value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withClosedLists(List<ClosedList> closedLists) {
        this.closedLists = closedLists;
        return this;
    }

    /**
     * Get the composites value.
     *
     * @return the composites value
     */
    public List<HierarchicalModel> composites() {
        return this.composites;
    }

    /**
     * Set the composites value.
     *
     * @param composites the composites value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withComposites(List<HierarchicalModel> composites) {
        this.composites = composites;
        return this;
    }

    /**
     * Get the hierarchicals value.
     *
     * @return the hierarchicals value
     */
    public List<HierarchicalModel> hierarchicals() {
        return this.hierarchicals;
    }

    /**
     * Set the hierarchicals value.
     *
     * @param hierarchicals the hierarchicals value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withHierarchicals(List<HierarchicalModel> hierarchicals) {
        this.hierarchicals = hierarchicals;
        return this;
    }

    /**
     * Get the patternAnyEntities value.
     *
     * @return the patternAnyEntities value
     */
    public List<PatternAny> patternAnyEntities() {
        return this.patternAnyEntities;
    }

    /**
     * Set the patternAnyEntities value.
     *
     * @param patternAnyEntities the patternAnyEntities value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withPatternAnyEntities(List<PatternAny> patternAnyEntities) {
        this.patternAnyEntities = patternAnyEntities;
        return this;
    }

    /**
     * Get the regexEntities value.
     *
     * @return the regexEntities value
     */
    public List<RegexEntity> regexEntities() {
        return this.regexEntities;
    }

    /**
     * Set the regexEntities value.
     *
     * @param regexEntities the regexEntities value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withRegexEntities(List<RegexEntity> regexEntities) {
        this.regexEntities = regexEntities;
        return this;
    }

    /**
     * Get the prebuiltEntities value.
     *
     * @return the prebuiltEntities value
     */
    public List<PrebuiltEntity> prebuiltEntities() {
        return this.prebuiltEntities;
    }

    /**
     * Set the prebuiltEntities value.
     *
     * @param prebuiltEntities the prebuiltEntities value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withPrebuiltEntities(List<PrebuiltEntity> prebuiltEntities) {
        this.prebuiltEntities = prebuiltEntities;
        return this;
    }

    /**
     * Get the regexFeatures value.
     *
     * @return the regexFeatures value
     */
    public List<JSONRegexFeature> regexFeatures() {
        return this.regexFeatures;
    }

    /**
     * Set the regexFeatures value.
     *
     * @param regexFeatures the regexFeatures value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withRegexFeatures(List<JSONRegexFeature> regexFeatures) {
        this.regexFeatures = regexFeatures;
        return this;
    }

    /**
     * Get the phraselists value.
     *
     * @return the phraselists value
     */
    public List<JSONModelFeature> phraselists() {
        return this.phraselists;
    }

    /**
     * Set the phraselists value.
     *
     * @param phraselists the phraselists value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withPhraselists(List<JSONModelFeature> phraselists) {
        this.phraselists = phraselists;
        return this;
    }

    /**
     * Get the patterns value.
     *
     * @return the patterns value
     */
    public List<PatternRule> patterns() {
        return this.patterns;
    }

    /**
     * Set the patterns value.
     *
     * @param patterns the patterns value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withPatterns(List<PatternRule> patterns) {
        this.patterns = patterns;
        return this;
    }

    /**
     * Get the utterances value.
     *
     * @return the utterances value
     */
    public List<JSONUtterance> utterances() {
        return this.utterances;
    }

    /**
     * Set the utterances value.
     *
     * @param utterances the utterances value to set
     * @return the LuisApp object itself.
     */
    public LuisApp withUtterances(List<JSONUtterance> utterances) {
        this.utterances = utterances;
        return this;
    }

}
