//----------------------
// <auto-generated>
//     Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
// </auto-generated>
//----------------------

/* tslint:disable */
/* eslint-disable */
// ReSharper disable InconsistentNaming

export module SessionClient {

export class Client {
    private http: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> };
    private baseUrl: string;
    protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;

    constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise<Response> }) {
        this.http = http ? http : window as any;
        this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : "http://localhost:20116";
    }

    /**
     * Retrieve session logs
     * @param id (optional) 
     * @param level (optional) 
     * @param excludedSource (optional) 
     * @param filterText (optional) 
     * @param offset (optional) 
     * @param limit (optional) 
     * @return Successfully retrieved OpenTAP log messages.
     */
    getSessionLogs(id: string | undefined, level: number[] | null | undefined, excludedSource: string[] | null | undefined, filterText: string | null | undefined, offset: number | undefined, limit: number | undefined): Promise<LogList> {
        let url_ = this.baseUrl + "/logs/session?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        if (level !== undefined && level !== null)
            level && level.forEach(item => { url_ += "level=" + encodeURIComponent("" + item) + "&"; });
        if (excludedSource !== undefined && excludedSource !== null)
            excludedSource && excludedSource.forEach(item => { url_ += "excludedSource=" + encodeURIComponent("" + item) + "&"; });
        if (filterText !== undefined && filterText !== null)
            url_ += "filterText=" + encodeURIComponent("" + filterText) + "&";
        if (offset === null)
            throw new Error("The parameter 'offset' cannot be null.");
        else if (offset !== undefined)
            url_ += "offset=" + encodeURIComponent("" + offset) + "&";
        if (limit === null)
            throw new Error("The parameter 'limit' cannot be null.");
        else if (limit !== undefined)
            url_ += "limit=" + encodeURIComponent("" + limit) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetSessionLogs(_response);
        });
    }

    protected processGetSessionLogs(response: Response): Promise<LogList> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = LogList.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<LogList>(null as any);
    }

    /**
     * Retrieve session log indexes
     * @param id (optional) 
     * @param level (optional) 
     * @param excludedSource (optional) 
     * @param filterText (optional) 
     * @param searchText (optional) 
     * @return Logs indexes retrieved
     */
    sessionLogSearch(id: string | undefined, level: number[] | null | undefined, excludedSource: string[] | null | undefined, filterText: string | null | undefined, searchText: string | null | undefined): Promise<number[]> {
        let url_ = this.baseUrl + "/logs/session/search?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        if (level !== undefined && level !== null)
            level && level.forEach(item => { url_ += "level=" + encodeURIComponent("" + item) + "&"; });
        if (excludedSource !== undefined && excludedSource !== null)
            excludedSource && excludedSource.forEach(item => { url_ += "excludedSource=" + encodeURIComponent("" + item) + "&"; });
        if (filterText !== undefined && filterText !== null)
            url_ += "filterText=" + encodeURIComponent("" + filterText) + "&";
        if (searchText !== undefined && searchText !== null)
            url_ += "searchText=" + encodeURIComponent("" + searchText) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSessionLogSearch(_response);
        });
    }

    protected processSessionLogSearch(response: Response): Promise<number[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<number[]>(null as any);
    }

    /**
     * Retrieve log sources
     * @param id (optional) 
     * @return Logs indexes retrieved
     */
    sessionLogSources(id: string | undefined): Promise<string[]> {
        let url_ = this.baseUrl + "/logs/session/sources?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSessionLogSources(_response);
        });
    }

    protected processSessionLogSources(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Retrieve session log counts
     * @param id (optional) 
     * @return Logs indexes retrieved
     */
    sessionLogCounts(id: string | undefined): Promise<{ [key: string]: number; }> {
        let url_ = this.baseUrl + "/logs/session/counts?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSessionLogCounts(_response);
        });
    }

    protected processSessionLogCounts(response: Response): Promise<{ [key: string]: number; }> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (resultData200) {
                result200 = {} as any;
                for (let key in resultData200) {
                    if (resultData200.hasOwnProperty(key))
                        (<any>result200)![key] = resultData200[key] !== undefined ? resultData200[key] : <any>null;
                }
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<{ [key: string]: number; }>(null as any);
    }

    /**
     * Retrieve log severities
     * @return Log levels retrieved
     */
    logLevels(): Promise<{ [key: string]: string; }> {
        let url_ = this.baseUrl + "/logs/levels";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processLogLevels(_response);
        });
    }

    protected processLogLevels(response: Response): Promise<{ [key: string]: string; }> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (resultData200) {
                result200 = {} as any;
                for (let key in resultData200) {
                    if (resultData200.hasOwnProperty(key))
                        (<any>result200)![key] = resultData200[key] !== undefined ? resultData200[key] : <any>null;
                }
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<{ [key: string]: string; }>(null as any);
    }

    /**
     * Retrieve testplan run logs
     * @param id (optional) 
     * @param level (optional) 
     * @param excludedSource (optional) 
     * @param filterText (optional) 
     * @param offset (optional) 
     * @param limit (optional) 
     * @return Logs retrieved
     */
    testPlanRunLogs(id: string | undefined, level: number[] | null | undefined, excludedSource: string[] | null | undefined, filterText: string | null | undefined, offset: number | undefined, limit: number | undefined): Promise<LogList> {
        let url_ = this.baseUrl + "/logs/testplanrun?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        if (level !== undefined && level !== null)
            level && level.forEach(item => { url_ += "level=" + encodeURIComponent("" + item) + "&"; });
        if (excludedSource !== undefined && excludedSource !== null)
            excludedSource && excludedSource.forEach(item => { url_ += "excludedSource=" + encodeURIComponent("" + item) + "&"; });
        if (filterText !== undefined && filterText !== null)
            url_ += "filterText=" + encodeURIComponent("" + filterText) + "&";
        if (offset === null)
            throw new Error("The parameter 'offset' cannot be null.");
        else if (offset !== undefined)
            url_ += "offset=" + encodeURIComponent("" + offset) + "&";
        if (limit === null)
            throw new Error("The parameter 'limit' cannot be null.");
        else if (limit !== undefined)
            url_ += "limit=" + encodeURIComponent("" + limit) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processTestPlanRunLogs(_response);
        });
    }

    protected processTestPlanRunLogs(response: Response): Promise<LogList> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = LogList.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<LogList>(null as any);
    }

    /**
     * Search testplan run logs
     * @param id (optional) 
     * @param level (optional) 
     * @param excludedSource (optional) 
     * @param filterText (optional) 
     * @param searchText (optional) 
     * @return Logs indexes retrieved
     */
    testPlanRunLogSearch(id: string | undefined, level: number[] | null | undefined, excludedSource: string[] | null | undefined, filterText: string | null | undefined, searchText: string | null | undefined): Promise<number[]> {
        let url_ = this.baseUrl + "/logs/testplanrun/search?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        if (level !== undefined && level !== null)
            level && level.forEach(item => { url_ += "level=" + encodeURIComponent("" + item) + "&"; });
        if (excludedSource !== undefined && excludedSource !== null)
            excludedSource && excludedSource.forEach(item => { url_ += "excludedSource=" + encodeURIComponent("" + item) + "&"; });
        if (filterText !== undefined && filterText !== null)
            url_ += "filterText=" + encodeURIComponent("" + filterText) + "&";
        if (searchText !== undefined && searchText !== null)
            url_ += "searchText=" + encodeURIComponent("" + searchText) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processTestPlanRunLogSearch(_response);
        });
    }

    protected processTestPlanRunLogSearch(response: Response): Promise<number[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<number[]>(null as any);
    }

    /**
     * Retrieve testplan run log sources
     * @param id (optional) 
     * @return Logs indexes retrieved
     */
    testPlanRunLogSources(id: string | undefined): Promise<string[]> {
        let url_ = this.baseUrl + "/logs/testplanrun/sources?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processTestPlanRunLogSources(_response);
        });
    }

    protected processTestPlanRunLogSources(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Retrieve testplan run log count
     * @param id (optional) 
     * @return Logs indexes retrieved
     */
    testPlanRunLogCounts(id: string | undefined): Promise<{ [key: string]: number; }> {
        let url_ = this.baseUrl + "/logs/testplanrun/counts?";
        if (id === null)
            throw new Error("The parameter 'id' cannot be null.");
        else if (id !== undefined)
            url_ += "id=" + encodeURIComponent("" + id) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processTestPlanRunLogCounts(_response);
        });
    }

    protected processTestPlanRunLogCounts(response: Response): Promise<{ [key: string]: number; }> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (resultData200) {
                result200 = {} as any;
                for (let key in resultData200) {
                    if (resultData200.hasOwnProperty(key))
                        (<any>result200)![key] = resultData200[key] !== undefined ? resultData200[key] : <any>null;
                }
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<{ [key: string]: number; }>(null as any);
    }

    /**
     * Get status, with an optional testplan execution completion timeout
     * @param timeout (optional) 
     */
    getStatus(timeout: number | null | undefined): Promise<RunStatus> {
        let url_ = this.baseUrl + "/status?";
        if (timeout !== undefined && timeout !== null)
            url_ += "timeout=" + encodeURIComponent("" + timeout) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetStatus(_response);
        });
    }

    protected processGetStatus(response: Response): Promise<RunStatus> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = RunStatus.fromJS(resultData200);
            return result200;
            });
        } else if (status === 202) {
            return response.text().then((_responseText) => {
            return throwException("A server side error occurred.", status, _responseText, _headers);
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<RunStatus>(null as any);
    }

    /**
     * Load a .TapPlan from the OpenTAP installation.
     * @return Test plan loaded. List of load errors is returned.
     */
    loadTestPlanFile(testPlanPath: string): Promise<string[]> {
        let url_ = this.baseUrl + "/edit/plan/file";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(testPlanPath);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processLoadTestPlanFile(_response);
        });
    }

    protected processLoadTestPlanFile(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Test plan load failed", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Upload .TapPlan XML
     * @param testPlanName (optional) 
     * @return Test plan loaded
     */
    setTestPlanXML(testPlanName: string | null | undefined, planXML: string): Promise<void> {
        let url_ = this.baseUrl + "/edit/plan/xml";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(planXML);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "TestPlanName": testPlanName !== undefined && testPlanName !== null ? "" + testPlanName : "",
                "Content-Type": "application/json",
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestPlanXML(_response);
        });
    }

    protected processSetTestPlanXML(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Test plan load failed", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Retrieve loaded test plan XML
     * @return Test plan retrieved
     */
    getTestPlanXML(): Promise<string> {
        let url_ = this.baseUrl + "/edit/plan/xml";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestPlanXML(_response);
        });
    }

    protected processGetTestPlanXML(response: Response): Promise<string> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
                result200 = resultData200 !== undefined ? resultData200 : <any>null;
    
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string>(null as any);
    }

    /**
     * Upload test plan XML
     * @param testPlanName (optional) 
     * @return Test plan loaded. List of load errors is returned.
     */
    setTestPlanXMLNonInteractive(testPlanName: string | null | undefined, planXML: string): Promise<string[]> {
        let url_ = this.baseUrl + "/edit/plan/xml/noninteractive?";
        if (testPlanName !== undefined && testPlanName !== null)
            url_ += "TestPlanName=" + encodeURIComponent("" + testPlanName) + "&";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(planXML);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestPlanXMLNonInteractive(_response);
        });
    }

    protected processSetTestPlanXMLNonInteractive(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Test plan load failed", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Load test plan using a test plan TapPackage from a repository
     * @return Test plan loaded. List of load errors is returned.
     */
    loadTestPlanFromRepository(packageReference: RepositoryPackageReference): Promise<string[]> {
        let url_ = this.baseUrl + "/edit/plan/repository/load";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(packageReference);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processLoadTestPlanFromRepository(_response);
        });
    }

    protected processLoadTestPlanFromRepository(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Test plan load failed", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Save currently loaded test plan to a repository
     * @return Test plan uploaded.
     */
    saveTestPlanToRepository(packageReference: RepositoryPackageDefinition): Promise<void> {
        let url_ = this.baseUrl + "/edit/plan/repository/save";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(packageReference);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSaveTestPlanToRepository(_response);
        });
    }

    protected processSaveTestPlanToRepository(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Test plan upload failed", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Test plan resources opened
     * @return Test plan resources opened.
     */
    resourcesOpen(): Promise<TestPlan> {
        let url_ = this.baseUrl + "/edit/plan/resources/open";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processResourcesOpen(_response);
        });
    }

    protected processResourcesOpen(response: Response): Promise<TestPlan> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestPlan.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestPlan>(null as any);
    }

    /**
     * Test plan resources closed
     * @return Test plan resources closed.
     */
    resourcesClose(): Promise<TestPlan> {
        let url_ = this.baseUrl + "/edit/plan/resources/close";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processResourcesClose(_response);
        });
    }

    protected processResourcesClose(response: Response): Promise<TestPlan> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestPlan.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestPlan>(null as any);
    }

    /**
     * Retrieve test plan or test step settings
     * @return Test step retrieved
     */
    getSettings(contextId: string): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/settings/{contextId}";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetSettings(_response);
        });
    }

    protected processGetSettings(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * Change test plan or test step settings
     * @return Settings changed
     */
    setSettings(contextId: string, settings: Setting[]): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/settings/{contextId}";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(settings);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetSettings(_response);
        });
    }

    protected processSetSettings(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * Retrieve test plan structure
     * @param properties (optional) 
     * @return Test plan retrieved
     */
    getTestPlan(properties: string[] | null | undefined): Promise<TestPlan> {
        let url_ = this.baseUrl + "/edit/plan/steps?";
        if (properties !== undefined && properties !== null)
            properties && properties.forEach(item => { url_ += "properties=" + encodeURIComponent("" + item) + "&"; });
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestPlan(_response);
        });
    }

    protected processGetTestPlan(response: Response): Promise<TestPlan> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestPlan.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestPlan>(null as any);
    }

    /**
     * Change test plan structure
     * @return Test plan changed
     */
    setTestPlan(plan: TestPlan): Promise<TestPlan> {
        let url_ = this.baseUrl + "/edit/plan/steps";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(plan);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestPlan(_response);
        });
    }

    protected processSetTestPlan(response: Response): Promise<TestPlan> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestPlan.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestPlan>(null as any);
    }

    /**
     * Retrieve all validation errors present in the test plan
     * @return Retrieved validation errors for loaded TestPlan
     */
    getValidationErrors(): Promise<TestStepValidationError[]> {
        let url_ = this.baseUrl + "/edit/plan/validation";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetValidationErrors(_response);
        });
    }

    protected processGetValidationErrors(response: Response): Promise<TestStepValidationError[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(TestStepValidationError.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestStepValidationError[]>(null as any);
    }

    /**
     * Retrieve or change common test step settings
     * @return Common test step settings retrieved or changed
     */
    commonStepSettings(commonSettings: CommonSettings): Promise<CommonSettings> {
        let url_ = this.baseUrl + "/edit/plan/steps/common";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(commonSettings);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processCommonStepSettings(_response);
        });
    }

    protected processCommonStepSettings(response: Response): Promise<CommonSettings> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = CommonSettings.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<CommonSettings>(null as any);
    }

    /**
     * Retrieve or invoke common test step settings context menu items
     * @return Get context menu (right-click menu) for a property in the testplan or teststep
     */
    commonStepSettingsContextMenu(propertyName: string | null, commonContext: CommonContext): Promise<CommonContext> {
        let url_ = this.baseUrl + "/edit/settings/{propertyName}/contextmenu/common";
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(commonContext);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processCommonStepSettingsContextMenu(_response);
        });
    }

    protected processCommonStepSettingsContextMenu(response: Response): Promise<CommonContext> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = CommonContext.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<CommonContext>(null as any);
    }

    /**
     * Retrieve all pending user input IDs
     * @return Retrieved pending user inputs
     */
    getUserInputs(): Promise<string[]> {
        let url_ = this.baseUrl + "/edit/userinputs";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetUserInputs(_response);
        });
    }

    protected processGetUserInputs(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Errors occurred while retriving user inputs", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Retrieve pending user input based on ID
     * @return Retrieved pending user input
     */
    getUserInput(id: string): Promise<Interaction> {
        let url_ = this.baseUrl + "/edit/userinputs/{id}";
        if (id === undefined || id === null)
            throw new Error("The parameter 'id' must be defined.");
        url_ = url_.replace("{id}", encodeURIComponent("" + id));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetUserInput(_response);
        });
    }

    protected processGetUserInput(response: Response): Promise<Interaction> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = Interaction.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Errors occurred while retriving user input", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Interaction>(null as any);
    }

    /**
     * Modify or answer pending user input based on ID
     */
    setUserInput(id: string, interaction: Interaction): Promise<Interaction> {
        let url_ = this.baseUrl + "/edit/userinputs/{id}";
        if (id === undefined || id === null)
            throw new Error("The parameter 'id' must be defined.");
        url_ = url_.replace("{id}", encodeURIComponent("" + id));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(interaction);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetUserInput(_response);
        });
    }

    protected processSetUserInput(response: Response): Promise<Interaction> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = Interaction.fromJS(resultData200);
            return result200;
            });
        } else if (status === 202) {
            return response.text().then((_responseText) => {
            let result202: any = null;
            let resultData202 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result202 = Interaction.fromJS(resultData202);
            return result202;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Interaction>(null as any);
    }

    /**
     * Property context menu
     * @return Get context menu (right-click menu) for a property in the testplan or teststep
     */
    getContextMenu(contextId: string, propertyName: string | null): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/settings/{contextId}/{propertyName}/contextmenu";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetContextMenu(_response);
        });
    }

    protected processGetContextMenu(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * Property context menu
     * @return Set context menu (right-click menu) for a property in the testplan or teststep
     */
    setContextMenu(contextId: string, propertyName: string | null, contextMenu: Setting[]): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/settings/{contextId}/{propertyName}/contextmenu";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(contextMenu);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetContextMenu(_response);
        });
    }

    protected processSetContextMenu(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * Get data grid
     * @return Get data grid
     */
    getDataGrid(contextId: string, propertyName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/datagrid/{contextId}/{propertyName}";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetDataGrid(_response);
        });
    }

    protected processGetDataGrid(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Set data grid
     * @return Set data grid
     */
    setDataGrid(contextId: string, propertyName: string | null, dataGridControl: DataGridControl): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/datagrid/{contextId}/{propertyName}";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(dataGridControl);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetDataGrid(_response);
        });
    }

    protected processSetDataGrid(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Add item to data grid
     * @return Add data grid item
     */
    addDataGridItemType(contextId: string, propertyName: string | null, typeName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/datagrid/{contextId}/{propertyName}/new/{typeName}";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        if (typeName === undefined || typeName === null)
            throw new Error("The parameter 'typeName' must be defined.");
        url_ = url_.replace("{typeName}", encodeURIComponent("" + typeName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddDataGridItemType(_response);
        });
    }

    protected processAddDataGridItemType(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Add item to data grid
     * @return Add data grid item
     */
    addDataGridItem(contextId: string, propertyName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/datagrid/{contextId}/{propertyName}/new";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddDataGridItem(_response);
        });
    }

    protected processAddDataGridItem(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Get item types available in the data grid
     * @return Add data grid item
     */
    getDataGridTypes(contextId: string, propertyName: string | null): Promise<ListItemType[]> {
        let url_ = this.baseUrl + "/edit/datagrid/{contextId}/{propertyName}/availabletypes";
        if (contextId === undefined || contextId === null)
            throw new Error("The parameter 'contextId' must be defined.");
        url_ = url_.replace("{contextId}", encodeURIComponent("" + contextId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetDataGridTypes(_response);
        });
    }

    protected processGetDataGridTypes(response: Response): Promise<ListItemType[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ListItemType.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ListItemType[]>(null as any);
    }

    /**
     * Get installed files to be used in FilePaths
     * @param extension (optional) 
     * @return Get installed files
     */
    getInstalledFiles(extension: string | null | undefined): Promise<InstalledFile[]> {
        let url_ = this.baseUrl + "/edit/files?";
        if (extension !== undefined && extension !== null)
            url_ += "extension=" + encodeURIComponent("" + extension) + "&";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetInstalledFiles(_response);
        });
    }

    protected processGetInstalledFiles(response: Response): Promise<InstalledFile[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(InstalledFile.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<InstalledFile[]>(null as any);
    }

    /**
     * Retrieve static available step type information.
     * @return StepTypes retrieved
     */
    getTestStepTypes(): Promise<TestStepType[]> {
        let url_ = this.baseUrl + "/edit/plan/steps/steptypes";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestStepTypes(_response);
        });
    }

    protected processGetTestStepTypes(response: Response): Promise<TestStepType[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(TestStepType.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestStepType[]>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/plan/repository/load (LoadTestPlanFromRepository) instead
     * @return Test plan loaded. List of load errors is returned.
     * @deprecated
     */
    loadTestPlanFromRepositoryReference(packageReference: RepositoryPackageReference): Promise<string[]> {
        let url_ = this.baseUrl + "/edit/plan/packagereference";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(packageReference);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processLoadTestPlanFromRepositoryReference(_response);
        });
    }

    protected processLoadTestPlanFromRepositoryReference(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Test plan load failed", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId} (GetSettings) instead
     * @return Test step retrieved
     * @deprecated
     */
    getTestStep(stepId: string): Promise<TestStep> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestStep(_response);
        });
    }

    protected processGetTestStep(response: Response): Promise<TestStep> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestStep.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestStep>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId} (SetSettings) instead
     * @return Test step changed
     * @deprecated
     */
    setTestStep(stepId: string, step: TestStep): Promise<TestStep> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(step);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestStep(_response);
        });
    }

    protected processSetTestStep(response: Response): Promise<TestStep> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestStep.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("Error occurred", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestStep>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId} (GetSettings) instead
     * @return Get testplan properties
     * @deprecated
     */
    getTestPlanSettings(): Promise<TestPlan> {
        let url_ = this.baseUrl + "/edit/plan";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestPlanSettings(_response);
        });
    }

    protected processGetTestPlanSettings(response: Response): Promise<TestPlan> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestPlan.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestPlan>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId} (SetSettings) instead
     * @return Set testplan properties
     * @deprecated
     */
    setTestPlanSettings(testPlan: TestPlan): Promise<TestPlan> {
        let url_ = this.baseUrl + "/edit/plan";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(testPlan);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestPlanSettings(_response);
        });
    }

    protected processSetTestPlanSettings(response: Response): Promise<TestPlan> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = TestPlan.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<TestPlan>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId}/{propertyName}/contextmenu (GetContextMenu) instead
     * @return Get context menu (right-click menu) for a property in a step
     * @deprecated
     */
    getTestStepContextMenu(stepId: string, propertyName: string | null): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/contextmenu";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestStepContextMenu(_response);
        });
    }

    protected processGetTestStepContextMenu(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId}/{propertyName}/contextmenu (SetContextMenu) instead
     * @return Set context menu (right-click menu) for a property in a step
     * @deprecated
     */
    setTestStepContextMenu(stepId: string, propertyName: string | null, contextMenu: Setting[]): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/contextmenu";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(contextMenu);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestStepContextMenu(_response);
        });
    }

    protected processSetTestStepContextMenu(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId}/{propertyName}/contextmenu (GetContextMenu) instead
     * @return Get context menu (right-click menu) for a property in the testplan
     * @deprecated
     */
    getTestPlanContextMenu(propertyName: string | null): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/plan/{propertyName}/contextmenu";
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetTestPlanContextMenu(_response);
        });
    }

    protected processGetTestPlanContextMenu(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/settings/{contextId}/{propertyName}/contextmenu (SetContextMenu) instead
     * @return Set context menu (right-click menu) for a property in the testplan
     * @deprecated
     */
    setTestPlanContextMenu(propertyName: string | null, contextMenu: Setting[]): Promise<Setting[]> {
        let url_ = this.baseUrl + "/edit/plan/{propertyName}/contextmenu";
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(contextMenu);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetTestPlanContextMenu(_response);
        });
    }

    protected processSetTestPlanContextMenu(response: Response): Promise<Setting[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(Setting.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Setting[]>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/datagrid/{contextId}/{propertyName} (GetDataGrid) instead
     * @return Get data grid
     * @deprecated
     */
    getDataGridDeprecated(stepId: string, propertyName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/datagrid";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetDataGridDeprecated(_response);
        });
    }

    protected processGetDataGridDeprecated(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/datagrid/{contextId}/{propertyName} (SetDataGrid) instead
     * @return Set data grid
     * @deprecated
     */
    setDataGridDeprecated(stepId: string, propertyName: string | null, dataGridControl: DataGridControl): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/datagrid";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(dataGridControl);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetDataGridDeprecated(_response);
        });
    }

    protected processSetDataGridDeprecated(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * DEPRECATED. Use //edit/datagrid/{contextId}/{propertyName}/new/{typeName} (AddDataGridItemType) instead
     * @return Add data grid item
     * @deprecated
     */
    addDataGridItemTypeDeprecated(stepId: string, propertyName: string | null, typeName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/datagrid/new/{typeName}";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        if (typeName === undefined || typeName === null)
            throw new Error("The parameter 'typeName' must be defined.");
        url_ = url_.replace("{typeName}", encodeURIComponent("" + typeName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddDataGridItemTypeDeprecated(_response);
        });
    }

    protected processAddDataGridItemTypeDeprecated(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/datagrid/{contextId}/{propertyName}/new (AddDataGridItem) instead
     * @return Add data grid item
     * @deprecated
     */
    addDataGridItemDeprecated(stepId: string, propertyName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/datagrid/new";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddDataGridItemDeprecated(_response);
        });
    }

    protected processAddDataGridItemDeprecated(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * DEPRECATED. Use /edit/datagrid/{contextId}/{propertyName}/availabletypes (GetDataGridTypes) instead
     * @return Add data grid item
     * @deprecated
     */
    getDataGridTypesDeprecated(stepId: string, propertyName: string | null): Promise<ListItemType[]> {
        let url_ = this.baseUrl + "/edit/plan/steps/{stepId}/{propertyName}/datagrid/availabletypes";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetDataGridTypesDeprecated(_response);
        });
    }

    protected processGetDataGridTypesDeprecated(response: Response): Promise<ListItemType[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ListItemType.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ListItemType[]>(null as any);
    }

    /**
     * Pause test plan execution at next possible test step
     */
    setPauseNext(): Promise<void> {
        let url_ = this.baseUrl + "/execute/break";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetPauseNext(_response);
        });
    }

    protected processSetPauseNext(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Retrieve breakpoints set in test plan
     */
    getBreakpoints(): Promise<BreakPoints> {
        let url_ = this.baseUrl + "/execute/breakpoints";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetBreakpoints(_response);
        });
    }

    protected processGetBreakpoints(response: Response): Promise<BreakPoints> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = BreakPoints.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<BreakPoints>(null as any);
    }

    /**
     * Set breakpoints in test plan
     */
    setBreakpoints(breakPointsDto: BreakPoints): Promise<BreakPoints> {
        let url_ = this.baseUrl + "/execute/breakpoints";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(breakPointsDto);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetBreakpoints(_response);
        });
    }

    protected processSetBreakpoints(response: Response): Promise<BreakPoints> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = BreakPoints.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<BreakPoints>(null as any);
    }

    /**
     * Jump test plan execution to step. Execution state must be 'breaking'.
     */
    setJumpToStep(stepId: string): Promise<void> {
        let url_ = this.baseUrl + "/execute/jump/{stepId}";
        if (stepId === undefined || stepId === null)
            throw new Error("The parameter 'stepId' must be defined.");
        url_ = url_.replace("{stepId}", encodeURIComponent("" + stepId));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetJumpToStep(_response);
        });
    }

    protected processSetJumpToStep(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Execute test plan
     */
    runTestPlan(): Promise<RunStatus> {
        let url_ = this.baseUrl + "/execute";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processRunTestPlan(_response);
        });
    }

    protected processRunTestPlan(response: Response): Promise<RunStatus> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = RunStatus.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<RunStatus>(null as any);
    }

    /**
     * Execute test plan with attaching metadata
     */
    runTestPlanMetadata(parameters: Parameter[]): Promise<RunStatus> {
        let url_ = this.baseUrl + "/execute/metadata";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(parameters);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processRunTestPlanMetadata(_response);
        });
    }

    protected processRunTestPlanMetadata(response: Response): Promise<RunStatus> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = RunStatus.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<RunStatus>(null as any);
    }

    /**
     * Abort test plan execution
     */
    abortTestPlan(): Promise<void> {
        let url_ = this.baseUrl + "/execute/abort";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAbortTestPlan(_response);
        });
    }

    protected processAbortTestPlan(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Shuts down session
     */
    shutdown(): Promise<void> {
        let url_ = this.baseUrl + "/session";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "DELETE",
            headers: {
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processShutdown(_response);
        });
    }

    protected processShutdown(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Retrieves installed packages in this session
     */
    getImage(): Promise<Image> {
        let url_ = this.baseUrl + "/session/image";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetImage(_response);
        });
    }

    protected processGetImage(response: Response): Promise<Image> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = Image.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Image>(null as any);
    }

    /**
     * Retrieves session readiness
     */
    getReadiness(): Promise<void> {
        let url_ = this.baseUrl + "/session/readiness";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetReadiness(_response);
        });
    }

    protected processGetReadiness(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            return throwException("A server side error occurred.", status, _responseText, _headers);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Retrieves watchdog
     */
    getWatchDog(): Promise<WatchDog> {
        let url_ = this.baseUrl + "/session/watchdog";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetWatchDog(_response);
        });
    }

    protected processGetWatchDog(response: Response): Promise<WatchDog> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = WatchDog.fromJS(resultData200);
            return result200;
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<WatchDog>(null as any);
    }

    /**
     * Sets a new watchdog
     */
    setWatchDog(watchDog: WatchDog): Promise<WatchDog> {
        let url_ = this.baseUrl + "/session/watchdog";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(watchDog);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetWatchDog(_response);
        });
    }

    protected processSetWatchDog(response: Response): Promise<WatchDog> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = WatchDog.fromJS(resultData200);
            return result200;
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<WatchDog>(null as any);
    }

    /**
     * Links to other applications or services
     */
    getLinks(): Promise<Links> {
        let url_ = this.baseUrl + "/links";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetLinks(_response);
        });
    }

    protected processGetLinks(response: Response): Promise<Links> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = Links.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<Links>(null as any);
    }

    /**
     * Retrieve component settings overview
     */
    getComponentSettingsOverview(): Promise<ComponentSettingsIdentifier[]> {
        let url_ = this.baseUrl + "/componentsettings";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettingsOverview(_response);
        });
    }

    protected processGetComponentSettingsOverview(response: Response): Promise<ComponentSettingsIdentifier[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ComponentSettingsIdentifier.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ComponentSettingsIdentifier[]>(null as any);
    }

    /**
     * Change componentsettings
     */
    setComponentSettings(groupName: string | null, name: string | null, returnedSettings: ComponentSettingsBase): Promise<ComponentSettingsBase> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(returnedSettings);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetComponentSettings(_response);
        });
    }

    protected processSetComponentSettings(response: Response): Promise<ComponentSettingsBase> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = ComponentSettingsBase.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ComponentSettingsBase>(null as any);
    }

    /**
     * Retrieve componentsettings
     */
    getComponentSettings(groupName: string | null, name: string | null): Promise<ComponentSettingsBase> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettings(_response);
        });
    }

    protected processGetComponentSettings(response: Response): Promise<ComponentSettingsBase> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = ComponentSettingsBase.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ComponentSettingsBase>(null as any);
    }

    /**
     * Retrieve componentsettings list item
     */
    getComponentSettingsListItem(groupName: string | null, name: string | null, index: number): Promise<ComponentSettingsListItem> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettingsListItem(_response);
        });
    }

    protected processGetComponentSettingsListItem(response: Response): Promise<ComponentSettingsListItem> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = ComponentSettingsListItem.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ComponentSettingsListItem>(null as any);
    }

    /**
     * Set componentsettings list item settings
     */
    setComponentSettingsListItem(groupName: string | null, name: string | null, index: number, item: ComponentSettingsListItem): Promise<ComponentSettingsListItem> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(item);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetComponentSettingsListItem(_response);
        });
    }

    protected processSetComponentSettingsListItem(response: Response): Promise<ComponentSettingsListItem> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = ComponentSettingsListItem.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ComponentSettingsListItem>(null as any);
    }

    /**
     * Get component setting data grid
     * @return Get component setting data grid
     */
    getComponentSettingDataGrid(groupName: string | null, name: string | null, index: number, propertyName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}/{propertyName}/datagrid";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettingDataGrid(_response);
        });
    }

    protected processGetComponentSettingDataGrid(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Set component setting data grid
     * @return Set data grid
     */
    setComponentSettingDataGrid(groupName: string | null, name: string | null, index: number, propertyName: string | null, dataGridControl: DataGridControl): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}/{propertyName}/datagrid";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(dataGridControl);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetComponentSettingDataGrid(_response);
        });
    }

    protected processSetComponentSettingDataGrid(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Add component setting item to data grid
     * @return Add component setting data grid item
     */
    addComponentSettingDataGridItemType(groupName: string | null, name: string | null, index: number, propertyName: string | null, typeName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}/{propertyName}/datagrid/new/{typeName}";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        if (typeName === undefined || typeName === null)
            throw new Error("The parameter 'typeName' must be defined.");
        url_ = url_.replace("{typeName}", encodeURIComponent("" + typeName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddComponentSettingDataGridItemType(_response);
        });
    }

    protected processAddComponentSettingDataGridItemType(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Add component setting item to data grid
     * @return Add component setting data grid item
     */
    addComponentSettingDataGridItem(groupName: string | null, name: string | null, index: number, propertyName: string | null): Promise<DataGridControl> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}/{propertyName}/datagrid/new";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddComponentSettingDataGridItem(_response);
        });
    }

    protected processAddComponentSettingDataGridItem(response: Response): Promise<DataGridControl> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = DataGridControl.fromJS(resultData200);
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<DataGridControl>(null as any);
    }

    /**
     * Get item types available in the component setting data grid
     * @return Get component setting data grid types
     */
    getComponentSettingDataGridTypes(groupName: string | null, name: string | null, index: number, propertyName: string | null): Promise<ListItemType[]> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/{index}/{propertyName}/datagrid/availabletypes";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (index === undefined || index === null)
            throw new Error("The parameter 'index' must be defined.");
        url_ = url_.replace("{index}", encodeURIComponent("" + index));
        if (propertyName === undefined || propertyName === null)
            throw new Error("The parameter 'propertyName' must be defined.");
        url_ = url_.replace("{propertyName}", encodeURIComponent("" + propertyName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettingDataGridTypes(_response);
        });
    }

    protected processGetComponentSettingDataGridTypes(response: Response): Promise<ListItemType[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ListItemType.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ListItemType[]>(null as any);
    }

    /**
     * Change componentsettings profiles
     */
    setComponentSettingsProfiles(returnedSettings: ProfileGroup[]): Promise<ProfileGroup[]> {
        let url_ = this.baseUrl + "/componentsettings/profiles";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(returnedSettings);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSetComponentSettingsProfiles(_response);
        });
    }

    protected processSetComponentSettingsProfiles(response: Response): Promise<ProfileGroup[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ProfileGroup.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ProfileGroup[]>(null as any);
    }

    /**
     * Get componentsettings profiles
     */
    getComponentSettingsProfiles(): Promise<ProfileGroup[]> {
        let url_ = this.baseUrl + "/componentsettings/profiles";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettingsProfiles(_response);
        });
    }

    protected processGetComponentSettingsProfiles(response: Response): Promise<ProfileGroup[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ProfileGroup.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ProfileGroup[]>(null as any);
    }

    /**
     * Upload exported OpenTAP Settings files
     * @param file (optional) 
     */
    uploadComponentSettings(file: FileParameter | null | undefined): Promise<void> {
        let url_ = this.baseUrl + "/componentsettings/upload";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = new FormData();
        if (file !== null && file !== undefined)
            content_.append("file", file.data, file.fileName ? file.fileName : "file");

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processUploadComponentSettings(_response);
        });
    }

    protected processUploadComponentSettings(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * DEPRECATED: Use /componentsettings/load (LoadComponentSettingsFromRepository) instead
     * @deprecated
     */
    loadComponentSettingsFromPackageReference(packageReference: RepositoryPackageReference): Promise<ErrorResponse[]> {
        let url_ = this.baseUrl + "/componentsettings/packagereference";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(packageReference);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processLoadComponentSettingsFromPackageReference(_response);
        });
    }

    protected processLoadComponentSettingsFromPackageReference(response: Response): Promise<ErrorResponse[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ErrorResponse.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ErrorResponse[]>(null as any);
    }

    /**
     * Load a component settings TapPackage by referencing a package in a package repository
     */
    loadComponentSettingsFromRepository(packageReference: RepositoryPackageReference): Promise<ErrorResponse[]> {
        let url_ = this.baseUrl + "/componentsettings/repository/load";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(packageReference);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processLoadComponentSettingsFromRepository(_response);
        });
    }

    protected processLoadComponentSettingsFromRepository(response: Response): Promise<ErrorResponse[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ErrorResponse.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ErrorResponse[]>(null as any);
    }

    /**
     * Save a TapPackage containing component settings in a package repository
     * @return Settings TapPackage uploaded.
     */
    saveComponentSettingsToRepository(repositoryPackageDefinition: RepositorySettingsPackageDefinition): Promise<void> {
        let url_ = this.baseUrl + "/componentsettings/repository/save";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(repositoryPackageDefinition);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processSaveComponentSettingsToRepository(_response);
        });
    }

    protected processSaveComponentSettingsToRepository(response: Response): Promise<void> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            return;
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<void>(null as any);
    }

    /**
     * Retrieve types available to be added to specified component settings list
     */
    getComponentSettingsListAvailableTypes(groupName: string | null, name: string | null): Promise<ListItemType[]> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/types";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetComponentSettingsListAvailableTypes(_response);
        });
    }

    protected processGetComponentSettingsListAvailableTypes(response: Response): Promise<ListItemType[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(ListItemType.fromJS(item));
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ListItemType[]>(null as any);
    }

    /**
     * Adds a new item to a component settings list
     */
    addComponentSettingsListItem(groupName: string | null, name: string | null, typeName: string | null): Promise<ComponentSettingsBase> {
        let url_ = this.baseUrl + "/componentsettings/{groupName}/{name}/item/new/{typeName}";
        if (groupName === undefined || groupName === null)
            throw new Error("The parameter 'groupName' must be defined.");
        url_ = url_.replace("{groupName}", encodeURIComponent("" + groupName));
        if (name === undefined || name === null)
            throw new Error("The parameter 'name' must be defined.");
        url_ = url_.replace("{name}", encodeURIComponent("" + name));
        if (typeName === undefined || typeName === null)
            throw new Error("The parameter 'typeName' must be defined.");
        url_ = url_.replace("{typeName}", encodeURIComponent("" + typeName));
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "POST",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processAddComponentSettingsListItem(_response);
        });
    }

    protected processAddComponentSettingsListItem(response: Response): Promise<ComponentSettingsBase> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result200 = ComponentSettingsBase.fromJS(resultData200);
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<ComponentSettingsBase>(null as any);
    }

    /**
     * Retrieve settings types used in creating a Settings TapPackage
     */
    getSettingsTypes(): Promise<string[]> {
        let url_ = this.baseUrl + "/componentsettings/types";
        url_ = url_.replace(/[?&]$/, "");

        let options_: RequestInit = {
            method: "GET",
            headers: {
                "Accept": "application/json"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processGetSettingsTypes(_response);
        });
    }

    protected processGetSettingsTypes(response: Response): Promise<string[]> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200) {
            return response.text().then((_responseText) => {
            let result200: any = null;
            let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            if (Array.isArray(resultData200)) {
                result200 = [] as any;
                for (let item of resultData200)
                    result200!.push(item);
            }
            else {
                result200 = <any>null;
            }
            return result200;
            });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<string[]>(null as any);
    }

    /**
     * Download a TapPackage containing settings files
     */
    downloadSettingsPackage(settingsTapPackage: SettingsTapPackage): Promise<FileResponse> {
        let url_ = this.baseUrl + "/componentsettings/download";
        url_ = url_.replace(/[?&]$/, "");

        const content_ = JSON.stringify(settingsTapPackage);

        let options_: RequestInit = {
            body: content_,
            method: "POST",
            headers: {
                "Content-Type": "application/json",
                "Accept": "application/octet-stream"
            }
        };

        return this.http.fetch(url_, options_).then((_response: Response) => {
            return this.processDownloadSettingsPackage(_response);
        });
    }

    protected processDownloadSettingsPackage(response: Response): Promise<FileResponse> {
        const status = response.status;
        let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };
        if (status === 200 || status === 206) {
            const contentDisposition = response.headers ? response.headers.get("content-disposition") : undefined;
            const fileNameMatch = contentDisposition ? /filename="?([^"]*?)"?(;|$)/g.exec(contentDisposition) : undefined;
            const fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;
            return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; });
        } else if (status === 400) {
            return response.text().then((_responseText) => {
            let result400: any = null;
            let resultData400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result400 = ErrorResponse.fromJS(resultData400);
            return throwException("A server side error occurred.", status, _responseText, _headers, result400);
            });
        } else if (status === 401) {
            return response.text().then((_responseText) => {
            let result401: any = null;
            let resultData401 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
            result401 = MissingLicenseResponse.fromJS(resultData401);
            return throwException("License check failed", status, _responseText, _headers, result401);
            });
        } else if (status !== 200 && status !== 204) {
            return response.text().then((_responseText) => {
            return throwException("An unexpected server error occurred.", status, _responseText, _headers);
            });
        }
        return Promise.resolve<FileResponse>(null as any);
    }
}

export class LogList implements ILogList {
    logs?: LogEntry[] | undefined;
    offset?: number;
    filteredCount?: number;
    totalCount?: { [key: string]: number; } | undefined;

    constructor(data?: ILogList) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            if (Array.isArray(_data["Logs"])) {
                this.logs = [] as any;
                for (let item of _data["Logs"])
                    this.logs!.push(LogEntry.fromJS(item));
            }
            this.offset = _data["Offset"];
            this.filteredCount = _data["FilteredCount"];
            if (_data["TotalCount"]) {
                this.totalCount = {} as any;
                for (let key in _data["TotalCount"]) {
                    if (_data["TotalCount"].hasOwnProperty(key))
                        (<any>this.totalCount)![key] = _data["TotalCount"][key];
                }
            }
        }
    }

    static fromJS(data: any): LogList {
        data = typeof data === 'object' ? data : {};
        let result = new LogList();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.logs)) {
            data["Logs"] = [];
            for (let item of this.logs)
                data["Logs"].push(item.toJSON());
        }
        data["Offset"] = this.offset;
        data["FilteredCount"] = this.filteredCount;
        if (this.totalCount) {
            data["TotalCount"] = {};
            for (let key in this.totalCount) {
                if (this.totalCount.hasOwnProperty(key))
                    (<any>data["TotalCount"])[key] = this.totalCount[key];
            }
        }
        return data;
    }
}

export interface ILogList {
    logs?: LogEntry[] | undefined;
    offset?: number;
    filteredCount?: number;
    totalCount?: { [key: string]: number; } | undefined;
}

export class LogEntry implements ILogEntry {
    source?: string | undefined;
    timestamp?: number;
    message?: string | undefined;
    level?: number;
    durationNS?: number;

    constructor(data?: ILogEntry) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.source = _data["Source"];
            this.timestamp = _data["Timestamp"];
            this.message = _data["Message"];
            this.level = _data["Level"];
            this.durationNS = _data["DurationNS"];
        }
    }

    static fromJS(data: any): LogEntry {
        data = typeof data === 'object' ? data : {};
        let result = new LogEntry();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Source"] = this.source;
        data["Timestamp"] = this.timestamp;
        data["Message"] = this.message;
        data["Level"] = this.level;
        data["DurationNS"] = this.durationNS;
        return data;
    }
}

export interface ILogEntry {
    source?: string | undefined;
    timestamp?: number;
    message?: string | undefined;
    level?: number;
    durationNS?: number;
}

export class MissingLicenseResponse implements IMissingLicenseResponse {
    message?: string | undefined;

    constructor(data?: IMissingLicenseResponse) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.message = _data["Message"];
        }
    }

    static fromJS(data: any): MissingLicenseResponse {
        data = typeof data === 'object' ? data : {};
        let result = new MissingLicenseResponse();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Message"] = this.message;
        return data;
    }
}

export interface IMissingLicenseResponse {
    message?: string | undefined;
}

export class RunStatus implements IRunStatus {
    sessionId?: string;
    verdict?: Verdict;
    testPlanRunId?: string | undefined;
    failedToStart?: boolean;
    executionState?: ExecutionState;
    executingSteps?: string[] | undefined;

    constructor(data?: IRunStatus) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.sessionId = _data["SessionId"];
            this.verdict = _data["Verdict"];
            this.testPlanRunId = _data["TestPlanRunId"];
            this.failedToStart = _data["FailedToStart"];
            this.executionState = _data["ExecutionState"];
            if (Array.isArray(_data["ExecutingSteps"])) {
                this.executingSteps = [] as any;
                for (let item of _data["ExecutingSteps"])
                    this.executingSteps!.push(item);
            }
        }
    }

    static fromJS(data: any): RunStatus {
        data = typeof data === 'object' ? data : {};
        let result = new RunStatus();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["SessionId"] = this.sessionId;
        data["Verdict"] = this.verdict;
        data["TestPlanRunId"] = this.testPlanRunId;
        data["FailedToStart"] = this.failedToStart;
        data["ExecutionState"] = this.executionState;
        if (Array.isArray(this.executingSteps)) {
            data["ExecutingSteps"] = [];
            for (let item of this.executingSteps)
                data["ExecutingSteps"].push(item);
        }
        return data;
    }
}

export interface IRunStatus {
    sessionId?: string;
    verdict?: Verdict;
    testPlanRunId?: string | undefined;
    failedToStart?: boolean;
    executionState?: ExecutionState;
    executingSteps?: string[] | undefined;
}

/** Enumeration containing the verdict types used for Verdict and Verdict properties. */
export enum Verdict {
    NotSet = "NotSet",
    Pass = "Pass",
    Inconclusive = "Inconclusive",
    Fail = "Fail",
    Aborted = "Aborted",
    Error = "Error",
}

export enum ExecutionState {
    Idle = "Idle",
    Executing = "Executing",
    Breaking = "Breaking",
    Aborting = "Aborting",
}

export class ErrorResponse implements IErrorResponse {
    type?: string | undefined;
    message?: string | undefined;
    parameter?: string | undefined;
    source?: string | undefined;
    stackTrace?: string | undefined;
    inner?: ErrorResponse | undefined;

    constructor(data?: IErrorResponse) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.type = _data["Type"];
            this.message = _data["Message"];
            this.parameter = _data["Parameter"];
            this.source = _data["Source"];
            this.stackTrace = _data["StackTrace"];
            this.inner = _data["Inner"] ? ErrorResponse.fromJS(_data["Inner"]) : <any>undefined;
        }
    }

    static fromJS(data: any): ErrorResponse {
        data = typeof data === 'object' ? data : {};
        let result = new ErrorResponse();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Type"] = this.type;
        data["Message"] = this.message;
        data["Parameter"] = this.parameter;
        data["Source"] = this.source;
        data["StackTrace"] = this.stackTrace;
        data["Inner"] = this.inner ? this.inner.toJSON() : <any>undefined;
        return data;
    }
}

export interface IErrorResponse {
    type?: string | undefined;
    message?: string | undefined;
    parameter?: string | undefined;
    source?: string | undefined;
    stackTrace?: string | undefined;
    inner?: ErrorResponse | undefined;
}

export class RepositoryPackageReference implements IRepositoryPackageReference {
    name?: string | undefined;
    version?: string | undefined;
    repository?: string | undefined;
    path?: string | undefined;

    constructor(data?: IRepositoryPackageReference) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.version = _data["Version"];
            this.repository = _data["Repository"];
            this.path = _data["Path"];
        }
    }

    static fromJS(data: any): RepositoryPackageReference {
        data = typeof data === 'object' ? data : {};
        let result = new RepositoryPackageReference();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["Version"] = this.version;
        data["Repository"] = this.repository;
        data["Path"] = this.path;
        return data;
    }
}

export interface IRepositoryPackageReference {
    name?: string | undefined;
    version?: string | undefined;
    repository?: string | undefined;
    path?: string | undefined;
}

export class RepositoryPackageDefinition extends RepositoryPackageReference implements IRepositoryPackageDefinition {
    tags?: string[] | undefined;

    constructor(data?: IRepositoryPackageDefinition) {
        super(data);
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["Tags"])) {
                this.tags = [] as any;
                for (let item of _data["Tags"])
                    this.tags!.push(item);
            }
        }
    }

    static fromJS(data: any): RepositoryPackageDefinition {
        data = typeof data === 'object' ? data : {};
        let result = new RepositoryPackageDefinition();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.tags)) {
            data["Tags"] = [];
            for (let item of this.tags)
                data["Tags"].push(item);
        }
        super.toJSON(data);
        return data;
    }
}

export interface IRepositoryPackageDefinition extends IRepositoryPackageReference {
    tags?: string[] | undefined;
}

export class TestPlan implements ITestPlan {
    childTestSteps?: TestStep[] | undefined;
    settings?: Setting[] | undefined;
    isOpen?: boolean;
    propertiesToInclude?: string[] | undefined;
    id?: string;

    constructor(data?: ITestPlan) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            if (Array.isArray(_data["ChildTestSteps"])) {
                this.childTestSteps = [] as any;
                for (let item of _data["ChildTestSteps"])
                    this.childTestSteps!.push(TestStep.fromJS(item));
            }
            if (Array.isArray(_data["Settings"])) {
                this.settings = [] as any;
                for (let item of _data["Settings"])
                    this.settings!.push(Setting.fromJS(item));
            }
            this.isOpen = _data["IsOpen"];
            if (Array.isArray(_data["PropertiesToInclude"])) {
                this.propertiesToInclude = [] as any;
                for (let item of _data["PropertiesToInclude"])
                    this.propertiesToInclude!.push(item);
            }
            this.id = _data["Id"];
        }
    }

    static fromJS(data: any): TestPlan {
        data = typeof data === 'object' ? data : {};
        let result = new TestPlan();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.childTestSteps)) {
            data["ChildTestSteps"] = [];
            for (let item of this.childTestSteps)
                data["ChildTestSteps"].push(item.toJSON());
        }
        if (Array.isArray(this.settings)) {
            data["Settings"] = [];
            for (let item of this.settings)
                data["Settings"].push(item.toJSON());
        }
        data["IsOpen"] = this.isOpen;
        if (Array.isArray(this.propertiesToInclude)) {
            data["PropertiesToInclude"] = [];
            for (let item of this.propertiesToInclude)
                data["PropertiesToInclude"].push(item);
        }
        data["Id"] = this.id;
        return data;
    }
}

export interface ITestPlan {
    childTestSteps?: TestStep[] | undefined;
    settings?: Setting[] | undefined;
    isOpen?: boolean;
    propertiesToInclude?: string[] | undefined;
    id?: string;
}

export class TestStep implements ITestStep {
    id?: string;
    childTestSteps?: TestStep[] | undefined;
    isChildTestStepsReadOnly?: boolean;
    isReadOnly?: boolean;
    settings?: Setting[] | undefined;
    typeName?: string | undefined;
    typeDisplay?: DisplayAttribute | undefined;
    name?: string | undefined;

    protected _discriminator: string;

    constructor(data?: ITestStep) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
        this._discriminator = "TestStep";
    }

    init(_data?: any) {
        if (_data) {
            this.id = _data["Id"];
            if (Array.isArray(_data["ChildTestSteps"])) {
                this.childTestSteps = [] as any;
                for (let item of _data["ChildTestSteps"])
                    this.childTestSteps!.push(TestStep.fromJS(item));
            }
            this.isChildTestStepsReadOnly = _data["IsChildTestStepsReadOnly"];
            this.isReadOnly = _data["IsReadOnly"];
            if (Array.isArray(_data["Settings"])) {
                this.settings = [] as any;
                for (let item of _data["Settings"])
                    this.settings!.push(Setting.fromJS(item));
            }
            this.typeName = _data["TypeName"];
            this.typeDisplay = _data["TypeDisplay"] ? DisplayAttribute.fromJS(_data["TypeDisplay"]) : <any>undefined;
            this.name = _data["Name"];
        }
    }

    static fromJS(data: any): TestStep {
        data = typeof data === 'object' ? data : {};
        if (data["TestStepTypeOrInstance"] === "TestStepType") {
            let result = new TestStepType();
            result.init(data);
            return result;
        }
        let result = new TestStep();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["TestStepTypeOrInstance"] = this._discriminator;
        data["Id"] = this.id;
        if (Array.isArray(this.childTestSteps)) {
            data["ChildTestSteps"] = [];
            for (let item of this.childTestSteps)
                data["ChildTestSteps"].push(item.toJSON());
        }
        data["IsChildTestStepsReadOnly"] = this.isChildTestStepsReadOnly;
        data["IsReadOnly"] = this.isReadOnly;
        if (Array.isArray(this.settings)) {
            data["Settings"] = [];
            for (let item of this.settings)
                data["Settings"].push(item.toJSON());
        }
        data["TypeName"] = this.typeName;
        data["TypeDisplay"] = this.typeDisplay ? this.typeDisplay.toJSON() : <any>undefined;
        data["Name"] = this.name;
        return data;
    }
}

export interface ITestStep {
    id?: string;
    childTestSteps?: TestStep[] | undefined;
    isChildTestStepsReadOnly?: boolean;
    isReadOnly?: boolean;
    settings?: Setting[] | undefined;
    typeName?: string | undefined;
    typeDisplay?: DisplayAttribute | undefined;
    name?: string | undefined;
}

export abstract class AnnotatedObject implements IAnnotatedObject {
    visualStatus?: VisualStatus | undefined;
    valueType?: string | undefined;
    display?: DisplayAttribute | undefined;
    metaData?: MetaData | undefined;
    externalParameter?: ExternalParameter | undefined;

    constructor(data?: IAnnotatedObject) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.visualStatus = _data["VisualStatus"] ? VisualStatus.fromJS(_data["VisualStatus"]) : <any>undefined;
            this.valueType = _data["ValueType"];
            this.display = _data["Display"] ? DisplayAttribute.fromJS(_data["Display"]) : <any>undefined;
            this.metaData = _data["MetaData"] ? MetaData.fromJS(_data["MetaData"]) : <any>undefined;
            this.externalParameter = _data["ExternalParameter"] ? ExternalParameter.fromJS(_data["ExternalParameter"]) : <any>undefined;
        }
    }

    static fromJS(data: any): AnnotatedObject {
        data = typeof data === 'object' ? data : {};
        throw new Error("The abstract class 'AnnotatedObject' cannot be instantiated.");
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["VisualStatus"] = this.visualStatus ? this.visualStatus.toJSON() : <any>undefined;
        data["ValueType"] = this.valueType;
        data["Display"] = this.display ? this.display.toJSON() : <any>undefined;
        data["MetaData"] = this.metaData ? this.metaData.toJSON() : <any>undefined;
        data["ExternalParameter"] = this.externalParameter ? this.externalParameter.toJSON() : <any>undefined;
        return data;
    }
}

export interface IAnnotatedObject {
    visualStatus?: VisualStatus | undefined;
    valueType?: string | undefined;
    display?: DisplayAttribute | undefined;
    metaData?: MetaData | undefined;
    externalParameter?: ExternalParameter | undefined;
}

export class Setting extends AnnotatedObject implements ISetting {
    errors?: string[] | undefined;
    layout?: Layout | undefined;
    columnDisplayName?: ColumnDisplayName | undefined;
    valueDescription?: string | undefined;
    propertyName?: string | undefined;
    icons?: Icon[] | undefined;

    protected _discriminator: string;

    constructor(data?: ISetting) {
        super(data);
        this._discriminator = "Setting";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["Errors"])) {
                this.errors = [] as any;
                for (let item of _data["Errors"])
                    this.errors!.push(item);
            }
            this.layout = _data["Layout"] ? Layout.fromJS(_data["Layout"]) : <any>undefined;
            this.columnDisplayName = _data["ColumnDisplayName"] ? ColumnDisplayName.fromJS(_data["ColumnDisplayName"]) : <any>undefined;
            this.valueDescription = _data["ValueDescription"];
            this.propertyName = _data["PropertyName"];
            if (Array.isArray(_data["Icons"])) {
                this.icons = [] as any;
                for (let item of _data["Icons"])
                    this.icons!.push(Icon.fromJS(item));
            }
        }
    }

    static fromJS(data: any): Setting {
        data = typeof data === 'object' ? data : {};
        if (data["ControlType"] === "ButtonControl") {
            let result = new ButtonControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "ButtonsControl") {
            let result = new ButtonsControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "CheckBoxControl") {
            let result = new CheckBoxControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "DataGridReferenceControl") {
            let result = new DataGridReferenceControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "DataGridControl") {
            let result = new DataGridControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "TextBoxControl") {
            let result = new TextBoxControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "ComboBoxControl") {
            let result = new ComboBoxControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "FilePathControl") {
            let result = new FilePathControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "EnabledControl") {
            let result = new EnabledControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "DropdownControl") {
            let result = new DropdownControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "MultiSelectControl") {
            let result = new MultiSelectControl();
            result.init(data);
            return result;
        }
        if (data["ControlType"] === "PasswordControl") {
            let result = new PasswordControl();
            result.init(data);
            return result;
        }
        let result = new Setting();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["ControlType"] = this._discriminator;
        if (Array.isArray(this.errors)) {
            data["Errors"] = [];
            for (let item of this.errors)
                data["Errors"].push(item);
        }
        data["Layout"] = this.layout ? this.layout.toJSON() : <any>undefined;
        data["ColumnDisplayName"] = this.columnDisplayName ? this.columnDisplayName.toJSON() : <any>undefined;
        data["ValueDescription"] = this.valueDescription;
        data["PropertyName"] = this.propertyName;
        if (Array.isArray(this.icons)) {
            data["Icons"] = [];
            for (let item of this.icons)
                data["Icons"].push(item.toJSON());
        }
        super.toJSON(data);
        return data;
    }
}

export interface ISetting extends IAnnotatedObject {
    errors?: string[] | undefined;
    layout?: Layout | undefined;
    columnDisplayName?: ColumnDisplayName | undefined;
    valueDescription?: string | undefined;
    propertyName?: string | undefined;
    icons?: Icon[] | undefined;
}

export class Layout implements ILayout {
    mode?: LayoutMode;
    rowHeight?: number;
    maxRowHeight?: number;

    constructor(data?: ILayout) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.mode = _data["Mode"];
            this.rowHeight = _data["RowHeight"];
            this.maxRowHeight = _data["MaxRowHeight"];
        }
    }

    static fromJS(data: any): Layout {
        data = typeof data === 'object' ? data : {};
        let result = new Layout();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Mode"] = this.mode;
        data["RowHeight"] = this.rowHeight;
        data["MaxRowHeight"] = this.maxRowHeight;
        return data;
    }
}

export interface ILayout {
    mode?: LayoutMode;
    rowHeight?: number;
    maxRowHeight?: number;
}

/** The supported layout modes. */
export enum LayoutMode {
    Normal = "Normal",
    FullRow = "FullRow",
    FloatBottom = "FloatBottom",
}

export class ColumnDisplayName implements IColumnDisplayName {
    columnName?: string | undefined;
    order?: number;
    isReadOnly?: boolean;

    constructor(data?: IColumnDisplayName) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.columnName = _data["ColumnName"];
            this.order = _data["Order"];
            this.isReadOnly = _data["IsReadOnly"];
        }
    }

    static fromJS(data: any): ColumnDisplayName {
        data = typeof data === 'object' ? data : {};
        let result = new ColumnDisplayName();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["ColumnName"] = this.columnName;
        data["Order"] = this.order;
        data["IsReadOnly"] = this.isReadOnly;
        return data;
    }
}

export interface IColumnDisplayName {
    columnName?: string | undefined;
    order?: number;
    isReadOnly?: boolean;
}

export class Icon implements IIcon {
    iconName?: string | undefined;
    invoke?: boolean | undefined;
    stepReference?: string | undefined;
    propertyReference?: string | undefined;

    constructor(data?: IIcon) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.iconName = _data["IconName"];
            this.invoke = _data["Invoke"];
            this.stepReference = _data["StepReference"];
            this.propertyReference = _data["PropertyReference"];
        }
    }

    static fromJS(data: any): Icon {
        data = typeof data === 'object' ? data : {};
        let result = new Icon();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["IconName"] = this.iconName;
        data["Invoke"] = this.invoke;
        data["StepReference"] = this.stepReference;
        data["PropertyReference"] = this.propertyReference;
        return data;
    }
}

export interface IIcon {
    iconName?: string | undefined;
    invoke?: boolean | undefined;
    stepReference?: string | undefined;
    propertyReference?: string | undefined;
}

export class VisualStatus implements IVisualStatus {
    isReadOnly?: boolean;
    isVisible?: boolean;
    isEnabled?: boolean;

    constructor(data?: IVisualStatus) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.isReadOnly = _data["IsReadOnly"];
            this.isVisible = _data["IsVisible"];
            this.isEnabled = _data["IsEnabled"];
        }
    }

    static fromJS(data: any): VisualStatus {
        data = typeof data === 'object' ? data : {};
        let result = new VisualStatus();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["IsReadOnly"] = this.isReadOnly;
        data["IsVisible"] = this.isVisible;
        data["IsEnabled"] = this.isEnabled;
        return data;
    }
}

export interface IVisualStatus {
    isReadOnly?: boolean;
    isVisible?: boolean;
    isEnabled?: boolean;
}

export class DisplayAttribute implements IDisplayAttribute {
    description?: string | undefined;
    group?: string[] | undefined;
    name?: string | undefined;
    order?: number;
    collapsed?: boolean;

    constructor(data?: IDisplayAttribute) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.description = _data["Description"];
            if (Array.isArray(_data["Group"])) {
                this.group = [] as any;
                for (let item of _data["Group"])
                    this.group!.push(item);
            }
            this.name = _data["Name"];
            this.order = _data["Order"];
            this.collapsed = _data["Collapsed"];
        }
    }

    static fromJS(data: any): DisplayAttribute {
        data = typeof data === 'object' ? data : {};
        let result = new DisplayAttribute();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Description"] = this.description;
        if (Array.isArray(this.group)) {
            data["Group"] = [];
            for (let item of this.group)
                data["Group"].push(item);
        }
        data["Name"] = this.name;
        data["Order"] = this.order;
        data["Collapsed"] = this.collapsed;
        return data;
    }
}

export interface IDisplayAttribute {
    description?: string | undefined;
    group?: string[] | undefined;
    name?: string | undefined;
    order?: number;
    collapsed?: boolean;
}

export class MetaData implements IMetaData {
    name?: string | undefined;
    macroName?: string | undefined;
    group?: string | undefined;
    frozen?: boolean;

    constructor(data?: IMetaData) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.macroName = _data["MacroName"];
            this.group = _data["Group"];
            this.frozen = _data["Frozen"];
        }
    }

    static fromJS(data: any): MetaData {
        data = typeof data === 'object' ? data : {};
        let result = new MetaData();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["MacroName"] = this.macroName;
        data["Group"] = this.group;
        data["Frozen"] = this.frozen;
        return data;
    }
}

export interface IMetaData {
    name?: string | undefined;
    macroName?: string | undefined;
    group?: string | undefined;
    frozen?: boolean;
}

export class ExternalParameter implements IExternalParameter {
    name?: string | undefined;

    constructor(data?: IExternalParameter) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
        }
    }

    static fromJS(data: any): ExternalParameter {
        data = typeof data === 'object' ? data : {};
        let result = new ExternalParameter();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        return data;
    }
}

export interface IExternalParameter {
    name?: string | undefined;
}

export class ButtonControl extends Setting implements IButtonControl {
    invokeMethod?: boolean;

    constructor(data?: IButtonControl) {
        super(data);
        this._discriminator = "ButtonControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.invokeMethod = _data["InvokeMethod"];
        }
    }

    static fromJS(data: any): ButtonControl {
        data = typeof data === 'object' ? data : {};
        let result = new ButtonControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["InvokeMethod"] = this.invokeMethod;
        super.toJSON(data);
        return data;
    }
}

export interface IButtonControl extends ISetting {
    invokeMethod?: boolean;
}

export class ButtonsControl extends Setting implements IButtonsControl {
    availableValues?: AvailableValue[] | undefined;
    selectedIndex?: number;
    invokeMethod?: boolean;

    constructor(data?: IButtonsControl) {
        super(data);
        this._discriminator = "ButtonsControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["AvailableValues"])) {
                this.availableValues = [] as any;
                for (let item of _data["AvailableValues"])
                    this.availableValues!.push(AvailableValue.fromJS(item));
            }
            this.selectedIndex = _data["SelectedIndex"];
            this.invokeMethod = _data["InvokeMethod"];
        }
    }

    static fromJS(data: any): ButtonsControl {
        data = typeof data === 'object' ? data : {};
        let result = new ButtonsControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.availableValues)) {
            data["AvailableValues"] = [];
            for (let item of this.availableValues)
                data["AvailableValues"].push(item.toJSON());
        }
        data["SelectedIndex"] = this.selectedIndex;
        data["InvokeMethod"] = this.invokeMethod;
        super.toJSON(data);
        return data;
    }
}

export interface IButtonsControl extends ISetting {
    availableValues?: AvailableValue[] | undefined;
    selectedIndex?: number;
    invokeMethod?: boolean;
}

export class AvailableValue implements IAvailableValue {
    name?: string | undefined;
    description?: string | undefined;

    constructor(data?: IAvailableValue) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.description = _data["Description"];
        }
    }

    static fromJS(data: any): AvailableValue {
        data = typeof data === 'object' ? data : {};
        let result = new AvailableValue();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["Description"] = this.description;
        return data;
    }
}

export interface IAvailableValue {
    name?: string | undefined;
    description?: string | undefined;
}

export class CheckBoxControl extends Setting implements ICheckBoxControl {
    boolValue?: boolean | undefined;

    constructor(data?: ICheckBoxControl) {
        super(data);
        this._discriminator = "CheckBoxControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.boolValue = _data["BoolValue"];
        }
    }

    static fromJS(data: any): CheckBoxControl {
        data = typeof data === 'object' ? data : {};
        let result = new CheckBoxControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["BoolValue"] = this.boolValue;
        super.toJSON(data);
        return data;
    }
}

export interface ICheckBoxControl extends ISetting {
    boolValue?: boolean | undefined;
}

export class DataGridReferenceControl extends Setting implements IDataGridReferenceControl {

    constructor(data?: IDataGridReferenceControl) {
        super(data);
        this._discriminator = "DataGridReferenceControl";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): DataGridReferenceControl {
        data = typeof data === 'object' ? data : {};
        let result = new DataGridReferenceControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IDataGridReferenceControl extends ISetting {
}

export class DataGridControl extends Setting implements IDataGridControl {
    items?: Setting[][] | undefined;
    fixedSize?: boolean;

    constructor(data?: IDataGridControl) {
        super(data);
        this._discriminator = "DataGridControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["Items"])) {
                this.items = [] as any;
                for (let item of _data["Items"])
                    this.items!.push(item);
            }
            this.fixedSize = _data["FixedSize"];
        }
    }

    static fromJS(data: any): DataGridControl {
        data = typeof data === 'object' ? data : {};
        let result = new DataGridControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.items)) {
            data["Items"] = [];
            for (let item of this.items)
                data["Items"].push(item);
        }
        data["FixedSize"] = this.fixedSize;
        super.toJSON(data);
        return data;
    }
}

export interface IDataGridControl extends ISetting {
    items?: Setting[][] | undefined;
    fixedSize?: boolean;
}

export class TextBoxControl extends Setting implements ITextBoxControl {
    stringValue?: string | undefined;

    constructor(data?: ITextBoxControl) {
        super(data);
        this._discriminator = "TextBoxControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.stringValue = _data["StringValue"];
        }
    }

    static fromJS(data: any): TextBoxControl {
        data = typeof data === 'object' ? data : {};
        if (data["ControlType"] === "ComboBoxControl") {
            let result = new ComboBoxControl();
            result.init(data);
            return result;
        }
        let result = new TextBoxControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["StringValue"] = this.stringValue;
        super.toJSON(data);
        return data;
    }
}

export interface ITextBoxControl extends ISetting {
    stringValue?: string | undefined;
}

export class ComboBoxControl extends TextBoxControl implements IComboBoxControl {
    suggestedValues?: string[] | undefined;

    constructor(data?: IComboBoxControl) {
        super(data);
        this._discriminator = "ComboBoxControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["SuggestedValues"])) {
                this.suggestedValues = [] as any;
                for (let item of _data["SuggestedValues"])
                    this.suggestedValues!.push(item);
            }
        }
    }

    static fromJS(data: any): ComboBoxControl {
        data = typeof data === 'object' ? data : {};
        let result = new ComboBoxControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.suggestedValues)) {
            data["SuggestedValues"] = [];
            for (let item of this.suggestedValues)
                data["SuggestedValues"].push(item);
        }
        super.toJSON(data);
        return data;
    }
}

export interface IComboBoxControl extends ITextBoxControl {
    suggestedValues?: string[] | undefined;
}

export class FilePathControl extends Setting implements IFilePathControl {
    stringValue?: string | undefined;
    fileExtension?: string | undefined;

    constructor(data?: IFilePathControl) {
        super(data);
        this._discriminator = "FilePathControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.stringValue = _data["StringValue"];
            this.fileExtension = _data["FileExtension"];
        }
    }

    static fromJS(data: any): FilePathControl {
        data = typeof data === 'object' ? data : {};
        let result = new FilePathControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["StringValue"] = this.stringValue;
        data["FileExtension"] = this.fileExtension;
        super.toJSON(data);
        return data;
    }
}

export interface IFilePathControl extends ISetting {
    stringValue?: string | undefined;
    fileExtension?: string | undefined;
}

export class EnabledControl extends Setting implements IEnabledControl {
    isEnabled?: boolean | undefined;
    value?: Setting | undefined;

    constructor(data?: IEnabledControl) {
        super(data);
        this._discriminator = "EnabledControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.isEnabled = _data["IsEnabled"];
            this.value = _data["Value"] ? Setting.fromJS(_data["Value"]) : <any>undefined;
        }
    }

    static fromJS(data: any): EnabledControl {
        data = typeof data === 'object' ? data : {};
        let result = new EnabledControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["IsEnabled"] = this.isEnabled;
        data["Value"] = this.value ? this.value.toJSON() : <any>undefined;
        super.toJSON(data);
        return data;
    }
}

export interface IEnabledControl extends ISetting {
    isEnabled?: boolean | undefined;
    value?: Setting | undefined;
}

export class DropdownControl extends Setting implements IDropdownControl {
    availableValues?: AvailableValue[] | undefined;
    selectedIndex?: number;

    constructor(data?: IDropdownControl) {
        super(data);
        this._discriminator = "DropdownControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["AvailableValues"])) {
                this.availableValues = [] as any;
                for (let item of _data["AvailableValues"])
                    this.availableValues!.push(AvailableValue.fromJS(item));
            }
            this.selectedIndex = _data["SelectedIndex"];
        }
    }

    static fromJS(data: any): DropdownControl {
        data = typeof data === 'object' ? data : {};
        let result = new DropdownControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.availableValues)) {
            data["AvailableValues"] = [];
            for (let item of this.availableValues)
                data["AvailableValues"].push(item.toJSON());
        }
        data["SelectedIndex"] = this.selectedIndex;
        super.toJSON(data);
        return data;
    }
}

export interface IDropdownControl extends ISetting {
    availableValues?: AvailableValue[] | undefined;
    selectedIndex?: number;
}

export class MultiSelectControl extends Setting implements IMultiSelectControl {
    availableValues?: AvailableValue[] | undefined;
    selectedIndex?: number[] | undefined;

    constructor(data?: IMultiSelectControl) {
        super(data);
        this._discriminator = "MultiSelectControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["AvailableValues"])) {
                this.availableValues = [] as any;
                for (let item of _data["AvailableValues"])
                    this.availableValues!.push(AvailableValue.fromJS(item));
            }
            if (Array.isArray(_data["SelectedIndex"])) {
                this.selectedIndex = [] as any;
                for (let item of _data["SelectedIndex"])
                    this.selectedIndex!.push(item);
            }
        }
    }

    static fromJS(data: any): MultiSelectControl {
        data = typeof data === 'object' ? data : {};
        let result = new MultiSelectControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.availableValues)) {
            data["AvailableValues"] = [];
            for (let item of this.availableValues)
                data["AvailableValues"].push(item.toJSON());
        }
        if (Array.isArray(this.selectedIndex)) {
            data["SelectedIndex"] = [];
            for (let item of this.selectedIndex)
                data["SelectedIndex"].push(item);
        }
        super.toJSON(data);
        return data;
    }
}

export interface IMultiSelectControl extends ISetting {
    availableValues?: AvailableValue[] | undefined;
    selectedIndex?: number[] | undefined;
}

export class PasswordControl extends Setting implements IPasswordControl {
    password?: string | undefined;

    constructor(data?: IPasswordControl) {
        super(data);
        this._discriminator = "PasswordControl";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.password = _data["Password"];
        }
    }

    static fromJS(data: any): PasswordControl {
        data = typeof data === 'object' ? data : {};
        let result = new PasswordControl();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Password"] = this.password;
        super.toJSON(data);
        return data;
    }
}

export interface IPasswordControl extends ISetting {
    password?: string | undefined;
}

export class TestStepType extends TestStep implements ITestStepType {
    availableChildrenTypes?: string[] | undefined;

    constructor(data?: ITestStepType) {
        super(data);
        this._discriminator = "TestStepType";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["AvailableChildrenTypes"])) {
                this.availableChildrenTypes = [] as any;
                for (let item of _data["AvailableChildrenTypes"])
                    this.availableChildrenTypes!.push(item);
            }
        }
    }

    static fromJS(data: any): TestStepType {
        data = typeof data === 'object' ? data : {};
        let result = new TestStepType();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.availableChildrenTypes)) {
            data["AvailableChildrenTypes"] = [];
            for (let item of this.availableChildrenTypes)
                data["AvailableChildrenTypes"].push(item);
        }
        super.toJSON(data);
        return data;
    }
}

export interface ITestStepType extends ITestStep {
    availableChildrenTypes?: string[] | undefined;
}

export class TestStepValidationError implements ITestStepValidationError {
    stepId?: string | undefined;
    validationErrors?: ValidationError[] | undefined;

    constructor(data?: ITestStepValidationError) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.stepId = _data["StepId"];
            if (Array.isArray(_data["ValidationErrors"])) {
                this.validationErrors = [] as any;
                for (let item of _data["ValidationErrors"])
                    this.validationErrors!.push(ValidationError.fromJS(item));
            }
        }
    }

    static fromJS(data: any): TestStepValidationError {
        data = typeof data === 'object' ? data : {};
        let result = new TestStepValidationError();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["StepId"] = this.stepId;
        if (Array.isArray(this.validationErrors)) {
            data["ValidationErrors"] = [];
            for (let item of this.validationErrors)
                data["ValidationErrors"].push(item.toJSON());
        }
        return data;
    }
}

export interface ITestStepValidationError {
    stepId?: string | undefined;
    validationErrors?: ValidationError[] | undefined;
}

export class ValidationError implements IValidationError {
    propertyName?: string | undefined;
    error?: string | undefined;

    constructor(data?: IValidationError) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.propertyName = _data["PropertyName"];
            this.error = _data["Error"];
        }
    }

    static fromJS(data: any): ValidationError {
        data = typeof data === 'object' ? data : {};
        let result = new ValidationError();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["PropertyName"] = this.propertyName;
        data["Error"] = this.error;
        return data;
    }
}

export interface IValidationError {
    propertyName?: string | undefined;
    error?: string | undefined;
}

export class CommonSettings implements ICommonSettings {
    step?: TestStep | undefined;
    stepIds?: string[] | undefined;

    constructor(data?: ICommonSettings) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.step = _data["Step"] ? TestStep.fromJS(_data["Step"]) : <any>undefined;
            if (Array.isArray(_data["StepIds"])) {
                this.stepIds = [] as any;
                for (let item of _data["StepIds"])
                    this.stepIds!.push(item);
            }
        }
    }

    static fromJS(data: any): CommonSettings {
        data = typeof data === 'object' ? data : {};
        let result = new CommonSettings();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Step"] = this.step ? this.step.toJSON() : <any>undefined;
        if (Array.isArray(this.stepIds)) {
            data["StepIds"] = [];
            for (let item of this.stepIds)
                data["StepIds"].push(item);
        }
        return data;
    }
}

export interface ICommonSettings {
    step?: TestStep | undefined;
    stepIds?: string[] | undefined;
}

export class CommonContext implements ICommonContext {
    contextItems?: Setting[] | undefined;
    stepIds?: string[] | undefined;

    constructor(data?: ICommonContext) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            if (Array.isArray(_data["ContextItems"])) {
                this.contextItems = [] as any;
                for (let item of _data["ContextItems"])
                    this.contextItems!.push(Setting.fromJS(item));
            }
            if (Array.isArray(_data["StepIds"])) {
                this.stepIds = [] as any;
                for (let item of _data["StepIds"])
                    this.stepIds!.push(item);
            }
        }
    }

    static fromJS(data: any): CommonContext {
        data = typeof data === 'object' ? data : {};
        let result = new CommonContext();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.contextItems)) {
            data["ContextItems"] = [];
            for (let item of this.contextItems)
                data["ContextItems"].push(item.toJSON());
        }
        if (Array.isArray(this.stepIds)) {
            data["StepIds"] = [];
            for (let item of this.stepIds)
                data["StepIds"].push(item);
        }
        return data;
    }
}

export interface ICommonContext {
    contextItems?: Setting[] | undefined;
    stepIds?: string[] | undefined;
}

export class Interaction implements IInteraction {
    timeout?: string | undefined;
    title?: string | undefined;
    settings?: Setting[] | undefined;
    id?: string;

    constructor(data?: IInteraction) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.timeout = _data["Timeout"];
            this.title = _data["Title"];
            if (Array.isArray(_data["Settings"])) {
                this.settings = [] as any;
                for (let item of _data["Settings"])
                    this.settings!.push(Setting.fromJS(item));
            }
            this.id = _data["Id"];
        }
    }

    static fromJS(data: any): Interaction {
        data = typeof data === 'object' ? data : {};
        let result = new Interaction();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Timeout"] = this.timeout;
        data["Title"] = this.title;
        if (Array.isArray(this.settings)) {
            data["Settings"] = [];
            for (let item of this.settings)
                data["Settings"].push(item.toJSON());
        }
        data["Id"] = this.id;
        return data;
    }
}

export interface IInteraction {
    timeout?: string | undefined;
    title?: string | undefined;
    settings?: Setting[] | undefined;
    id?: string;
}

export class ListItemType implements IListItemType {
    typeName?: string | undefined;
    typeDisplay?: DisplayAttribute | undefined;

    constructor(data?: IListItemType) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.typeName = _data["TypeName"];
            this.typeDisplay = _data["TypeDisplay"] ? DisplayAttribute.fromJS(_data["TypeDisplay"]) : <any>undefined;
        }
    }

    static fromJS(data: any): ListItemType {
        data = typeof data === 'object' ? data : {};
        let result = new ListItemType();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["TypeName"] = this.typeName;
        data["TypeDisplay"] = this.typeDisplay ? this.typeDisplay.toJSON() : <any>undefined;
        return data;
    }
}

export interface IListItemType {
    typeName?: string | undefined;
    typeDisplay?: DisplayAttribute | undefined;
}

export class InstalledFile implements IInstalledFile {
    relativePath?: string | undefined;
    tapPackage?: string | undefined;

    constructor(data?: IInstalledFile) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.relativePath = _data["RelativePath"];
            this.tapPackage = _data["TapPackage"];
        }
    }

    static fromJS(data: any): InstalledFile {
        data = typeof data === 'object' ? data : {};
        let result = new InstalledFile();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["RelativePath"] = this.relativePath;
        data["TapPackage"] = this.tapPackage;
        return data;
    }
}

export interface IInstalledFile {
    relativePath?: string | undefined;
    tapPackage?: string | undefined;
}

export class BreakPoints implements IBreakPoints {
    testSteps?: string[] | undefined;

    constructor(data?: IBreakPoints) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            if (Array.isArray(_data["TestSteps"])) {
                this.testSteps = [] as any;
                for (let item of _data["TestSteps"])
                    this.testSteps!.push(item);
            }
        }
    }

    static fromJS(data: any): BreakPoints {
        data = typeof data === 'object' ? data : {};
        let result = new BreakPoints();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.testSteps)) {
            data["TestSteps"] = [];
            for (let item of this.testSteps)
                data["TestSteps"].push(item);
        }
        return data;
    }
}

export interface IBreakPoints {
    testSteps?: string[] | undefined;
}

export class Parameter implements IParameter {
    group?: string | undefined;
    name?: string | undefined;
    macroName?: string | undefined;
    parentLevel?: string | undefined;
    value?: string | undefined;

    constructor(data?: IParameter) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.group = _data["Group"];
            this.name = _data["Name"];
            this.macroName = _data["MacroName"];
            this.parentLevel = _data["ParentLevel"];
            this.value = _data["Value"];
        }
    }

    static fromJS(data: any): Parameter {
        data = typeof data === 'object' ? data : {};
        let result = new Parameter();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Group"] = this.group;
        data["Name"] = this.name;
        data["MacroName"] = this.macroName;
        data["ParentLevel"] = this.parentLevel;
        data["Value"] = this.value;
        return data;
    }
}

export interface IParameter {
    group?: string | undefined;
    name?: string | undefined;
    macroName?: string | undefined;
    parentLevel?: string | undefined;
    value?: string | undefined;
}

export class Image implements IImage {
    name?: string | undefined;
    packages?: PackageSpecifier[] | undefined;
    repositories?: string[] | undefined;
    id?: string | undefined;

    constructor(data?: IImage) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            if (Array.isArray(_data["Packages"])) {
                this.packages = [] as any;
                for (let item of _data["Packages"])
                    this.packages!.push(PackageSpecifier.fromJS(item));
            }
            if (Array.isArray(_data["Repositories"])) {
                this.repositories = [] as any;
                for (let item of _data["Repositories"])
                    this.repositories!.push(item);
            }
            this.id = _data["Id"];
        }
    }

    static fromJS(data: any): Image {
        data = typeof data === 'object' ? data : {};
        let result = new Image();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        if (Array.isArray(this.packages)) {
            data["Packages"] = [];
            for (let item of this.packages)
                data["Packages"].push(item.toJSON());
        }
        if (Array.isArray(this.repositories)) {
            data["Repositories"] = [];
            for (let item of this.repositories)
                data["Repositories"].push(item);
        }
        data["Id"] = this.id;
        return data;
    }
}

export interface IImage {
    name?: string | undefined;
    packages?: PackageSpecifier[] | undefined;
    repositories?: string[] | undefined;
    id?: string | undefined;
}

export class PackageSpecifier implements IPackageSpecifier {
    name?: string | undefined;
    version?: string | undefined;
    architecture?: string | undefined;
    oS?: string | undefined;

    constructor(data?: IPackageSpecifier) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.version = _data["Version"];
            this.architecture = _data["Architecture"];
            this.oS = _data["OS"];
        }
    }

    static fromJS(data: any): PackageSpecifier {
        data = typeof data === 'object' ? data : {};
        let result = new PackageSpecifier();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["Version"] = this.version;
        data["Architecture"] = this.architecture;
        data["OS"] = this.oS;
        return data;
    }
}

export interface IPackageSpecifier {
    name?: string | undefined;
    version?: string | undefined;
    architecture?: string | undefined;
    oS?: string | undefined;
}

export class WatchDog implements IWatchDog {
    inactiveSeconds?: number;
    terminationTimeout?: number;

    constructor(data?: IWatchDog) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.inactiveSeconds = _data["InactiveSeconds"];
            this.terminationTimeout = _data["TerminationTimeout"];
        }
    }

    static fromJS(data: any): WatchDog {
        data = typeof data === 'object' ? data : {};
        let result = new WatchDog();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["InactiveSeconds"] = this.inactiveSeconds;
        data["TerminationTimeout"] = this.terminationTimeout;
        return data;
    }
}

export interface IWatchDog {
    inactiveSeconds?: number;
    terminationTimeout?: number;
}

export class Links implements ILinks {
    editor?: string | undefined;

    constructor(data?: ILinks) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.editor = _data["Editor"];
        }
    }

    static fromJS(data: any): Links {
        data = typeof data === 'object' ? data : {};
        let result = new Links();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Editor"] = this.editor;
        return data;
    }
}

export interface ILinks {
    editor?: string | undefined;
}

export abstract class ComponentSettingsBase implements IComponentSettingsBase {
    name?: string | undefined;
    groupName?: string | undefined;

    protected _discriminator: string;

    constructor(data?: IComponentSettingsBase) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
        this._discriminator = "ComponentSettingsBase";
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.groupName = _data["GroupName"];
        }
    }

    static fromJS(data: any): ComponentSettingsBase {
        data = typeof data === 'object' ? data : {};
        if (data["ComponentSettingsType"] === "ComponentSettingsIdentifier") {
            let result = new ComponentSettingsIdentifier();
            result.init(data);
            return result;
        }
        if (data["ComponentSettingsType"] === "ComponentSettingsList") {
            let result = new ComponentSettingsList();
            result.init(data);
            return result;
        }
        if (data["ComponentSettingsType"] === "ComponentSettings") {
            let result = new ComponentSettings();
            result.init(data);
            return result;
        }
        throw new Error("The abstract class 'ComponentSettingsBase' cannot be instantiated.");
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["ComponentSettingsType"] = this._discriminator;
        data["Name"] = this.name;
        data["GroupName"] = this.groupName;
        return data;
    }
}

export interface IComponentSettingsBase {
    name?: string | undefined;
    groupName?: string | undefined;
}

export class ComponentSettingsIdentifier extends ComponentSettingsBase implements IComponentSettingsIdentifier {

    constructor(data?: IComponentSettingsIdentifier) {
        super(data);
        this._discriminator = "ComponentSettingsIdentifier";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): ComponentSettingsIdentifier {
        data = typeof data === 'object' ? data : {};
        let result = new ComponentSettingsIdentifier();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IComponentSettingsIdentifier extends IComponentSettingsBase {
}

export class ComponentSettingsList extends ComponentSettingsBase implements IComponentSettingsList {
    items?: ComponentSettingsListItem[] | undefined;

    constructor(data?: IComponentSettingsList) {
        super(data);
        this._discriminator = "ComponentSettingsList";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["Items"])) {
                this.items = [] as any;
                for (let item of _data["Items"])
                    this.items!.push(ComponentSettingsListItem.fromJS(item));
            }
        }
    }

    static fromJS(data: any): ComponentSettingsList {
        data = typeof data === 'object' ? data : {};
        let result = new ComponentSettingsList();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.items)) {
            data["Items"] = [];
            for (let item of this.items)
                data["Items"].push(item.toJSON());
        }
        super.toJSON(data);
        return data;
    }
}

export interface IComponentSettingsList extends IComponentSettingsBase {
    items?: ComponentSettingsListItem[] | undefined;
}

export class ComponentSettingsListItem extends AnnotatedObject implements IComponentSettingsListItem {
    settings?: Setting[] | undefined;
    name?: string | undefined;
    enabledResource?: boolean | undefined;

    constructor(data?: IComponentSettingsListItem) {
        super(data);
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["Settings"])) {
                this.settings = [] as any;
                for (let item of _data["Settings"])
                    this.settings!.push(Setting.fromJS(item));
            }
            this.name = _data["Name"];
            this.enabledResource = _data["EnabledResource"];
        }
    }

    static fromJS(data: any): ComponentSettingsListItem {
        data = typeof data === 'object' ? data : {};
        let result = new ComponentSettingsListItem();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.settings)) {
            data["Settings"] = [];
            for (let item of this.settings)
                data["Settings"].push(item.toJSON());
        }
        data["Name"] = this.name;
        data["EnabledResource"] = this.enabledResource;
        super.toJSON(data);
        return data;
    }
}

export interface IComponentSettingsListItem extends IAnnotatedObject {
    settings?: Setting[] | undefined;
    name?: string | undefined;
    enabledResource?: boolean | undefined;
}

export class ComponentSettings extends ComponentSettingsBase implements IComponentSettings {
    settings?: Setting[] | undefined;

    constructor(data?: IComponentSettings) {
        super(data);
        this._discriminator = "ComponentSettings";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            if (Array.isArray(_data["Settings"])) {
                this.settings = [] as any;
                for (let item of _data["Settings"])
                    this.settings!.push(Setting.fromJS(item));
            }
        }
    }

    static fromJS(data: any): ComponentSettings {
        data = typeof data === 'object' ? data : {};
        let result = new ComponentSettings();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.settings)) {
            data["Settings"] = [];
            for (let item of this.settings)
                data["Settings"].push(item.toJSON());
        }
        super.toJSON(data);
        return data;
    }
}

export interface IComponentSettings extends IComponentSettingsBase {
    settings?: Setting[] | undefined;
}

export class ProfileGroup implements IProfileGroup {
    profiles?: string[] | undefined;
    currentProfile?: string | undefined;
    groupName?: string | undefined;

    constructor(data?: IProfileGroup) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            if (Array.isArray(_data["Profiles"])) {
                this.profiles = [] as any;
                for (let item of _data["Profiles"])
                    this.profiles!.push(item);
            }
            this.currentProfile = _data["CurrentProfile"];
            this.groupName = _data["GroupName"];
        }
    }

    static fromJS(data: any): ProfileGroup {
        data = typeof data === 'object' ? data : {};
        let result = new ProfileGroup();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        if (Array.isArray(this.profiles)) {
            data["Profiles"] = [];
            for (let item of this.profiles)
                data["Profiles"].push(item);
        }
        data["CurrentProfile"] = this.currentProfile;
        data["GroupName"] = this.groupName;
        return data;
    }
}

export interface IProfileGroup {
    profiles?: string[] | undefined;
    currentProfile?: string | undefined;
    groupName?: string | undefined;
}

export class RepositorySettingsPackageDefinition extends RepositoryPackageDefinition implements IRepositorySettingsPackageDefinition {

    constructor(data?: IRepositorySettingsPackageDefinition) {
        super(data);
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): RepositorySettingsPackageDefinition {
        data = typeof data === 'object' ? data : {};
        let result = new RepositorySettingsPackageDefinition();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IRepositorySettingsPackageDefinition extends IRepositoryPackageDefinition {
}

export class SettingsTapPackage implements ISettingsTapPackage {
    name?: string | undefined;
    version?: string | undefined;
    tags?: string | undefined;
    group?: string | undefined;
    owner?: string | undefined;
    infoLink?: string | undefined;
    description?: string | undefined;
    files?: string[] | undefined;
    settingsTypes?: string[] | undefined;

    constructor(data?: ISettingsTapPackage) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.version = _data["Version"];
            this.tags = _data["Tags"];
            this.group = _data["Group"];
            this.owner = _data["Owner"];
            this.infoLink = _data["InfoLink"];
            this.description = _data["Description"];
            if (Array.isArray(_data["Files"])) {
                this.files = [] as any;
                for (let item of _data["Files"])
                    this.files!.push(item);
            }
            if (Array.isArray(_data["SettingsTypes"])) {
                this.settingsTypes = [] as any;
                for (let item of _data["SettingsTypes"])
                    this.settingsTypes!.push(item);
            }
        }
    }

    static fromJS(data: any): SettingsTapPackage {
        data = typeof data === 'object' ? data : {};
        let result = new SettingsTapPackage();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["Version"] = this.version;
        data["Tags"] = this.tags;
        data["Group"] = this.group;
        data["Owner"] = this.owner;
        data["InfoLink"] = this.infoLink;
        data["Description"] = this.description;
        if (Array.isArray(this.files)) {
            data["Files"] = [];
            for (let item of this.files)
                data["Files"].push(item);
        }
        if (Array.isArray(this.settingsTypes)) {
            data["SettingsTypes"] = [];
            for (let item of this.settingsTypes)
                data["SettingsTypes"].push(item);
        }
        return data;
    }
}

export interface ISettingsTapPackage {
    name?: string | undefined;
    version?: string | undefined;
    tags?: string | undefined;
    group?: string | undefined;
    owner?: string | undefined;
    infoLink?: string | undefined;
    description?: string | undefined;
    files?: string[] | undefined;
    settingsTypes?: string[] | undefined;
}

export class TestRun implements ITestRun {
    status?: string | undefined;
    id?: string | undefined;
    verdict?: string | undefined;
    duration?: string | undefined;
    parameters?: Parameter[] | undefined;
    testStepRun?: TestStepRun | undefined;

    constructor(data?: ITestRun) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.status = _data["Status"];
            this.id = _data["Id"];
            this.verdict = _data["Verdict"];
            this.duration = _data["Duration"];
            if (Array.isArray(_data["Parameters"])) {
                this.parameters = [] as any;
                for (let item of _data["Parameters"])
                    this.parameters!.push(Parameter.fromJS(item));
            }
            this.testStepRun = _data["TestStepRun"] ? TestStepRun.fromJS(_data["TestStepRun"]) : <any>undefined;
        }
    }

    static fromJS(data: any): TestRun {
        data = typeof data === 'object' ? data : {};
        let result = new TestRun();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Status"] = this.status;
        data["Id"] = this.id;
        data["Verdict"] = this.verdict;
        data["Duration"] = this.duration;
        if (Array.isArray(this.parameters)) {
            data["Parameters"] = [];
            for (let item of this.parameters)
                data["Parameters"].push(item.toJSON());
        }
        data["TestStepRun"] = this.testStepRun ? this.testStepRun.toJSON() : <any>undefined;
        return data;
    }
}

export interface ITestRun {
    status?: string | undefined;
    id?: string | undefined;
    verdict?: string | undefined;
    duration?: string | undefined;
    parameters?: Parameter[] | undefined;
    testStepRun?: TestStepRun | undefined;
}

export class TestStepRun implements ITestStepRun {
    parentId?: string | undefined;
    testStepId?: string | undefined;
    testStepName?: string | undefined;

    constructor(data?: ITestStepRun) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.parentId = _data["ParentId"];
            this.testStepId = _data["TestStepId"];
            this.testStepName = _data["TestStepName"];
        }
    }

    static fromJS(data: any): TestStepRun {
        data = typeof data === 'object' ? data : {};
        let result = new TestStepRun();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["ParentId"] = this.parentId;
        data["TestStepId"] = this.testStepId;
        data["TestStepName"] = this.testStepName;
        return data;
    }
}

export interface ITestStepRun {
    parentId?: string | undefined;
    testStepId?: string | undefined;
    testStepName?: string | undefined;
}

export class LogEvent implements ILogEvent {
    source?: string | undefined;
    timestamp?: number;
    message?: string | undefined;
    eventType?: number;
    durationNS?: number;

    constructor(data?: ILogEvent) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.source = _data["Source"];
            this.timestamp = _data["Timestamp"];
            this.message = _data["Message"];
            this.eventType = _data["EventType"];
            this.durationNS = _data["DurationNS"];
        }
    }

    static fromJS(data: any): LogEvent {
        data = typeof data === 'object' ? data : {};
        let result = new LogEvent();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Source"] = this.source;
        data["Timestamp"] = this.timestamp;
        data["Message"] = this.message;
        data["EventType"] = this.eventType;
        data["DurationNS"] = this.durationNS;
        return data;
    }
}

export interface ILogEvent {
    source?: string | undefined;
    timestamp?: number;
    message?: string | undefined;
    eventType?: number;
    durationNS?: number;
}

export class Result implements IResult {
    stepRunID?: string | undefined;
    status?: string | undefined;
    name?: string | undefined;
    rows?: number;
    parent?: string | undefined;
    columns?: ResultColumn[] | undefined;

    constructor(data?: IResult) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.stepRunID = _data["StepRunID"];
            this.status = _data["Status"];
            this.name = _data["Name"];
            this.rows = _data["Rows"];
            this.parent = _data["Parent"];
            if (Array.isArray(_data["Columns"])) {
                this.columns = [] as any;
                for (let item of _data["Columns"])
                    this.columns!.push(ResultColumn.fromJS(item));
            }
        }
    }

    static fromJS(data: any): Result {
        data = typeof data === 'object' ? data : {};
        let result = new Result();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["StepRunID"] = this.stepRunID;
        data["Status"] = this.status;
        data["Name"] = this.name;
        data["Rows"] = this.rows;
        data["Parent"] = this.parent;
        if (Array.isArray(this.columns)) {
            data["Columns"] = [];
            for (let item of this.columns)
                data["Columns"].push(item.toJSON());
        }
        return data;
    }
}

export interface IResult {
    stepRunID?: string | undefined;
    status?: string | undefined;
    name?: string | undefined;
    rows?: number;
    parent?: string | undefined;
    columns?: ResultColumn[] | undefined;
}

export class ResultColumn implements IResultColumn {
    name?: string | undefined;
    objectType?: string | undefined;
    data?: any[] | undefined;
    typeCode?: string | undefined;

    constructor(data?: IResultColumn) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
    }

    init(_data?: any) {
        if (_data) {
            this.name = _data["Name"];
            this.objectType = _data["ObjectType"];
            if (Array.isArray(_data["Data"])) {
                this.data = [] as any;
                for (let item of _data["Data"])
                    this.data!.push(item);
            }
            this.typeCode = _data["TypeCode"];
        }
    }

    static fromJS(data: any): ResultColumn {
        data = typeof data === 'object' ? data : {};
        let result = new ResultColumn();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["Name"] = this.name;
        data["ObjectType"] = this.objectType;
        if (Array.isArray(this.data)) {
            data["Data"] = [];
            for (let item of this.data)
                data["Data"].push(item);
        }
        data["TypeCode"] = this.typeCode;
        return data;
    }
}

export interface IResultColumn {
    name?: string | undefined;
    objectType?: string | undefined;
    data?: any[] | undefined;
    typeCode?: string | undefined;
}

export class SessionEvent implements ISessionEvent {
    eventType?: SessionEventType;
    sessionId?: string;

    protected _discriminator: string;

    constructor(data?: ISessionEvent) {
        if (data) {
            for (var property in data) {
                if (data.hasOwnProperty(property))
                    (<any>this)[property] = (<any>data)[property];
            }
        }
        this._discriminator = "SessionEvent";
    }

    init(_data?: any) {
        if (_data) {
            this.eventType = _data["EventType"];
            this.sessionId = _data["SessionId"];
        }
    }

    static fromJS(data: any): SessionEvent {
        data = typeof data === 'object' ? data : {};
        if (data["discriminator"] === "SessionTimeoutEventArgs") {
            let result = new SessionTimeoutEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "StartingEventArgs") {
            let result = new StartingEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "StartedEventArgs") {
            let result = new StartedEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "StoppingEventArgs") {
            let result = new StoppingEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "StoppedEventArgs") {
            let result = new StoppedEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "TestPlanChangeEventArgs") {
            let result = new TestPlanChangeEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "TestPlanExecutionStateChangedEventArgs") {
            let result = new TestPlanExecutionStateChangedEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "SettingsChangedEventArgs") {
            let result = new SettingsChangedEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "TestStepChangeEventArgs") {
            let result = new TestStepChangeEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "BreakEventArgs") {
            let result = new BreakEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "UserInputRequestEventArgs") {
            let result = new UserInputRequestEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "UserInputRequestCompletedEventArgs") {
            let result = new UserInputRequestCompletedEventArgs();
            result.init(data);
            return result;
        }
        if (data["discriminator"] === "TestPlanSettingsChangedEventArgs") {
            let result = new TestPlanSettingsChangedEventArgs();
            result.init(data);
            return result;
        }
        let result = new SessionEvent();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["discriminator"] = this._discriminator;
        data["EventType"] = this.eventType;
        data["SessionId"] = this.sessionId;
        return data;
    }
}

export interface ISessionEvent {
    eventType?: SessionEventType;
    sessionId?: string;
}

export enum SessionEventType {
    SessionStarting = "SessionStarting",
    SessionStarted = "SessionStarted",
    SessionStopping = "SessionStopping",
    SessionStopped = "SessionStopped",
    TestPlanChanged = "TestPlanChanged",
    TestPlanExecutionStateChanged = "TestPlanExecutionStateChanged",
    SettingsChanged = "SettingsChanged",
    TestStepChanged = "TestStepChanged",
    BreakEvent = "BreakEvent",
    UserInputRequested = "UserInputRequested",
    UserInputCompleted = "UserInputCompleted",
    SessionTimeoutHit = "SessionTimeoutHit",
    TestPlanSettingsChanged = "TestPlanSettingsChanged",
    TypeCacheInvalidated = "TypeCacheInvalidated",
}

export class SessionTimeoutEventArgs extends SessionEvent implements ISessionTimeoutEventArgs {

    constructor(data?: ISessionTimeoutEventArgs) {
        super(data);
        this._discriminator = "SessionTimeoutEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): SessionTimeoutEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new SessionTimeoutEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface ISessionTimeoutEventArgs extends ISessionEvent {
}

export class StartingEventArgs extends SessionEvent implements IStartingEventArgs {

    constructor(data?: IStartingEventArgs) {
        super(data);
        this._discriminator = "StartingEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): StartingEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new StartingEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IStartingEventArgs extends ISessionEvent {
}

export class StartedEventArgs extends SessionEvent implements IStartedEventArgs {

    constructor(data?: IStartedEventArgs) {
        super(data);
        this._discriminator = "StartedEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): StartedEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new StartedEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IStartedEventArgs extends ISessionEvent {
}

export class StoppingEventArgs extends SessionEvent implements IStoppingEventArgs {

    constructor(data?: IStoppingEventArgs) {
        super(data);
        this._discriminator = "StoppingEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): StoppingEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new StoppingEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IStoppingEventArgs extends ISessionEvent {
}

export class StoppedEventArgs extends SessionEvent implements IStoppedEventArgs {

    constructor(data?: IStoppedEventArgs) {
        super(data);
        this._discriminator = "StoppedEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): StoppedEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new StoppedEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface IStoppedEventArgs extends ISessionEvent {
}

export class TestPlanChangeEventArgs extends SessionEvent implements ITestPlanChangeEventArgs {

    constructor(data?: ITestPlanChangeEventArgs) {
        super(data);
        this._discriminator = "TestPlanChangeEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): TestPlanChangeEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new TestPlanChangeEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface ITestPlanChangeEventArgs extends ISessionEvent {
}

export class TestPlanExecutionStateChangedEventArgs extends SessionEvent implements ITestPlanExecutionStateChangedEventArgs {
    runStatus?: RunStatus | undefined;

    constructor(data?: ITestPlanExecutionStateChangedEventArgs) {
        super(data);
        this._discriminator = "TestPlanExecutionStateChangedEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.runStatus = _data["RunStatus"] ? RunStatus.fromJS(_data["RunStatus"]) : <any>undefined;
        }
    }

    static fromJS(data: any): TestPlanExecutionStateChangedEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new TestPlanExecutionStateChangedEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["RunStatus"] = this.runStatus ? this.runStatus.toJSON() : <any>undefined;
        super.toJSON(data);
        return data;
    }
}

export interface ITestPlanExecutionStateChangedEventArgs extends ISessionEvent {
    runStatus?: RunStatus | undefined;
}

export class SettingsChangedEventArgs extends SessionEvent implements ISettingsChangedEventArgs {

    constructor(data?: ISettingsChangedEventArgs) {
        super(data);
        this._discriminator = "SettingsChangedEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): SettingsChangedEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new SettingsChangedEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface ISettingsChangedEventArgs extends ISessionEvent {
}

export class TestStepChangeEventArgs extends SessionEvent implements ITestStepChangeEventArgs {
    stepId?: string;

    constructor(data?: ITestStepChangeEventArgs) {
        super(data);
        this._discriminator = "TestStepChangeEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.stepId = _data["StepId"];
        }
    }

    static fromJS(data: any): TestStepChangeEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new TestStepChangeEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["StepId"] = this.stepId;
        super.toJSON(data);
        return data;
    }
}

export interface ITestStepChangeEventArgs extends ISessionEvent {
    stepId?: string;
}

export class BreakEventArgs extends SessionEvent implements IBreakEventArgs {
    stepId?: string;

    constructor(data?: IBreakEventArgs) {
        super(data);
        this._discriminator = "BreakEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.stepId = _data["StepId"];
        }
    }

    static fromJS(data: any): BreakEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new BreakEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["StepId"] = this.stepId;
        super.toJSON(data);
        return data;
    }
}

export interface IBreakEventArgs extends ISessionEvent {
    stepId?: string;
}

export class UserInputRequestEventArgs extends SessionEvent implements IUserInputRequestEventArgs {
    requestId?: string;

    constructor(data?: IUserInputRequestEventArgs) {
        super(data);
        this._discriminator = "UserInputRequestEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.requestId = _data["RequestId"];
        }
    }

    static fromJS(data: any): UserInputRequestEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new UserInputRequestEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["RequestId"] = this.requestId;
        super.toJSON(data);
        return data;
    }
}

export interface IUserInputRequestEventArgs extends ISessionEvent {
    requestId?: string;
}

export class UserInputRequestCompletedEventArgs extends SessionEvent implements IUserInputRequestCompletedEventArgs {
    requestId?: string;
    answered?: boolean;
    timeout?: boolean;

    constructor(data?: IUserInputRequestCompletedEventArgs) {
        super(data);
        this._discriminator = "UserInputRequestCompletedEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
        if (_data) {
            this.requestId = _data["RequestId"];
            this.answered = _data["Answered"];
            this.timeout = _data["Timeout"];
        }
    }

    static fromJS(data: any): UserInputRequestCompletedEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new UserInputRequestCompletedEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        data["RequestId"] = this.requestId;
        data["Answered"] = this.answered;
        data["Timeout"] = this.timeout;
        super.toJSON(data);
        return data;
    }
}

export interface IUserInputRequestCompletedEventArgs extends ISessionEvent {
    requestId?: string;
    answered?: boolean;
    timeout?: boolean;
}

export class TestPlanSettingsChangedEventArgs extends SessionEvent implements ITestPlanSettingsChangedEventArgs {

    constructor(data?: ITestPlanSettingsChangedEventArgs) {
        super(data);
        this._discriminator = "TestPlanSettingsChangedEventArgs";
    }

    init(_data?: any) {
        super.init(_data);
    }

    static fromJS(data: any): TestPlanSettingsChangedEventArgs {
        data = typeof data === 'object' ? data : {};
        let result = new TestPlanSettingsChangedEventArgs();
        result.init(data);
        return result;
    }

    toJSON(data?: any) {
        data = typeof data === 'object' ? data : {};
        super.toJSON(data);
        return data;
    }
}

export interface ITestPlanSettingsChangedEventArgs extends ISessionEvent {
}

export interface FileParameter {
    data: any;
    fileName: string;
}

export interface FileResponse {
    data: Blob;
    status: number;
    fileName?: string;
    headers?: { [name: string]: any };
}

export class ApiException extends Error {
    message: string;
    status: number;
    response: string;
    headers: { [key: string]: any; };
    result: any;

    constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {
        super();

        this.message = message;
        this.status = status;
        this.response = response;
        this.headers = headers;
        this.result = result;
    }

    protected isApiException = true;

    static isApiException(obj: any): obj is ApiException {
        return obj.isApiException === true;
    }
}

function throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {
    if (result !== null && result !== undefined)
        throw result;
    else
        throw new ApiException(message, status, response, headers, null);
}

}