/**
 * 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;

import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.AddIntentOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListIntentsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListEntitiesOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListHierarchicalEntitiesOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListCompositeEntitiesOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListClosedListsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListPrebuiltsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListModelsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ExamplesMethodOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateIntentOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.DeleteIntentOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateHierarchicalEntityOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.PatchClosedListOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListIntentSuggestionsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListEntitySuggestionsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.AddCustomPrebuiltDomainModelsOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateHierarchicalEntityChildOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.AddCompositeEntityChildOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListRegexEntityInfosOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ListPatternAnyEntityInfosOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreateEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreatePrebuiltEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreateClosedListEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreateRegexEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreateCompositeEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreatePatternAnyEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreateHierarchicalEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CreateCustomPrebuiltEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.AddExplicitListItemOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdatePrebuiltEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateClosedListEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateRegexEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateCompositeEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdatePatternAnyEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateHierarchicalEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateCustomPrebuiltEntityRoleOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.UpdateExplicitListItemOptionalParameter;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.AvailablePrebuiltEntityModel;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ChildEntityModelCreateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ClosedListEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ClosedListModelCreateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ClosedListModelUpdateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CompositeEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CompositeEntityModel;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.CustomPrebuiltModel;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.EntitiesSuggestionExample;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.EntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.EntityModelCreateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.EntityModelUpdateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.EntityRole;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ErrorResponseException;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ExplicitListItem;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.HierarchicalChildEntity;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.HierarchicalEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.IntentClassifier;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.IntentsSuggestionExample;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.LabelTextObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ModelFeatureInformation;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.ModelInfoResponse;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.NDepthEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.OperationStatus;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.PatternAnyEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.PatternAnyModelCreateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.PatternAnyModelUpdateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.PrebuiltDomainModelCreateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.PrebuiltEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.RegexEntityExtractor;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.RegexModelCreateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.RegexModelUpdateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.WordListBaseUpdateObject;
import com.microsoft.azure.cognitiveservices.language.luis.authoring.models.WordListObject;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import rx.Observable;

/**
 * An instance of this class provides access to all the operations defined
 * in Models.
 */
public interface Models {
    /**
     * Adds an intent to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param addIntentOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addIntent(UUID appId, String versionId, AddIntentOptionalParameter addIntentOptionalParameter);

    /**
     * Adds an intent to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param addIntentOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addIntentAsync(UUID appId, String versionId, AddIntentOptionalParameter addIntentOptionalParameter);

    /**
     * Adds an intent to a version of the application.
     *
     * @return the first stage of the addIntent call
     */
    ModelsAddIntentDefinitionStages.WithAppId addIntent();

    /**
     * Grouping of addIntent definition stages.
     */
    interface ModelsAddIntentDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsAddIntentDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * Name of the new entity extractor.
             *
             * @return next definition stage
             */
            ModelsAddIntentDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsAddIntentDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of addIntent definition.
     */
    interface ModelsAddIntentDefinition extends
        ModelsAddIntentDefinitionStages.WithAppId,
        ModelsAddIntentDefinitionStages.WithVersionId,
        ModelsAddIntentDefinitionStages.WithExecute {
    }

    /**
     * Gets information about the intent models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listIntentsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;IntentClassifier&gt; object if successful.
     */
    List<IntentClassifier> listIntents(UUID appId, String versionId, ListIntentsOptionalParameter listIntentsOptionalParameter);

    /**
     * Gets information about the intent models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listIntentsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;IntentClassifier&gt; object
     */
    Observable<List<IntentClassifier>> listIntentsAsync(UUID appId, String versionId, ListIntentsOptionalParameter listIntentsOptionalParameter);

    /**
     * Gets information about the intent models in a version of the application.
     *
     * @return the first stage of the listIntents call
     */
    ModelsListIntentsDefinitionStages.WithAppId listIntents();

    /**
     * Grouping of listIntents definition stages.
     */
    interface ModelsListIntentsDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListIntentsDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListIntentsDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListIntentsDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListIntentsDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;IntentClassifier&gt; object if successful.
             */
            List<IntentClassifier> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;IntentClassifier&gt; object
             */
            Observable<List<IntentClassifier>> executeAsync();
        }
    }

    /**
     * The entirety of listIntents definition.
     */
    interface ModelsListIntentsDefinition extends
        ModelsListIntentsDefinitionStages.WithAppId,
        ModelsListIntentsDefinitionStages.WithVersionId,
        ModelsListIntentsDefinitionStages.WithExecute {
    }


    /**
     * Adds an entity extractor to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityModelCreateObject A model object containing the name of the new entity extractor and its children.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addEntity(UUID appId, String versionId, EntityModelCreateObject entityModelCreateObject);

    /**
     * Adds an entity extractor to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityModelCreateObject A model object containing the name of the new entity extractor and its children.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addEntityAsync(UUID appId, String versionId, EntityModelCreateObject entityModelCreateObject);


    /**
     * Gets information about all the simple entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listEntitiesOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;NDepthEntityExtractor&gt; object if successful.
     */
    List<NDepthEntityExtractor> listEntities(UUID appId, String versionId, ListEntitiesOptionalParameter listEntitiesOptionalParameter);

    /**
     * Gets information about all the simple entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listEntitiesOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;NDepthEntityExtractor&gt; object
     */
    Observable<List<NDepthEntityExtractor>> listEntitiesAsync(UUID appId, String versionId, ListEntitiesOptionalParameter listEntitiesOptionalParameter);

    /**
     * Gets information about all the simple entity models in a version of the application.
     *
     * @return the first stage of the listEntities call
     */
    ModelsListEntitiesDefinitionStages.WithAppId listEntities();

    /**
     * Grouping of listEntities definition stages.
     */
    interface ModelsListEntitiesDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListEntitiesDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListEntitiesDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListEntitiesDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListEntitiesDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;NDepthEntityExtractor&gt; object if successful.
             */
            List<NDepthEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;NDepthEntityExtractor&gt; object
             */
            Observable<List<NDepthEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listEntities definition.
     */
    interface ModelsListEntitiesDefinition extends
        ModelsListEntitiesDefinitionStages.WithAppId,
        ModelsListEntitiesDefinitionStages.WithVersionId,
        ModelsListEntitiesDefinitionStages.WithExecute {
    }

    /**
     * Gets information about all the hierarchical entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listHierarchicalEntitiesOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;HierarchicalEntityExtractor&gt; object if successful.
     */
    List<HierarchicalEntityExtractor> listHierarchicalEntities(UUID appId, String versionId, ListHierarchicalEntitiesOptionalParameter listHierarchicalEntitiesOptionalParameter);

    /**
     * Gets information about all the hierarchical entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listHierarchicalEntitiesOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;HierarchicalEntityExtractor&gt; object
     */
    Observable<List<HierarchicalEntityExtractor>> listHierarchicalEntitiesAsync(UUID appId, String versionId, ListHierarchicalEntitiesOptionalParameter listHierarchicalEntitiesOptionalParameter);

    /**
     * Gets information about all the hierarchical entity models in a version of the application.
     *
     * @return the first stage of the listHierarchicalEntities call
     */
    ModelsListHierarchicalEntitiesDefinitionStages.WithAppId listHierarchicalEntities();

    /**
     * Grouping of listHierarchicalEntities definition stages.
     */
    interface ModelsListHierarchicalEntitiesDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListHierarchicalEntitiesDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListHierarchicalEntitiesDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListHierarchicalEntitiesDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListHierarchicalEntitiesDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;HierarchicalEntityExtractor&gt; object if successful.
             */
            List<HierarchicalEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;HierarchicalEntityExtractor&gt; object
             */
            Observable<List<HierarchicalEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listHierarchicalEntities definition.
     */
    interface ModelsListHierarchicalEntitiesDefinition extends
        ModelsListHierarchicalEntitiesDefinitionStages.WithAppId,
        ModelsListHierarchicalEntitiesDefinitionStages.WithVersionId,
        ModelsListHierarchicalEntitiesDefinitionStages.WithExecute {
    }

    /**
     * Gets information about all the composite entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listCompositeEntitiesOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;CompositeEntityExtractor&gt; object if successful.
     */
    List<CompositeEntityExtractor> listCompositeEntities(UUID appId, String versionId, ListCompositeEntitiesOptionalParameter listCompositeEntitiesOptionalParameter);

    /**
     * Gets information about all the composite entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listCompositeEntitiesOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;CompositeEntityExtractor&gt; object
     */
    Observable<List<CompositeEntityExtractor>> listCompositeEntitiesAsync(UUID appId, String versionId, ListCompositeEntitiesOptionalParameter listCompositeEntitiesOptionalParameter);

    /**
     * Gets information about all the composite entity models in a version of the application.
     *
     * @return the first stage of the listCompositeEntities call
     */
    ModelsListCompositeEntitiesDefinitionStages.WithAppId listCompositeEntities();

    /**
     * Grouping of listCompositeEntities definition stages.
     */
    interface ModelsListCompositeEntitiesDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListCompositeEntitiesDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListCompositeEntitiesDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListCompositeEntitiesDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListCompositeEntitiesDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;CompositeEntityExtractor&gt; object if successful.
             */
            List<CompositeEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;CompositeEntityExtractor&gt; object
             */
            Observable<List<CompositeEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listCompositeEntities definition.
     */
    interface ModelsListCompositeEntitiesDefinition extends
        ModelsListCompositeEntitiesDefinitionStages.WithAppId,
        ModelsListCompositeEntitiesDefinitionStages.WithVersionId,
        ModelsListCompositeEntitiesDefinitionStages.WithExecute {
    }

    /**
     * Gets information about all the list entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listClosedListsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;ClosedListEntityExtractor&gt; object if successful.
     */
    List<ClosedListEntityExtractor> listClosedLists(UUID appId, String versionId, ListClosedListsOptionalParameter listClosedListsOptionalParameter);

    /**
     * Gets information about all the list entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listClosedListsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;ClosedListEntityExtractor&gt; object
     */
    Observable<List<ClosedListEntityExtractor>> listClosedListsAsync(UUID appId, String versionId, ListClosedListsOptionalParameter listClosedListsOptionalParameter);

    /**
     * Gets information about all the list entity models in a version of the application.
     *
     * @return the first stage of the listClosedLists call
     */
    ModelsListClosedListsDefinitionStages.WithAppId listClosedLists();

    /**
     * Grouping of listClosedLists definition stages.
     */
    interface ModelsListClosedListsDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListClosedListsDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListClosedListsDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListClosedListsDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListClosedListsDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;ClosedListEntityExtractor&gt; object if successful.
             */
            List<ClosedListEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;ClosedListEntityExtractor&gt; object
             */
            Observable<List<ClosedListEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listClosedLists definition.
     */
    interface ModelsListClosedListsDefinition extends
        ModelsListClosedListsDefinitionStages.WithAppId,
        ModelsListClosedListsDefinitionStages.WithVersionId,
        ModelsListClosedListsDefinitionStages.WithExecute {
    }


    /**
     * Adds a list entity model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param closedListModelCreateObject A model containing the name and words for the new list entity extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addClosedList(UUID appId, String versionId, ClosedListModelCreateObject closedListModelCreateObject);

    /**
     * Adds a list entity model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param closedListModelCreateObject A model containing the name and words for the new list entity extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addClosedListAsync(UUID appId, String versionId, ClosedListModelCreateObject closedListModelCreateObject);



    /**
     * Adds a list of prebuilt entities to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltExtractorNames An array of prebuilt entity extractor names.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;PrebuiltEntityExtractor&gt; object if successful.
     */
    List<PrebuiltEntityExtractor> addPrebuilt(UUID appId, String versionId, List<String> prebuiltExtractorNames);

    /**
     * Adds a list of prebuilt entities to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltExtractorNames An array of prebuilt entity extractor names.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;PrebuiltEntityExtractor&gt; object
     */
    Observable<List<PrebuiltEntityExtractor>> addPrebuiltAsync(UUID appId, String versionId, List<String> prebuiltExtractorNames);


    /**
     * Gets information about all the prebuilt entities in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listPrebuiltsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;PrebuiltEntityExtractor&gt; object if successful.
     */
    List<PrebuiltEntityExtractor> listPrebuilts(UUID appId, String versionId, ListPrebuiltsOptionalParameter listPrebuiltsOptionalParameter);

    /**
     * Gets information about all the prebuilt entities in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listPrebuiltsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;PrebuiltEntityExtractor&gt; object
     */
    Observable<List<PrebuiltEntityExtractor>> listPrebuiltsAsync(UUID appId, String versionId, ListPrebuiltsOptionalParameter listPrebuiltsOptionalParameter);

    /**
     * Gets information about all the prebuilt entities in a version of the application.
     *
     * @return the first stage of the listPrebuilts call
     */
    ModelsListPrebuiltsDefinitionStages.WithAppId listPrebuilts();

    /**
     * Grouping of listPrebuilts definition stages.
     */
    interface ModelsListPrebuiltsDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListPrebuiltsDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListPrebuiltsDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListPrebuiltsDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListPrebuiltsDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;PrebuiltEntityExtractor&gt; object if successful.
             */
            List<PrebuiltEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;PrebuiltEntityExtractor&gt; object
             */
            Observable<List<PrebuiltEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listPrebuilts definition.
     */
    interface ModelsListPrebuiltsDefinition extends
        ModelsListPrebuiltsDefinitionStages.WithAppId,
        ModelsListPrebuiltsDefinitionStages.WithVersionId,
        ModelsListPrebuiltsDefinitionStages.WithExecute {
    }


    /**
     * Gets all the available prebuilt entities in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;AvailablePrebuiltEntityModel&gt; object if successful.
     */
    List<AvailablePrebuiltEntityModel> listPrebuiltEntities(UUID appId, String versionId);

    /**
     * Gets all the available prebuilt entities in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;AvailablePrebuiltEntityModel&gt; object
     */
    Observable<List<AvailablePrebuiltEntityModel>> listPrebuiltEntitiesAsync(UUID appId, String versionId);


    /**
     * Gets information about all the intent and entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listModelsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;ModelInfoResponse&gt; object if successful.
     */
    List<ModelInfoResponse> listModels(UUID appId, String versionId, ListModelsOptionalParameter listModelsOptionalParameter);

    /**
     * Gets information about all the intent and entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listModelsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;ModelInfoResponse&gt; object
     */
    Observable<List<ModelInfoResponse>> listModelsAsync(UUID appId, String versionId, ListModelsOptionalParameter listModelsOptionalParameter);

    /**
     * Gets information about all the intent and entity models in a version of the application.
     *
     * @return the first stage of the listModels call
     */
    ModelsListModelsDefinitionStages.WithAppId listModels();

    /**
     * Grouping of listModels definition stages.
     */
    interface ModelsListModelsDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListModelsDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListModelsDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListModelsDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListModelsDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;ModelInfoResponse&gt; object if successful.
             */
            List<ModelInfoResponse> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;ModelInfoResponse&gt; object
             */
            Observable<List<ModelInfoResponse>> executeAsync();
        }
    }

    /**
     * The entirety of listModels definition.
     */
    interface ModelsListModelsDefinition extends
        ModelsListModelsDefinitionStages.WithAppId,
        ModelsListModelsDefinitionStages.WithVersionId,
        ModelsListModelsDefinitionStages.WithExecute {
    }

    /**
     * Gets the example utterances for the given intent or entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param modelId The ID (GUID) of the model.
     * @param examplesMethodOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;LabelTextObject&gt; object if successful.
     */
    List<LabelTextObject> examplesMethod(UUID appId, String versionId, String modelId, ExamplesMethodOptionalParameter examplesMethodOptionalParameter);

    /**
     * Gets the example utterances for the given intent or entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param modelId The ID (GUID) of the model.
     * @param examplesMethodOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;LabelTextObject&gt; object
     */
    Observable<List<LabelTextObject>> examplesMethodAsync(UUID appId, String versionId, String modelId, ExamplesMethodOptionalParameter examplesMethodOptionalParameter);

    /**
     * Gets the example utterances for the given intent or entity model in a version of the application.
     *
     * @return the first stage of the examplesMethod call
     */
    ModelsExamplesMethodDefinitionStages.WithAppId examplesMethod();

    /**
     * Grouping of examplesMethod definition stages.
     */
    interface ModelsExamplesMethodDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithModelId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify modelId.
         */
        interface WithModelId {
            /**
             * The ID (GUID) of the model.
             *
             * @return next definition stage
             */
            ModelsExamplesMethodDefinitionStages.WithExecute withModelId(String modelId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsExamplesMethodDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsExamplesMethodDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsExamplesMethodDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;LabelTextObject&gt; object if successful.
             */
            List<LabelTextObject> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;LabelTextObject&gt; object
             */
            Observable<List<LabelTextObject>> executeAsync();
        }
    }

    /**
     * The entirety of examplesMethod definition.
     */
    interface ModelsExamplesMethodDefinition extends
        ModelsExamplesMethodDefinitionStages.WithAppId,
        ModelsExamplesMethodDefinitionStages.WithVersionId,
        ModelsExamplesMethodDefinitionStages.WithModelId,
        ModelsExamplesMethodDefinitionStages.WithExecute {
    }


    /**
     * Gets information about the intent model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the IntentClassifier object if successful.
     */
    IntentClassifier getIntent(UUID appId, String versionId, UUID intentId);

    /**
     * Gets information about the intent model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the IntentClassifier object
     */
    Observable<IntentClassifier> getIntentAsync(UUID appId, String versionId, UUID intentId);


    /**
     * Updates the name of an intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param updateIntentOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateIntent(UUID appId, String versionId, UUID intentId, UpdateIntentOptionalParameter updateIntentOptionalParameter);

    /**
     * Updates the name of an intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param updateIntentOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateIntentAsync(UUID appId, String versionId, UUID intentId, UpdateIntentOptionalParameter updateIntentOptionalParameter);

    /**
     * Updates the name of an intent in a version of the application.
     *
     * @return the first stage of the updateIntent call
     */
    ModelsUpdateIntentDefinitionStages.WithAppId updateIntent();

    /**
     * Grouping of updateIntent definition stages.
     */
    interface ModelsUpdateIntentDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithIntentId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify intentId.
         */
        interface WithIntentId {
            /**
             * The intent classifier ID.
             *
             * @return next definition stage
             */
            ModelsUpdateIntentDefinitionStages.WithExecute withIntentId(UUID intentId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity's new name.
             *
             * @return next definition stage
             */
            ModelsUpdateIntentDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateIntentDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateIntent definition.
     */
    interface ModelsUpdateIntentDefinition extends
        ModelsUpdateIntentDefinitionStages.WithAppId,
        ModelsUpdateIntentDefinitionStages.WithVersionId,
        ModelsUpdateIntentDefinitionStages.WithIntentId,
        ModelsUpdateIntentDefinitionStages.WithExecute {
    }

    /**
     * Deletes an intent from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param deleteIntentOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteIntent(UUID appId, String versionId, UUID intentId, DeleteIntentOptionalParameter deleteIntentOptionalParameter);

    /**
     * Deletes an intent from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param deleteIntentOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteIntentAsync(UUID appId, String versionId, UUID intentId, DeleteIntentOptionalParameter deleteIntentOptionalParameter);

    /**
     * Deletes an intent from a version of the application.
     *
     * @return the first stage of the deleteIntent call
     */
    ModelsDeleteIntentDefinitionStages.WithAppId deleteIntent();

    /**
     * Grouping of deleteIntent definition stages.
     */
    interface ModelsDeleteIntentDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithIntentId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify intentId.
         */
        interface WithIntentId {
            /**
             * The intent classifier ID.
             *
             * @return next definition stage
             */
            ModelsDeleteIntentDefinitionStages.WithExecute withIntentId(UUID intentId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * If true, deletes the intent's example utterances. If false, moves the example utterances to the None intent.
             *   The default value is false.
             *
             * @return next definition stage
             */
            ModelsDeleteIntentDefinitionStages.WithExecute withDeleteUtterances(Boolean deleteUtterances);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsDeleteIntentDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of deleteIntent definition.
     */
    interface ModelsDeleteIntentDefinition extends
        ModelsDeleteIntentDefinitionStages.WithAppId,
        ModelsDeleteIntentDefinitionStages.WithVersionId,
        ModelsDeleteIntentDefinitionStages.WithIntentId,
        ModelsDeleteIntentDefinitionStages.WithExecute {
    }


    /**
     * Gets information about an entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the NDepthEntityExtractor object if successful.
     */
    NDepthEntityExtractor getEntity(UUID appId, String versionId, UUID entityId);

    /**
     * Gets information about an entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the NDepthEntityExtractor object
     */
    Observable<NDepthEntityExtractor> getEntityAsync(UUID appId, String versionId, UUID entityId);



    /**
     * Deletes an entity or a child from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor or the child entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteEntity(UUID appId, String versionId, UUID entityId);

    /**
     * Deletes an entity or a child from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor or the child entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteEntityAsync(UUID appId, String versionId, UUID entityId);



    /**
     * Updates the name of an entity extractor or the name and instanceOf model of a child entity
      *  extractor.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor or the child entity extractor ID.
     * @param entityModelUpdateObject A model object containing the name new entity extractor or the name and instance of model of a
      *  child entity extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateEntityChild(UUID appId, String versionId, UUID entityId, EntityModelUpdateObject entityModelUpdateObject);

    /**
     * Updates the name of an entity extractor or the name and instanceOf model of a child entity
      *  extractor.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor or the child entity extractor ID.
     * @param entityModelUpdateObject A model object containing the name new entity extractor or the name and instance of model of a
      *  child entity extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateEntityChildAsync(UUID appId, String versionId, UUID entityId, EntityModelUpdateObject entityModelUpdateObject);



    /**
     * Gets the information of the features used by the intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;ModelFeatureInformation&gt; object if successful.
     */
    List<ModelFeatureInformation> getIntentFeatures(UUID appId, String versionId, UUID intentId);

    /**
     * Gets the information of the features used by the intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;ModelFeatureInformation&gt; object
     */
    Observable<List<ModelFeatureInformation>> getIntentFeaturesAsync(UUID appId, String versionId, UUID intentId);



    /**
     * Updates the information of the features used by the intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param featureRelationsUpdateObject A list of feature information objects containing the new feature relations.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus replaceIntentFeatures(UUID appId, String versionId, UUID intentId, List<ModelFeatureInformation> featureRelationsUpdateObject);

    /**
     * Updates the information of the features used by the intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param featureRelationsUpdateObject A list of feature information objects containing the new feature relations.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> replaceIntentFeaturesAsync(UUID appId, String versionId, UUID intentId, List<ModelFeatureInformation> featureRelationsUpdateObject);



    /**
     * Deletes a relation from the feature relations used by the intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param featureRelationDeleteObject A feature information object containing the feature relation to delete.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteIntentFeature(UUID appId, String versionId, UUID intentId, ModelFeatureInformation featureRelationDeleteObject);

    /**
     * Deletes a relation from the feature relations used by the intent in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param featureRelationDeleteObject A feature information object containing the feature relation to delete.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteIntentFeatureAsync(UUID appId, String versionId, UUID intentId, ModelFeatureInformation featureRelationDeleteObject);



    /**
     * Gets the information of the features used by the entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;ModelFeatureInformation&gt; object if successful.
     */
    List<ModelFeatureInformation> getEntityFeatures(UUID appId, String versionId, UUID entityId);

    /**
     * Gets the information of the features used by the entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;ModelFeatureInformation&gt; object
     */
    Observable<List<ModelFeatureInformation>> getEntityFeaturesAsync(UUID appId, String versionId, UUID entityId);



    /**
     * Updates the information of the features used by the entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @param featureRelationsUpdateObject A list of feature information objects containing the new feature relations.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus replaceEntityFeatures(UUID appId, String versionId, UUID entityId, List<ModelFeatureInformation> featureRelationsUpdateObject);

    /**
     * Updates the information of the features used by the entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @param featureRelationsUpdateObject A list of feature information objects containing the new feature relations.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> replaceEntityFeaturesAsync(UUID appId, String versionId, UUID entityId, List<ModelFeatureInformation> featureRelationsUpdateObject);



    /**
     * Deletes a relation from the feature relations used by the entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @param featureRelationDeleteObject A feature information object containing the feature relation to delete.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteEntityFeature(UUID appId, String versionId, UUID entityId, ModelFeatureInformation featureRelationDeleteObject);

    /**
     * Deletes a relation from the feature relations used by the entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @param featureRelationDeleteObject A feature information object containing the feature relation to delete.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteEntityFeatureAsync(UUID appId, String versionId, UUID entityId, ModelFeatureInformation featureRelationDeleteObject);



    /**
     * Gets information about a hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the HierarchicalEntityExtractor object if successful.
     */
    HierarchicalEntityExtractor getHierarchicalEntity(UUID appId, String versionId, UUID hEntityId);

    /**
     * Gets information about a hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the HierarchicalEntityExtractor object
     */
    Observable<HierarchicalEntityExtractor> getHierarchicalEntityAsync(UUID appId, String versionId, UUID hEntityId);


    /**
     * Updates the name of a hierarchical entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param updateHierarchicalEntityOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateHierarchicalEntity(UUID appId, String versionId, UUID hEntityId, UpdateHierarchicalEntityOptionalParameter updateHierarchicalEntityOptionalParameter);

    /**
     * Updates the name of a hierarchical entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param updateHierarchicalEntityOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateHierarchicalEntityAsync(UUID appId, String versionId, UUID hEntityId, UpdateHierarchicalEntityOptionalParameter updateHierarchicalEntityOptionalParameter);

    /**
     * Updates the name of a hierarchical entity model in a version of the application.
     *
     * @return the first stage of the updateHierarchicalEntity call
     */
    ModelsUpdateHierarchicalEntityDefinitionStages.WithAppId updateHierarchicalEntity();

    /**
     * Grouping of updateHierarchicalEntity definition stages.
     */
    interface ModelsUpdateHierarchicalEntityDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithHEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify hEntityId.
         */
        interface WithHEntityId {
            /**
             * The hierarchical entity extractor ID.
             *
             * @return next definition stage
             */
            ModelsUpdateHierarchicalEntityDefinitionStages.WithExecute withHEntityId(UUID hEntityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity's new name.
             *
             * @return next definition stage
             */
            ModelsUpdateHierarchicalEntityDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateHierarchicalEntityDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateHierarchicalEntity definition.
     */
    interface ModelsUpdateHierarchicalEntityDefinition extends
        ModelsUpdateHierarchicalEntityDefinitionStages.WithAppId,
        ModelsUpdateHierarchicalEntityDefinitionStages.WithVersionId,
        ModelsUpdateHierarchicalEntityDefinitionStages.WithHEntityId,
        ModelsUpdateHierarchicalEntityDefinitionStages.WithExecute {
    }


    /**
     * Deletes a hierarchical entity from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteHierarchicalEntity(UUID appId, String versionId, UUID hEntityId);

    /**
     * Deletes a hierarchical entity from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteHierarchicalEntityAsync(UUID appId, String versionId, UUID hEntityId);



    /**
     * Gets information about a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the CompositeEntityExtractor object if successful.
     */
    CompositeEntityExtractor getCompositeEntity(UUID appId, String versionId, UUID cEntityId);

    /**
     * Gets information about a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the CompositeEntityExtractor object
     */
    Observable<CompositeEntityExtractor> getCompositeEntityAsync(UUID appId, String versionId, UUID cEntityId);



    /**
     * Updates a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param compositeModelUpdateObject A model object containing the new entity extractor name and children.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateCompositeEntity(UUID appId, String versionId, UUID cEntityId, CompositeEntityModel compositeModelUpdateObject);

    /**
     * Updates a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param compositeModelUpdateObject A model object containing the new entity extractor name and children.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateCompositeEntityAsync(UUID appId, String versionId, UUID cEntityId, CompositeEntityModel compositeModelUpdateObject);



    /**
     * Deletes a composite entity from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteCompositeEntity(UUID appId, String versionId, UUID cEntityId);

    /**
     * Deletes a composite entity from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteCompositeEntityAsync(UUID appId, String versionId, UUID cEntityId);



    /**
     * Gets information about a list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list model ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the ClosedListEntityExtractor object if successful.
     */
    ClosedListEntityExtractor getClosedList(UUID appId, String versionId, UUID clEntityId);

    /**
     * Gets information about a list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list model ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the ClosedListEntityExtractor object
     */
    Observable<ClosedListEntityExtractor> getClosedListAsync(UUID appId, String versionId, UUID clEntityId);



    /**
     * Updates the list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list model ID.
     * @param closedListModelUpdateObject The new list entity name and words list.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateClosedList(UUID appId, String versionId, UUID clEntityId, ClosedListModelUpdateObject closedListModelUpdateObject);

    /**
     * Updates the list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list model ID.
     * @param closedListModelUpdateObject The new list entity name and words list.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateClosedListAsync(UUID appId, String versionId, UUID clEntityId, ClosedListModelUpdateObject closedListModelUpdateObject);


    /**
     * Adds a batch of sublists to an existing list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity model ID.
     * @param patchClosedListOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus patchClosedList(UUID appId, String versionId, UUID clEntityId, PatchClosedListOptionalParameter patchClosedListOptionalParameter);

    /**
     * Adds a batch of sublists to an existing list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity model ID.
     * @param patchClosedListOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> patchClosedListAsync(UUID appId, String versionId, UUID clEntityId, PatchClosedListOptionalParameter patchClosedListOptionalParameter);

    /**
     * Adds a batch of sublists to an existing list entity in a version of the application.
     *
     * @return the first stage of the patchClosedList call
     */
    ModelsPatchClosedListDefinitionStages.WithAppId patchClosedList();

    /**
     * Grouping of patchClosedList definition stages.
     */
    interface ModelsPatchClosedListDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithClEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify clEntityId.
         */
        interface WithClEntityId {
            /**
             * The list entity model ID.
             *
             * @return next definition stage
             */
            ModelsPatchClosedListDefinitionStages.WithExecute withClEntityId(UUID clEntityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * Sublists to add.
             *
             * @return next definition stage
             */
            ModelsPatchClosedListDefinitionStages.WithExecute withSubLists(List<WordListObject> subLists);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsPatchClosedListDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of patchClosedList definition.
     */
    interface ModelsPatchClosedListDefinition extends
        ModelsPatchClosedListDefinitionStages.WithAppId,
        ModelsPatchClosedListDefinitionStages.WithVersionId,
        ModelsPatchClosedListDefinitionStages.WithClEntityId,
        ModelsPatchClosedListDefinitionStages.WithExecute {
    }


    /**
     * Deletes a list entity model from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity model ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteClosedList(UUID appId, String versionId, UUID clEntityId);

    /**
     * Deletes a list entity model from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity model ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteClosedListAsync(UUID appId, String versionId, UUID clEntityId);



    /**
     * Gets information about a prebuilt entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltId The prebuilt entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PrebuiltEntityExtractor object if successful.
     */
    PrebuiltEntityExtractor getPrebuilt(UUID appId, String versionId, UUID prebuiltId);

    /**
     * Gets information about a prebuilt entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltId The prebuilt entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PrebuiltEntityExtractor object
     */
    Observable<PrebuiltEntityExtractor> getPrebuiltAsync(UUID appId, String versionId, UUID prebuiltId);



    /**
     * Deletes a prebuilt entity extractor from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltId The prebuilt entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deletePrebuilt(UUID appId, String versionId, UUID prebuiltId);

    /**
     * Deletes a prebuilt entity extractor from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltId The prebuilt entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deletePrebuiltAsync(UUID appId, String versionId, UUID prebuiltId);



    /**
     * Deletes a sublist of a specific list entity model from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity extractor ID.
     * @param subListId The sublist ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteSubList(UUID appId, String versionId, UUID clEntityId, long subListId);

    /**
     * Deletes a sublist of a specific list entity model from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity extractor ID.
     * @param subListId The sublist ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteSubListAsync(UUID appId, String versionId, UUID clEntityId, long subListId);



    /**
     * Updates one of the list entity's sublists in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity extractor ID.
     * @param subListId The sublist ID.
     * @param wordListBaseUpdateObject A sublist update object containing the new canonical form and the list of words.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateSubList(UUID appId, String versionId, UUID clEntityId, long subListId, WordListBaseUpdateObject wordListBaseUpdateObject);

    /**
     * Updates one of the list entity's sublists in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity extractor ID.
     * @param subListId The sublist ID.
     * @param wordListBaseUpdateObject A sublist update object containing the new canonical form and the list of words.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateSubListAsync(UUID appId, String versionId, UUID clEntityId, long subListId, WordListBaseUpdateObject wordListBaseUpdateObject);


    /**
     * Suggests example utterances that would improve the accuracy of the intent model in a version of the
     *   application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param listIntentSuggestionsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;IntentsSuggestionExample&gt; object if successful.
     */
    List<IntentsSuggestionExample> listIntentSuggestions(UUID appId, String versionId, UUID intentId, ListIntentSuggestionsOptionalParameter listIntentSuggestionsOptionalParameter);

    /**
     * Suggests example utterances that would improve the accuracy of the intent model in a version of the
     *   application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param intentId The intent classifier ID.
     * @param listIntentSuggestionsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;IntentsSuggestionExample&gt; object
     */
    Observable<List<IntentsSuggestionExample>> listIntentSuggestionsAsync(UUID appId, String versionId, UUID intentId, ListIntentSuggestionsOptionalParameter listIntentSuggestionsOptionalParameter);

    /**
     * Suggests example utterances that would improve the accuracy of the intent model in a version of the
     *   application.
     *
     * @return the first stage of the listIntentSuggestions call
     */
    ModelsListIntentSuggestionsDefinitionStages.WithAppId listIntentSuggestions();

    /**
     * Grouping of listIntentSuggestions definition stages.
     */
    interface ModelsListIntentSuggestionsDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithIntentId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify intentId.
         */
        interface WithIntentId {
            /**
             * The intent classifier ID.
             *
             * @return next definition stage
             */
            ModelsListIntentSuggestionsDefinitionStages.WithExecute withIntentId(UUID intentId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListIntentSuggestionsDefinitionStages.WithExecute withTake(Integer take);

            /**
             * Toggles nested/flat format.
             *
             * @return next definition stage
             */
            ModelsListIntentSuggestionsDefinitionStages.WithExecute withEnableNestedChildren(Boolean enableNestedChildren);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListIntentSuggestionsDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;IntentsSuggestionExample&gt; object if successful.
             */
            List<IntentsSuggestionExample> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;IntentsSuggestionExample&gt; object
             */
            Observable<List<IntentsSuggestionExample>> executeAsync();
        }
    }

    /**
     * The entirety of listIntentSuggestions definition.
     */
    interface ModelsListIntentSuggestionsDefinition extends
        ModelsListIntentSuggestionsDefinitionStages.WithAppId,
        ModelsListIntentSuggestionsDefinitionStages.WithVersionId,
        ModelsListIntentSuggestionsDefinitionStages.WithIntentId,
        ModelsListIntentSuggestionsDefinitionStages.WithExecute {
    }

    /**
     * Get suggested example utterances that would improve the accuracy of the entity model in a version of the
     *   application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The target entity extractor model to enhance.
     * @param listEntitySuggestionsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntitiesSuggestionExample&gt; object if successful.
     */
    List<EntitiesSuggestionExample> listEntitySuggestions(UUID appId, String versionId, UUID entityId, ListEntitySuggestionsOptionalParameter listEntitySuggestionsOptionalParameter);

    /**
     * Get suggested example utterances that would improve the accuracy of the entity model in a version of the
     *   application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The target entity extractor model to enhance.
     * @param listEntitySuggestionsOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntitiesSuggestionExample&gt; object
     */
    Observable<List<EntitiesSuggestionExample>> listEntitySuggestionsAsync(UUID appId, String versionId, UUID entityId, ListEntitySuggestionsOptionalParameter listEntitySuggestionsOptionalParameter);

    /**
     * Get suggested example utterances that would improve the accuracy of the entity model in a version of the
     *   application.
     *
     * @return the first stage of the listEntitySuggestions call
     */
    ModelsListEntitySuggestionsDefinitionStages.WithAppId listEntitySuggestions();

    /**
     * Grouping of listEntitySuggestions definition stages.
     */
    interface ModelsListEntitySuggestionsDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The target entity extractor model to enhance.
             *
             * @return next definition stage
             */
            ModelsListEntitySuggestionsDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListEntitySuggestionsDefinitionStages.WithExecute withTake(Integer take);

            /**
             * Toggles nested/flat format.
             *
             * @return next definition stage
             */
            ModelsListEntitySuggestionsDefinitionStages.WithExecute withEnableNestedChildren(Boolean enableNestedChildren);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListEntitySuggestionsDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;EntitiesSuggestionExample&gt; object if successful.
             */
            List<EntitiesSuggestionExample> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;EntitiesSuggestionExample&gt; object
             */
            Observable<List<EntitiesSuggestionExample>> executeAsync();
        }
    }

    /**
     * The entirety of listEntitySuggestions definition.
     */
    interface ModelsListEntitySuggestionsDefinition extends
        ModelsListEntitySuggestionsDefinitionStages.WithAppId,
        ModelsListEntitySuggestionsDefinitionStages.WithVersionId,
        ModelsListEntitySuggestionsDefinitionStages.WithEntityId,
        ModelsListEntitySuggestionsDefinitionStages.WithExecute {
    }


    /**
     * Adds a sublist to an existing list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity extractor ID.
     * @param wordListCreateObject Words list.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the long object if successful.
     */
    long addSubList(UUID appId, String versionId, UUID clEntityId, WordListObject wordListCreateObject);

    /**
     * Adds a sublist to an existing list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param clEntityId The list entity extractor ID.
     * @param wordListCreateObject Words list.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the long object
     */
    Observable<Long> addSubListAsync(UUID appId, String versionId, UUID clEntityId, WordListObject wordListCreateObject);


    /**
     * Adds a customizable prebuilt domain along with all of its intent and entity models in a version of the
     *   application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param addCustomPrebuiltDomainOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;UUID&gt; object if successful.
     */
    List<UUID> addCustomPrebuiltDomain(UUID appId, String versionId, AddCustomPrebuiltDomainModelsOptionalParameter addCustomPrebuiltDomainOptionalParameter);

    /**
     * Adds a customizable prebuilt domain along with all of its intent and entity models in a version of the
     *   application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param addCustomPrebuiltDomainOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;UUID&gt; object
     */
    Observable<List<UUID>> addCustomPrebuiltDomainAsync(UUID appId, String versionId, AddCustomPrebuiltDomainModelsOptionalParameter addCustomPrebuiltDomainOptionalParameter);

    /**
     * Adds a customizable prebuilt domain along with all of its intent and entity models in a version of the
     *   application.
     *
     * @return the first stage of the addCustomPrebuiltDomain call
     */
    ModelsAddCustomPrebuiltDomainDefinitionStages.WithAppId addCustomPrebuiltDomain();

    /**
     * Grouping of addCustomPrebuiltDomain definition stages.
     */
    interface ModelsAddCustomPrebuiltDomainDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsAddCustomPrebuiltDomainDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The domain name.
             *
             * @return next definition stage
             */
            ModelsAddCustomPrebuiltDomainDefinitionStages.WithExecute withDomainName(String domainName);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsAddCustomPrebuiltDomainDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;UUID&gt; object if successful.
             */
            List<UUID> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;UUID&gt; object
             */
            Observable<List<UUID>> executeAsync();
        }
    }

    /**
     * The entirety of addCustomPrebuiltDomain definition.
     */
    interface ModelsAddCustomPrebuiltDomainDefinition extends
        ModelsAddCustomPrebuiltDomainDefinitionStages.WithAppId,
        ModelsAddCustomPrebuiltDomainDefinitionStages.WithVersionId,
        ModelsAddCustomPrebuiltDomainDefinitionStages.WithExecute {
    }


    /**
     * Adds a customizable prebuilt intent model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltDomainModelCreateObject A model object containing the name of the customizable prebuilt intent and the name of the domain
      *  to which this model belongs.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addCustomPrebuiltIntent(UUID appId, String versionId, PrebuiltDomainModelCreateObject prebuiltDomainModelCreateObject);

    /**
     * Adds a customizable prebuilt intent model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltDomainModelCreateObject A model object containing the name of the customizable prebuilt intent and the name of the domain
      *  to which this model belongs.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addCustomPrebuiltIntentAsync(UUID appId, String versionId, PrebuiltDomainModelCreateObject prebuiltDomainModelCreateObject);



    /**
     * Gets information about customizable prebuilt intents added to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;IntentClassifier&gt; object if successful.
     */
    List<IntentClassifier> listCustomPrebuiltIntents(UUID appId, String versionId);

    /**
     * Gets information about customizable prebuilt intents added to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;IntentClassifier&gt; object
     */
    Observable<List<IntentClassifier>> listCustomPrebuiltIntentsAsync(UUID appId, String versionId);



    /**
     * Adds a prebuilt entity model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltDomainModelCreateObject A model object containing the name of the prebuilt entity and the name of the domain to which this
      *  model belongs.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addCustomPrebuiltEntity(UUID appId, String versionId, PrebuiltDomainModelCreateObject prebuiltDomainModelCreateObject);

    /**
     * Adds a prebuilt entity model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param prebuiltDomainModelCreateObject A model object containing the name of the prebuilt entity and the name of the domain to which this
      *  model belongs.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addCustomPrebuiltEntityAsync(UUID appId, String versionId, PrebuiltDomainModelCreateObject prebuiltDomainModelCreateObject);



    /**
     * Gets all prebuilt entities used in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityExtractor&gt; object if successful.
     */
    List<EntityExtractor> listCustomPrebuiltEntities(UUID appId, String versionId);

    /**
     * Gets all prebuilt entities used in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityExtractor&gt; object
     */
    Observable<List<EntityExtractor>> listCustomPrebuiltEntitiesAsync(UUID appId, String versionId);



    /**
     * Gets all prebuilt intent and entity model information used in a version of this application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;CustomPrebuiltModel&gt; object if successful.
     */
    List<CustomPrebuiltModel> listCustomPrebuiltModels(UUID appId, String versionId);

    /**
     * Gets all prebuilt intent and entity model information used in a version of this application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;CustomPrebuiltModel&gt; object
     */
    Observable<List<CustomPrebuiltModel>> listCustomPrebuiltModelsAsync(UUID appId, String versionId);



    /**
     * Deletes a prebuilt domain's models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param domainName Domain name.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteCustomPrebuiltDomain(UUID appId, String versionId, String domainName);

    /**
     * Deletes a prebuilt domain's models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param domainName Domain name.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteCustomPrebuiltDomainAsync(UUID appId, String versionId, String domainName);



    /**
     * Creates a single child in an existing entity model hierarchy in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @param childEntityModelCreateObject A model object containing the name of the new child model and its children.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addEntityChild(UUID appId, String versionId, UUID entityId, ChildEntityModelCreateObject childEntityModelCreateObject);

    /**
     * Creates a single child in an existing entity model hierarchy in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @param childEntityModelCreateObject A model object containing the name of the new child model and its children.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addEntityChildAsync(UUID appId, String versionId, UUID entityId, ChildEntityModelCreateObject childEntityModelCreateObject);



    /**
     * Gets information about the child's model contained in an hierarchical entity child model in a
      *  version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param hChildId The hierarchical entity extractor child ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the HierarchicalChildEntity object if successful.
     */
    HierarchicalChildEntity getHierarchicalEntityChild(UUID appId, String versionId, UUID hEntityId, UUID hChildId);

    /**
     * Gets information about the child's model contained in an hierarchical entity child model in a
      *  version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param hChildId The hierarchical entity extractor child ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the HierarchicalChildEntity object
     */
    Observable<HierarchicalChildEntity> getHierarchicalEntityChildAsync(UUID appId, String versionId, UUID hEntityId, UUID hChildId);


    /**
     * Renames a single child in an existing hierarchical entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param hChildId The hierarchical entity extractor child ID.
     * @param updateHierarchicalEntityChildOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateHierarchicalEntityChild(UUID appId, String versionId, UUID hEntityId, UUID hChildId, UpdateHierarchicalEntityChildOptionalParameter updateHierarchicalEntityChildOptionalParameter);

    /**
     * Renames a single child in an existing hierarchical entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param hChildId The hierarchical entity extractor child ID.
     * @param updateHierarchicalEntityChildOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateHierarchicalEntityChildAsync(UUID appId, String versionId, UUID hEntityId, UUID hChildId, UpdateHierarchicalEntityChildOptionalParameter updateHierarchicalEntityChildOptionalParameter);

    /**
     * Renames a single child in an existing hierarchical entity model in a version of the application.
     *
     * @return the first stage of the updateHierarchicalEntityChild call
     */
    ModelsUpdateHierarchicalEntityChildDefinitionStages.WithAppId updateHierarchicalEntityChild();

    /**
     * Grouping of updateHierarchicalEntityChild definition stages.
     */
    interface ModelsUpdateHierarchicalEntityChildDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithHEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify hEntityId.
         */
        interface WithHEntityId {
            /**
             * The hierarchical entity extractor ID.
             *
             * @return next definition stage
             */
            WithHChildId withHEntityId(UUID hEntityId);
        }
        /**
         * The stage of the definition to be specify hChildId.
         */
        interface WithHChildId {
            /**
             * The hierarchical entity extractor child ID.
             *
             * @return next definition stage
             */
            ModelsUpdateHierarchicalEntityChildDefinitionStages.WithExecute withHChildId(UUID hChildId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             *
             *
             * @return next definition stage
             */
            ModelsUpdateHierarchicalEntityChildDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateHierarchicalEntityChildDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateHierarchicalEntityChild definition.
     */
    interface ModelsUpdateHierarchicalEntityChildDefinition extends
        ModelsUpdateHierarchicalEntityChildDefinitionStages.WithAppId,
        ModelsUpdateHierarchicalEntityChildDefinitionStages.WithVersionId,
        ModelsUpdateHierarchicalEntityChildDefinitionStages.WithHEntityId,
        ModelsUpdateHierarchicalEntityChildDefinitionStages.WithHChildId,
        ModelsUpdateHierarchicalEntityChildDefinitionStages.WithExecute {
    }


    /**
     * Deletes a hierarchical entity extractor child in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param hChildId The hierarchical entity extractor child ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteHierarchicalEntityChild(UUID appId, String versionId, UUID hEntityId, UUID hChildId);

    /**
     * Deletes a hierarchical entity extractor child in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param hChildId The hierarchical entity extractor child ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteHierarchicalEntityChildAsync(UUID appId, String versionId, UUID hEntityId, UUID hChildId);


    /**
     * Creates a single child in an existing composite entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param addCompositeEntityChildOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID addCompositeEntityChild(UUID appId, String versionId, UUID cEntityId, AddCompositeEntityChildOptionalParameter addCompositeEntityChildOptionalParameter);

    /**
     * Creates a single child in an existing composite entity model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param addCompositeEntityChildOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> addCompositeEntityChildAsync(UUID appId, String versionId, UUID cEntityId, AddCompositeEntityChildOptionalParameter addCompositeEntityChildOptionalParameter);

    /**
     * Creates a single child in an existing composite entity model in a version of the application.
     *
     * @return the first stage of the addCompositeEntityChild call
     */
    ModelsAddCompositeEntityChildDefinitionStages.WithAppId addCompositeEntityChild();

    /**
     * Grouping of addCompositeEntityChild definition stages.
     */
    interface ModelsAddCompositeEntityChildDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithCEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify cEntityId.
         */
        interface WithCEntityId {
            /**
             * The composite entity extractor ID.
             *
             * @return next definition stage
             */
            ModelsAddCompositeEntityChildDefinitionStages.WithExecute withCEntityId(UUID cEntityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             *
             *
             * @return next definition stage
             */
            ModelsAddCompositeEntityChildDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsAddCompositeEntityChildDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of addCompositeEntityChild definition.
     */
    interface ModelsAddCompositeEntityChildDefinition extends
        ModelsAddCompositeEntityChildDefinitionStages.WithAppId,
        ModelsAddCompositeEntityChildDefinitionStages.WithVersionId,
        ModelsAddCompositeEntityChildDefinitionStages.WithCEntityId,
        ModelsAddCompositeEntityChildDefinitionStages.WithExecute {
    }


    /**
     * Deletes a composite entity extractor child from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param cChildId The hierarchical entity extractor child ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteCompositeEntityChild(UUID appId, String versionId, UUID cEntityId, UUID cChildId);

    /**
     * Deletes a composite entity extractor child from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param cChildId The hierarchical entity extractor child ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteCompositeEntityChildAsync(UUID appId, String versionId, UUID cEntityId, UUID cChildId);


    /**
     * Gets information about the regular expression entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listRegexEntityInfosOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;RegexEntityExtractor&gt; object if successful.
     */
    List<RegexEntityExtractor> listRegexEntityInfos(UUID appId, String versionId, ListRegexEntityInfosOptionalParameter listRegexEntityInfosOptionalParameter);

    /**
     * Gets information about the regular expression entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listRegexEntityInfosOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;RegexEntityExtractor&gt; object
     */
    Observable<List<RegexEntityExtractor>> listRegexEntityInfosAsync(UUID appId, String versionId, ListRegexEntityInfosOptionalParameter listRegexEntityInfosOptionalParameter);

    /**
     * Gets information about the regular expression entity models in a version of the application.
     *
     * @return the first stage of the listRegexEntityInfos call
     */
    ModelsListRegexEntityInfosDefinitionStages.WithAppId listRegexEntityInfos();

    /**
     * Grouping of listRegexEntityInfos definition stages.
     */
    interface ModelsListRegexEntityInfosDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListRegexEntityInfosDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListRegexEntityInfosDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListRegexEntityInfosDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListRegexEntityInfosDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;RegexEntityExtractor&gt; object if successful.
             */
            List<RegexEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;RegexEntityExtractor&gt; object
             */
            Observable<List<RegexEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listRegexEntityInfos definition.
     */
    interface ModelsListRegexEntityInfosDefinition extends
        ModelsListRegexEntityInfosDefinitionStages.WithAppId,
        ModelsListRegexEntityInfosDefinitionStages.WithVersionId,
        ModelsListRegexEntityInfosDefinitionStages.WithExecute {
    }


    /**
     * Adds a regular expression entity model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityExtractorCreateObj A model object containing the name and regex pattern for the new regular expression entity
      *  extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createRegexEntityModel(UUID appId, String versionId, RegexModelCreateObject regexEntityExtractorCreateObj);

    /**
     * Adds a regular expression entity model to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityExtractorCreateObj A model object containing the name and regex pattern for the new regular expression entity
      *  extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createRegexEntityModelAsync(UUID appId, String versionId, RegexModelCreateObject regexEntityExtractorCreateObj);


    /**
     * Get information about the Pattern.Any entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listPatternAnyEntityInfosOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;PatternAnyEntityExtractor&gt; object if successful.
     */
    List<PatternAnyEntityExtractor> listPatternAnyEntityInfos(UUID appId, String versionId, ListPatternAnyEntityInfosOptionalParameter listPatternAnyEntityInfosOptionalParameter);

    /**
     * Get information about the Pattern.Any entity models in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param listPatternAnyEntityInfosOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;PatternAnyEntityExtractor&gt; object
     */
    Observable<List<PatternAnyEntityExtractor>> listPatternAnyEntityInfosAsync(UUID appId, String versionId, ListPatternAnyEntityInfosOptionalParameter listPatternAnyEntityInfosOptionalParameter);

    /**
     * Get information about the Pattern.Any entity models in a version of the application.
     *
     * @return the first stage of the listPatternAnyEntityInfos call
     */
    ModelsListPatternAnyEntityInfosDefinitionStages.WithAppId listPatternAnyEntityInfos();

    /**
     * Grouping of listPatternAnyEntityInfos definition stages.
     */
    interface ModelsListPatternAnyEntityInfosDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            ModelsListPatternAnyEntityInfosDefinitionStages.WithExecute withVersionId(String versionId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The number of entries to skip. Default value is 0.
             *
             * @return next definition stage
             */
            ModelsListPatternAnyEntityInfosDefinitionStages.WithExecute withSkip(Integer skip);

            /**
             * The number of entries to return. Maximum page size is 500. Default is 100.
             *
             * @return next definition stage
             */
            ModelsListPatternAnyEntityInfosDefinitionStages.WithExecute withTake(Integer take);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsListPatternAnyEntityInfosDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the List&lt;PatternAnyEntityExtractor&gt; object if successful.
             */
            List<PatternAnyEntityExtractor> execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the List&lt;PatternAnyEntityExtractor&gt; object
             */
            Observable<List<PatternAnyEntityExtractor>> executeAsync();
        }
    }

    /**
     * The entirety of listPatternAnyEntityInfos definition.
     */
    interface ModelsListPatternAnyEntityInfosDefinition extends
        ModelsListPatternAnyEntityInfosDefinitionStages.WithAppId,
        ModelsListPatternAnyEntityInfosDefinitionStages.WithVersionId,
        ModelsListPatternAnyEntityInfosDefinitionStages.WithExecute {
    }


    /**
     * Adds a pattern.any entity extractor to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param extractorCreateObject A model object containing the name and explicit list for the new Pattern.Any entity extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createPatternAnyEntityModel(UUID appId, String versionId, PatternAnyModelCreateObject extractorCreateObject);

    /**
     * Adds a pattern.any entity extractor to a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param extractorCreateObject A model object containing the name and explicit list for the new Pattern.Any entity extractor.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createPatternAnyEntityModelAsync(UUID appId, String versionId, PatternAnyModelCreateObject extractorCreateObject);



    /**
     * Get all roles for an entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listEntityRoles(UUID appId, String versionId, UUID entityId);

    /**
     * Get all roles for an entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listEntityRolesAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Create an entity role in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createEntityRole(UUID appId, String versionId, UUID entityId, CreateEntityRoleOptionalParameter createEntityRoleOptionalParameter);

    /**
     * Create an entity role in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createEntityRoleAsync(UUID appId, String versionId, UUID entityId, CreateEntityRoleOptionalParameter createEntityRoleOptionalParameter);

    /**
     * Create an entity role in a version of the application.
     *
     * @return the first stage of the createEntityRole call
     */
    ModelsCreateEntityRoleDefinitionStages.WithAppId createEntityRole();

    /**
     * Grouping of createEntityRole definition stages.
     */
    interface ModelsCreateEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity model ID.
             *
             * @return next definition stage
             */
            ModelsCreateEntityRoleDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreateEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreateEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createEntityRole definition.
     */
    interface ModelsCreateEntityRoleDefinition extends
        ModelsCreateEntityRoleDefinitionStages.WithAppId,
        ModelsCreateEntityRoleDefinitionStages.WithVersionId,
        ModelsCreateEntityRoleDefinitionStages.WithEntityId,
        ModelsCreateEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get a prebuilt entity's roles in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listPrebuiltEntityRoles(UUID appId, String versionId, UUID entityId);

    /**
     * Get a prebuilt entity's roles in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listPrebuiltEntityRolesAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Create a role for a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createPrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createPrebuiltEntityRole(UUID appId, String versionId, UUID entityId, CreatePrebuiltEntityRoleOptionalParameter createPrebuiltEntityRoleOptionalParameter);

    /**
     * Create a role for a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createPrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createPrebuiltEntityRoleAsync(UUID appId, String versionId, UUID entityId, CreatePrebuiltEntityRoleOptionalParameter createPrebuiltEntityRoleOptionalParameter);

    /**
     * Create a role for a prebuilt entity in a version of the application.
     *
     * @return the first stage of the createPrebuiltEntityRole call
     */
    ModelsCreatePrebuiltEntityRoleDefinitionStages.WithAppId createPrebuiltEntityRole();

    /**
     * Grouping of createPrebuiltEntityRole definition stages.
     */
    interface ModelsCreatePrebuiltEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity model ID.
             *
             * @return next definition stage
             */
            ModelsCreatePrebuiltEntityRoleDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreatePrebuiltEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreatePrebuiltEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createPrebuiltEntityRole definition.
     */
    interface ModelsCreatePrebuiltEntityRoleDefinition extends
        ModelsCreatePrebuiltEntityRoleDefinitionStages.WithAppId,
        ModelsCreatePrebuiltEntityRoleDefinitionStages.WithVersionId,
        ModelsCreatePrebuiltEntityRoleDefinitionStages.WithEntityId,
        ModelsCreatePrebuiltEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get all roles for a list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listClosedListEntityRoles(UUID appId, String versionId, UUID entityId);

    /**
     * Get all roles for a list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listClosedListEntityRolesAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Create a role for a list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createClosedListEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createClosedListEntityRole(UUID appId, String versionId, UUID entityId, CreateClosedListEntityRoleOptionalParameter createClosedListEntityRoleOptionalParameter);

    /**
     * Create a role for a list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createClosedListEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createClosedListEntityRoleAsync(UUID appId, String versionId, UUID entityId, CreateClosedListEntityRoleOptionalParameter createClosedListEntityRoleOptionalParameter);

    /**
     * Create a role for a list entity in a version of the application.
     *
     * @return the first stage of the createClosedListEntityRole call
     */
    ModelsCreateClosedListEntityRoleDefinitionStages.WithAppId createClosedListEntityRole();

    /**
     * Grouping of createClosedListEntityRole definition stages.
     */
    interface ModelsCreateClosedListEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity model ID.
             *
             * @return next definition stage
             */
            ModelsCreateClosedListEntityRoleDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreateClosedListEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreateClosedListEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createClosedListEntityRole definition.
     */
    interface ModelsCreateClosedListEntityRoleDefinition extends
        ModelsCreateClosedListEntityRoleDefinitionStages.WithAppId,
        ModelsCreateClosedListEntityRoleDefinitionStages.WithVersionId,
        ModelsCreateClosedListEntityRoleDefinitionStages.WithEntityId,
        ModelsCreateClosedListEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get all roles for a regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listRegexEntityRoles(UUID appId, String versionId, UUID entityId);

    /**
     * Get all roles for a regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listRegexEntityRolesAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Create a role for an regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createRegexEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createRegexEntityRole(UUID appId, String versionId, UUID entityId, CreateRegexEntityRoleOptionalParameter createRegexEntityRoleOptionalParameter);

    /**
     * Create a role for an regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createRegexEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createRegexEntityRoleAsync(UUID appId, String versionId, UUID entityId, CreateRegexEntityRoleOptionalParameter createRegexEntityRoleOptionalParameter);

    /**
     * Create a role for an regular expression entity in a version of the application.
     *
     * @return the first stage of the createRegexEntityRole call
     */
    ModelsCreateRegexEntityRoleDefinitionStages.WithAppId createRegexEntityRole();

    /**
     * Grouping of createRegexEntityRole definition stages.
     */
    interface ModelsCreateRegexEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity model ID.
             *
             * @return next definition stage
             */
            ModelsCreateRegexEntityRoleDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreateRegexEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreateRegexEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createRegexEntityRole definition.
     */
    interface ModelsCreateRegexEntityRoleDefinition extends
        ModelsCreateRegexEntityRoleDefinitionStages.WithAppId,
        ModelsCreateRegexEntityRoleDefinitionStages.WithVersionId,
        ModelsCreateRegexEntityRoleDefinitionStages.WithEntityId,
        ModelsCreateRegexEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get all roles for a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listCompositeEntityRoles(UUID appId, String versionId, UUID cEntityId);

    /**
     * Get all roles for a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listCompositeEntityRolesAsync(UUID appId, String versionId, UUID cEntityId);


    /**
     * Create a role for a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param createCompositeEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createCompositeEntityRole(UUID appId, String versionId, UUID cEntityId, CreateCompositeEntityRoleOptionalParameter createCompositeEntityRoleOptionalParameter);

    /**
     * Create a role for a composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param createCompositeEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createCompositeEntityRoleAsync(UUID appId, String versionId, UUID cEntityId, CreateCompositeEntityRoleOptionalParameter createCompositeEntityRoleOptionalParameter);

    /**
     * Create a role for a composite entity in a version of the application.
     *
     * @return the first stage of the createCompositeEntityRole call
     */
    ModelsCreateCompositeEntityRoleDefinitionStages.WithAppId createCompositeEntityRole();

    /**
     * Grouping of createCompositeEntityRole definition stages.
     */
    interface ModelsCreateCompositeEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithCEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify cEntityId.
         */
        interface WithCEntityId {
            /**
             * The composite entity extractor ID.
             *
             * @return next definition stage
             */
            ModelsCreateCompositeEntityRoleDefinitionStages.WithExecute withCEntityId(UUID cEntityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreateCompositeEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreateCompositeEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createCompositeEntityRole definition.
     */
    interface ModelsCreateCompositeEntityRoleDefinition extends
        ModelsCreateCompositeEntityRoleDefinitionStages.WithAppId,
        ModelsCreateCompositeEntityRoleDefinitionStages.WithVersionId,
        ModelsCreateCompositeEntityRoleDefinitionStages.WithCEntityId,
        ModelsCreateCompositeEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get all roles for a Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listPatternAnyEntityRoles(UUID appId, String versionId, UUID entityId);

    /**
     * Get all roles for a Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listPatternAnyEntityRolesAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Create a role for an Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createPatternAnyEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createPatternAnyEntityRole(UUID appId, String versionId, UUID entityId, CreatePatternAnyEntityRoleOptionalParameter createPatternAnyEntityRoleOptionalParameter);

    /**
     * Create a role for an Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createPatternAnyEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createPatternAnyEntityRoleAsync(UUID appId, String versionId, UUID entityId, CreatePatternAnyEntityRoleOptionalParameter createPatternAnyEntityRoleOptionalParameter);

    /**
     * Create a role for an Pattern.any entity in a version of the application.
     *
     * @return the first stage of the createPatternAnyEntityRole call
     */
    ModelsCreatePatternAnyEntityRoleDefinitionStages.WithAppId createPatternAnyEntityRole();

    /**
     * Grouping of createPatternAnyEntityRole definition stages.
     */
    interface ModelsCreatePatternAnyEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity model ID.
             *
             * @return next definition stage
             */
            ModelsCreatePatternAnyEntityRoleDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreatePatternAnyEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreatePatternAnyEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createPatternAnyEntityRole definition.
     */
    interface ModelsCreatePatternAnyEntityRoleDefinition extends
        ModelsCreatePatternAnyEntityRoleDefinitionStages.WithAppId,
        ModelsCreatePatternAnyEntityRoleDefinitionStages.WithVersionId,
        ModelsCreatePatternAnyEntityRoleDefinitionStages.WithEntityId,
        ModelsCreatePatternAnyEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get all roles for a hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listHierarchicalEntityRoles(UUID appId, String versionId, UUID hEntityId);

    /**
     * Get all roles for a hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listHierarchicalEntityRolesAsync(UUID appId, String versionId, UUID hEntityId);


    /**
     * Create a role for an hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param createHierarchicalEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createHierarchicalEntityRole(UUID appId, String versionId, UUID hEntityId, CreateHierarchicalEntityRoleOptionalParameter createHierarchicalEntityRoleOptionalParameter);

    /**
     * Create a role for an hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param createHierarchicalEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createHierarchicalEntityRoleAsync(UUID appId, String versionId, UUID hEntityId, CreateHierarchicalEntityRoleOptionalParameter createHierarchicalEntityRoleOptionalParameter);

    /**
     * Create a role for an hierarchical entity in a version of the application.
     *
     * @return the first stage of the createHierarchicalEntityRole call
     */
    ModelsCreateHierarchicalEntityRoleDefinitionStages.WithAppId createHierarchicalEntityRole();

    /**
     * Grouping of createHierarchicalEntityRole definition stages.
     */
    interface ModelsCreateHierarchicalEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithHEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify hEntityId.
         */
        interface WithHEntityId {
            /**
             * The hierarchical entity extractor ID.
             *
             * @return next definition stage
             */
            ModelsCreateHierarchicalEntityRoleDefinitionStages.WithExecute withHEntityId(UUID hEntityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreateHierarchicalEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreateHierarchicalEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createHierarchicalEntityRole definition.
     */
    interface ModelsCreateHierarchicalEntityRoleDefinition extends
        ModelsCreateHierarchicalEntityRoleDefinitionStages.WithAppId,
        ModelsCreateHierarchicalEntityRoleDefinitionStages.WithVersionId,
        ModelsCreateHierarchicalEntityRoleDefinitionStages.WithHEntityId,
        ModelsCreateHierarchicalEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get all roles for a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;EntityRole&gt; object if successful.
     */
    List<EntityRole> listCustomPrebuiltEntityRoles(UUID appId, String versionId, UUID entityId);

    /**
     * Get all roles for a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;EntityRole&gt; object
     */
    Observable<List<EntityRole>> listCustomPrebuiltEntityRolesAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Create a role for a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createCustomPrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the UUID object if successful.
     */
    UUID createCustomPrebuiltEntityRole(UUID appId, String versionId, UUID entityId, CreateCustomPrebuiltEntityRoleOptionalParameter createCustomPrebuiltEntityRoleOptionalParameter);

    /**
     * Create a role for a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity model ID.
     * @param createCustomPrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the UUID object
     */
    Observable<UUID> createCustomPrebuiltEntityRoleAsync(UUID appId, String versionId, UUID entityId, CreateCustomPrebuiltEntityRoleOptionalParameter createCustomPrebuiltEntityRoleOptionalParameter);

    /**
     * Create a role for a prebuilt entity in a version of the application.
     *
     * @return the first stage of the createCustomPrebuiltEntityRole call
     */
    ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithAppId createCustomPrebuiltEntityRole();

    /**
     * Grouping of createCustomPrebuiltEntityRole definition stages.
     */
    interface ModelsCreateCustomPrebuiltEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity model ID.
             *
             * @return next definition stage
             */
            ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the UUID object if successful.
             */
            UUID execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the UUID object
             */
            Observable<UUID> executeAsync();
        }
    }

    /**
     * The entirety of createCustomPrebuiltEntityRole definition.
     */
    interface ModelsCreateCustomPrebuiltEntityRoleDefinition extends
        ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithAppId,
        ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithVersionId,
        ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithEntityId,
        ModelsCreateCustomPrebuiltEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Get the explicit (exception) list of the pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the List&lt;ExplicitListItem&gt; object if successful.
     */
    List<ExplicitListItem> getExplicitList(UUID appId, String versionId, UUID entityId);

    /**
     * Get the explicit (exception) list of the pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the List&lt;ExplicitListItem&gt; object
     */
    Observable<List<ExplicitListItem>> getExplicitListAsync(UUID appId, String versionId, UUID entityId);


    /**
     * Add a new exception to the explicit list for the Pattern.Any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @param addExplicitListItemOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the int object if successful.
     */
    int addExplicitListItem(UUID appId, String versionId, UUID entityId, AddExplicitListItemOptionalParameter addExplicitListItemOptionalParameter);

    /**
     * Add a new exception to the explicit list for the Pattern.Any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @param addExplicitListItemOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the int object
     */
    Observable<Integer> addExplicitListItemAsync(UUID appId, String versionId, UUID entityId, AddExplicitListItemOptionalParameter addExplicitListItemOptionalParameter);

    /**
     * Add a new exception to the explicit list for the Pattern.Any entity in a version of the application.
     *
     * @return the first stage of the addExplicitListItem call
     */
    ModelsAddExplicitListItemDefinitionStages.WithAppId addExplicitListItem();

    /**
     * Grouping of addExplicitListItem definition stages.
     */
    interface ModelsAddExplicitListItemDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The Pattern.Any entity extractor ID.
             *
             * @return next definition stage
             */
            ModelsAddExplicitListItemDefinitionStages.WithExecute withEntityId(UUID entityId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The explicit list item.
             *
             * @return next definition stage
             */
            ModelsAddExplicitListItemDefinitionStages.WithExecute withExplicitListItem(String explicitListItem);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsAddExplicitListItemDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the int object if successful.
             */
            int execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the int object
             */
            Observable<Integer> executeAsync();
        }
    }

    /**
     * The entirety of addExplicitListItem definition.
     */
    interface ModelsAddExplicitListItemDefinition extends
        ModelsAddExplicitListItemDefinitionStages.WithAppId,
        ModelsAddExplicitListItemDefinitionStages.WithVersionId,
        ModelsAddExplicitListItemDefinitionStages.WithEntityId,
        ModelsAddExplicitListItemDefinitionStages.WithExecute {
    }


    /**
     * Gets information about a regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityId The regular expression entity model ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the RegexEntityExtractor object if successful.
     */
    RegexEntityExtractor getRegexEntityEntityInfo(UUID appId, String versionId, UUID regexEntityId);

    /**
     * Gets information about a regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityId The regular expression entity model ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the RegexEntityExtractor object
     */
    Observable<RegexEntityExtractor> getRegexEntityEntityInfoAsync(UUID appId, String versionId, UUID regexEntityId);



    /**
     * Updates the regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityId The regular expression entity extractor ID.
     * @param regexEntityUpdateObject An object containing the new entity name and regex pattern.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateRegexEntityModel(UUID appId, String versionId, UUID regexEntityId, RegexModelUpdateObject regexEntityUpdateObject);

    /**
     * Updates the regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityId The regular expression entity extractor ID.
     * @param regexEntityUpdateObject An object containing the new entity name and regex pattern.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateRegexEntityModelAsync(UUID appId, String versionId, UUID regexEntityId, RegexModelUpdateObject regexEntityUpdateObject);



    /**
     * Deletes a regular expression entity from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityId The regular expression entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteRegexEntityModel(UUID appId, String versionId, UUID regexEntityId);

    /**
     * Deletes a regular expression entity from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param regexEntityId The regular expression entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteRegexEntityModelAsync(UUID appId, String versionId, UUID regexEntityId);



    /**
     * Gets information about the Pattern.Any model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PatternAnyEntityExtractor object if successful.
     */
    PatternAnyEntityExtractor getPatternAnyEntityInfo(UUID appId, String versionId, UUID entityId);

    /**
     * Gets information about the Pattern.Any model in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PatternAnyEntityExtractor object
     */
    Observable<PatternAnyEntityExtractor> getPatternAnyEntityInfoAsync(UUID appId, String versionId, UUID entityId);



    /**
     * Updates the name and explicit (exception) list of a Pattern.Any entity model in a version of the
      *  application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @param patternAnyUpdateObject An object containing the explicit list of the Pattern.Any entity.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updatePatternAnyEntityModel(UUID appId, String versionId, UUID entityId, PatternAnyModelUpdateObject patternAnyUpdateObject);

    /**
     * Updates the name and explicit (exception) list of a Pattern.Any entity model in a version of the
      *  application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @param patternAnyUpdateObject An object containing the explicit list of the Pattern.Any entity.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updatePatternAnyEntityModelAsync(UUID appId, String versionId, UUID entityId, PatternAnyModelUpdateObject patternAnyUpdateObject);



    /**
     * Deletes a Pattern.Any entity extractor from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deletePatternAnyEntityModel(UUID appId, String versionId, UUID entityId);

    /**
     * Deletes a Pattern.Any entity extractor from a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deletePatternAnyEntityModelAsync(UUID appId, String versionId, UUID entityId);



    /**
     * Get one role for a given entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Get one role for a given entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);


    /**
     * Update a role for a given entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateEntityRoleOptionalParameter updateEntityRoleOptionalParameter);

    /**
     * Update a role for a given entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateEntityRoleOptionalParameter updateEntityRoleOptionalParameter);

    /**
     * Update a role for a given entity in a version of the application.
     *
     * @return the first stage of the updateEntityRole call
     */
    ModelsUpdateEntityRoleDefinitionStages.WithAppId updateEntityRole();

    /**
     * Grouping of updateEntityRole definition stages.
     */
    interface ModelsUpdateEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity ID.
             *
             * @return next definition stage
             */
            WithRoleId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdateEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdateEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateEntityRole definition.
     */
    interface ModelsUpdateEntityRoleDefinition extends
        ModelsUpdateEntityRoleDefinitionStages.WithAppId,
        ModelsUpdateEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdateEntityRoleDefinitionStages.WithEntityId,
        ModelsUpdateEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdateEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete an entity role in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Delete an entity role in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);



    /**
     * Get one role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getPrebuiltEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Get one role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getPrebuiltEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);


    /**
     * Update a role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updatePrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updatePrebuiltEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId, UpdatePrebuiltEntityRoleOptionalParameter updatePrebuiltEntityRoleOptionalParameter);

    /**
     * Update a role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updatePrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updatePrebuiltEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId, UpdatePrebuiltEntityRoleOptionalParameter updatePrebuiltEntityRoleOptionalParameter);

    /**
     * Update a role for a given prebuilt entity in a version of the application.
     *
     * @return the first stage of the updatePrebuiltEntityRole call
     */
    ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithAppId updatePrebuiltEntityRole();

    /**
     * Grouping of updatePrebuiltEntityRole definition stages.
     */
    interface ModelsUpdatePrebuiltEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity ID.
             *
             * @return next definition stage
             */
            WithRoleId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updatePrebuiltEntityRole definition.
     */
    interface ModelsUpdatePrebuiltEntityRoleDefinition extends
        ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithAppId,
        ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithEntityId,
        ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdatePrebuiltEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role in a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deletePrebuiltEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Delete a role in a prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deletePrebuiltEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);



    /**
     * Get one role for a given list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getClosedListEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Get one role for a given list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getClosedListEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);


    /**
     * Update a role for a given list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateClosedListEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateClosedListEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateClosedListEntityRoleOptionalParameter updateClosedListEntityRoleOptionalParameter);

    /**
     * Update a role for a given list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateClosedListEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateClosedListEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateClosedListEntityRoleOptionalParameter updateClosedListEntityRoleOptionalParameter);

    /**
     * Update a role for a given list entity in a version of the application.
     *
     * @return the first stage of the updateClosedListEntityRole call
     */
    ModelsUpdateClosedListEntityRoleDefinitionStages.WithAppId updateClosedListEntityRole();

    /**
     * Grouping of updateClosedListEntityRole definition stages.
     */
    interface ModelsUpdateClosedListEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity ID.
             *
             * @return next definition stage
             */
            WithRoleId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdateClosedListEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdateClosedListEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateClosedListEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateClosedListEntityRole definition.
     */
    interface ModelsUpdateClosedListEntityRoleDefinition extends
        ModelsUpdateClosedListEntityRoleDefinitionStages.WithAppId,
        ModelsUpdateClosedListEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdateClosedListEntityRoleDefinitionStages.WithEntityId,
        ModelsUpdateClosedListEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdateClosedListEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role for a given list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteClosedListEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Delete a role for a given list entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteClosedListEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);



    /**
     * Get one role for a given regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getRegexEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Get one role for a given regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getRegexEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);


    /**
     * Update a role for a given regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateRegexEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateRegexEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateRegexEntityRoleOptionalParameter updateRegexEntityRoleOptionalParameter);

    /**
     * Update a role for a given regular expression entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateRegexEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateRegexEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateRegexEntityRoleOptionalParameter updateRegexEntityRoleOptionalParameter);

    /**
     * Update a role for a given regular expression entity in a version of the application.
     *
     * @return the first stage of the updateRegexEntityRole call
     */
    ModelsUpdateRegexEntityRoleDefinitionStages.WithAppId updateRegexEntityRole();

    /**
     * Grouping of updateRegexEntityRole definition stages.
     */
    interface ModelsUpdateRegexEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity ID.
             *
             * @return next definition stage
             */
            WithRoleId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdateRegexEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdateRegexEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateRegexEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateRegexEntityRole definition.
     */
    interface ModelsUpdateRegexEntityRoleDefinition extends
        ModelsUpdateRegexEntityRoleDefinitionStages.WithAppId,
        ModelsUpdateRegexEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdateRegexEntityRoleDefinitionStages.WithEntityId,
        ModelsUpdateRegexEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdateRegexEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role for a given regular expression in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteRegexEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Delete a role for a given regular expression in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteRegexEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);



    /**
     * Get one role for a given composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getCompositeEntityRole(UUID appId, String versionId, UUID cEntityId, UUID roleId);

    /**
     * Get one role for a given composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getCompositeEntityRoleAsync(UUID appId, String versionId, UUID cEntityId, UUID roleId);


    /**
     * Update a role for a given composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param roleId The entity role ID.
     * @param updateCompositeEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateCompositeEntityRole(UUID appId, String versionId, UUID cEntityId, UUID roleId, UpdateCompositeEntityRoleOptionalParameter updateCompositeEntityRoleOptionalParameter);

    /**
     * Update a role for a given composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param roleId The entity role ID.
     * @param updateCompositeEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateCompositeEntityRoleAsync(UUID appId, String versionId, UUID cEntityId, UUID roleId, UpdateCompositeEntityRoleOptionalParameter updateCompositeEntityRoleOptionalParameter);

    /**
     * Update a role for a given composite entity in a version of the application.
     *
     * @return the first stage of the updateCompositeEntityRole call
     */
    ModelsUpdateCompositeEntityRoleDefinitionStages.WithAppId updateCompositeEntityRole();

    /**
     * Grouping of updateCompositeEntityRole definition stages.
     */
    interface ModelsUpdateCompositeEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithCEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify cEntityId.
         */
        interface WithCEntityId {
            /**
             * The composite entity extractor ID.
             *
             * @return next definition stage
             */
            WithRoleId withCEntityId(UUID cEntityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdateCompositeEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdateCompositeEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateCompositeEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateCompositeEntityRole definition.
     */
    interface ModelsUpdateCompositeEntityRoleDefinition extends
        ModelsUpdateCompositeEntityRoleDefinitionStages.WithAppId,
        ModelsUpdateCompositeEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdateCompositeEntityRoleDefinitionStages.WithCEntityId,
        ModelsUpdateCompositeEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdateCompositeEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role for a given composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteCompositeEntityRole(UUID appId, String versionId, UUID cEntityId, UUID roleId);

    /**
     * Delete a role for a given composite entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param cEntityId The composite entity extractor ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteCompositeEntityRoleAsync(UUID appId, String versionId, UUID cEntityId, UUID roleId);



    /**
     * Get one role for a given Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getPatternAnyEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Get one role for a given Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getPatternAnyEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);


    /**
     * Update a role for a given Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updatePatternAnyEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updatePatternAnyEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId, UpdatePatternAnyEntityRoleOptionalParameter updatePatternAnyEntityRoleOptionalParameter);

    /**
     * Update a role for a given Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updatePatternAnyEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updatePatternAnyEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId, UpdatePatternAnyEntityRoleOptionalParameter updatePatternAnyEntityRoleOptionalParameter);

    /**
     * Update a role for a given Pattern.any entity in a version of the application.
     *
     * @return the first stage of the updatePatternAnyEntityRole call
     */
    ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithAppId updatePatternAnyEntityRole();

    /**
     * Grouping of updatePatternAnyEntityRole definition stages.
     */
    interface ModelsUpdatePatternAnyEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity ID.
             *
             * @return next definition stage
             */
            WithRoleId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updatePatternAnyEntityRole definition.
     */
    interface ModelsUpdatePatternAnyEntityRoleDefinition extends
        ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithAppId,
        ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithEntityId,
        ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdatePatternAnyEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role for a given Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deletePatternAnyEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Delete a role for a given Pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deletePatternAnyEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);



    /**
     * Get one role for a given hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getHierarchicalEntityRole(UUID appId, String versionId, UUID hEntityId, UUID roleId);

    /**
     * Get one role for a given hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getHierarchicalEntityRoleAsync(UUID appId, String versionId, UUID hEntityId, UUID roleId);


    /**
     * Update a role for a given hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param roleId The entity role ID.
     * @param updateHierarchicalEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateHierarchicalEntityRole(UUID appId, String versionId, UUID hEntityId, UUID roleId, UpdateHierarchicalEntityRoleOptionalParameter updateHierarchicalEntityRoleOptionalParameter);

    /**
     * Update a role for a given hierarchical entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param roleId The entity role ID.
     * @param updateHierarchicalEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateHierarchicalEntityRoleAsync(UUID appId, String versionId, UUID hEntityId, UUID roleId, UpdateHierarchicalEntityRoleOptionalParameter updateHierarchicalEntityRoleOptionalParameter);

    /**
     * Update a role for a given hierarchical entity in a version of the application.
     *
     * @return the first stage of the updateHierarchicalEntityRole call
     */
    ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithAppId updateHierarchicalEntityRole();

    /**
     * Grouping of updateHierarchicalEntityRole definition stages.
     */
    interface ModelsUpdateHierarchicalEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithHEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify hEntityId.
         */
        interface WithHEntityId {
            /**
             * The hierarchical entity extractor ID.
             *
             * @return next definition stage
             */
            WithRoleId withHEntityId(UUID hEntityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateHierarchicalEntityRole definition.
     */
    interface ModelsUpdateHierarchicalEntityRoleDefinition extends
        ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithAppId,
        ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithHEntityId,
        ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdateHierarchicalEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role for a given hierarchical role in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteHierarchicalEntityRole(UUID appId, String versionId, UUID hEntityId, UUID roleId);

    /**
     * Delete a role for a given hierarchical role in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param hEntityId The hierarchical entity extractor ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteHierarchicalEntityRoleAsync(UUID appId, String versionId, UUID hEntityId, UUID roleId);



    /**
     * Get one role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the EntityRole object if successful.
     */
    EntityRole getCustomEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Get one role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId entity ID.
     * @param roleId entity role ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the EntityRole object
     */
    Observable<EntityRole> getCustomEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);


    /**
     * Update a role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateCustomPrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateCustomPrebuiltEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateCustomPrebuiltEntityRoleOptionalParameter updateCustomPrebuiltEntityRoleOptionalParameter);

    /**
     * Update a role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role ID.
     * @param updateCustomPrebuiltEntityRoleOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateCustomPrebuiltEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId, UpdateCustomPrebuiltEntityRoleOptionalParameter updateCustomPrebuiltEntityRoleOptionalParameter);

    /**
     * Update a role for a given prebuilt entity in a version of the application.
     *
     * @return the first stage of the updateCustomPrebuiltEntityRole call
     */
    ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithAppId updateCustomPrebuiltEntityRole();

    /**
     * Grouping of updateCustomPrebuiltEntityRole definition stages.
     */
    interface ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The entity ID.
             *
             * @return next definition stage
             */
            WithRoleId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify roleId.
         */
        interface WithRoleId {
            /**
             * The entity role ID.
             *
             * @return next definition stage
             */
            ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithExecute withRoleId(UUID roleId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The entity role name.
             *
             * @return next definition stage
             */
            ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithExecute withName(String name);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateCustomPrebuiltEntityRole definition.
     */
    interface ModelsUpdateCustomPrebuiltEntityRoleDefinition extends
        ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithAppId,
        ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithVersionId,
        ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithEntityId,
        ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithRoleId,
        ModelsUpdateCustomPrebuiltEntityRoleDefinitionStages.WithExecute {
    }


    /**
     * Delete a role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteCustomEntityRole(UUID appId, String versionId, UUID entityId, UUID roleId);

    /**
     * Delete a role for a given prebuilt entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The entity ID.
     * @param roleId The entity role Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteCustomEntityRoleAsync(UUID appId, String versionId, UUID entityId, UUID roleId);



    /**
     * Get the explicit (exception) list of the pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity Id.
     * @param itemId The explicit list item Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the ExplicitListItem object if successful.
     */
    ExplicitListItem getExplicitListItem(UUID appId, String versionId, UUID entityId, long itemId);

    /**
     * Get the explicit (exception) list of the pattern.any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity Id.
     * @param itemId The explicit list item Id.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the ExplicitListItem object
     */
    Observable<ExplicitListItem> getExplicitListItemAsync(UUID appId, String versionId, UUID entityId, long itemId);


    /**
     * Updates an explicit (exception) list item for a Pattern.Any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @param itemId The explicit list item ID.
     * @param updateExplicitListItemOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus updateExplicitListItem(UUID appId, String versionId, UUID entityId, long itemId, UpdateExplicitListItemOptionalParameter updateExplicitListItemOptionalParameter);

    /**
     * Updates an explicit (exception) list item for a Pattern.Any entity in a version of the application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The Pattern.Any entity extractor ID.
     * @param itemId The explicit list item ID.
     * @param updateExplicitListItemOptionalParameter the object representing the optional parameters to be set before calling this API
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> updateExplicitListItemAsync(UUID appId, String versionId, UUID entityId, long itemId, UpdateExplicitListItemOptionalParameter updateExplicitListItemOptionalParameter);

    /**
     * Updates an explicit (exception) list item for a Pattern.Any entity in a version of the application.
     *
     * @return the first stage of the updateExplicitListItem call
     */
    ModelsUpdateExplicitListItemDefinitionStages.WithAppId updateExplicitListItem();

    /**
     * Grouping of updateExplicitListItem definition stages.
     */
    interface ModelsUpdateExplicitListItemDefinitionStages {
        /**
         * The stage of the definition to be specify appId.
         */
        interface WithAppId {
            /**
             * The application ID.
             *
             * @return next definition stage
             */
            WithVersionId withAppId(UUID appId);
        }
        /**
         * The stage of the definition to be specify versionId.
         */
        interface WithVersionId {
            /**
             * The version ID.
             *
             * @return next definition stage
             */
            WithEntityId withVersionId(String versionId);
        }
        /**
         * The stage of the definition to be specify entityId.
         */
        interface WithEntityId {
            /**
             * The Pattern.Any entity extractor ID.
             *
             * @return next definition stage
             */
            WithItemId withEntityId(UUID entityId);
        }
        /**
         * The stage of the definition to be specify itemId.
         */
        interface WithItemId {
            /**
             * The explicit list item ID.
             *
             * @return next definition stage
             */
            ModelsUpdateExplicitListItemDefinitionStages.WithExecute withItemId(long itemId);
        }

        /**
         * The stage of the definition which allows for any other optional settings to be specified.
         */
        interface WithAllOptions {
            /**
             * The explicit list item.
             *
             * @return next definition stage
             */
            ModelsUpdateExplicitListItemDefinitionStages.WithExecute withExplicitListItem(String explicitListItem);

        }

        /**
         * The last stage of the definition which will make the operation call.
        */
        interface WithExecute extends ModelsUpdateExplicitListItemDefinitionStages.WithAllOptions {
            /**
             * Execute the request.
             *
             * @return the OperationStatus object if successful.
             */
            OperationStatus execute();

            /**
             * Execute the request asynchronously.
             *
             * @return the observable to the OperationStatus object
             */
            Observable<OperationStatus> executeAsync();
        }
    }

    /**
     * The entirety of updateExplicitListItem definition.
     */
    interface ModelsUpdateExplicitListItemDefinition extends
        ModelsUpdateExplicitListItemDefinitionStages.WithAppId,
        ModelsUpdateExplicitListItemDefinitionStages.WithVersionId,
        ModelsUpdateExplicitListItemDefinitionStages.WithEntityId,
        ModelsUpdateExplicitListItemDefinitionStages.WithItemId,
        ModelsUpdateExplicitListItemDefinitionStages.WithExecute {
    }


    /**
     * Delete an item from the explicit (exception) list for a Pattern.any entity in a version of the
      *  application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The pattern.any entity id.
     * @param itemId The explicit list item which will be deleted.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws ErrorResponseException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the OperationStatus object if successful.
     */
    OperationStatus deleteExplicitListItem(UUID appId, String versionId, UUID entityId, long itemId);

    /**
     * Delete an item from the explicit (exception) list for a Pattern.any entity in a version of the
      *  application.
     *
     * @param appId The application ID.
     * @param versionId The version ID.
     * @param entityId The pattern.any entity id.
     * @param itemId The explicit list item which will be deleted.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the OperationStatus object
     */
    Observable<OperationStatus> deleteExplicitListItemAsync(UUID appId, String versionId, UUID entityId, long itemId);


}
