Home Reference Source Repository

js/Models/Workflow.js

import BaseModel from './BaseModel';
import ConnectionCollection from 'js/Collections/ConnectionCollection';
import InputPortCollection from 'js/Collections/InputPortCollection';
import OutputPortCollection from 'js/Collections/OutputPortCollection';
import WorkflowJobCollection from 'js/Collections/WorkflowJobCollection';
import WorkflowRunCollection from 'js/Collections/WorkflowRunCollection';

/**
 * Workflow.
 */
export default class Workflow extends BaseModel
{
///////////////////////////////////////////////////////////////////////////////////////
// PUBLIC METHODS
///////////////////////////////////////////////////////////////////////////////////////
    /**
     * Initialize
     *
     * @param {object} options Backbone.Model options object; 'options.connections' (ConnectionCollection or associated Backbone.Collection raw-object representation), 'options.workflow_input_ports' (InputPortCollection or associated Backbone.Collection raw-object representation), 'options.workflow_output_ports' (OutputPortCollection or associated Backbone.Collection raw-object representation), 'options.workflow_jobs' (WorkflowJobCollection or associated Backbone.Collection raw-object representation), and 'options.workflow_runs' (WorkflowRunCollection or associated Backbone.Collection raw-object representation) must also be provided
     */
    initialize(options)
    {
        this.set('connections', new ConnectionCollection(options.connections));
        this.set('workflow_input_ports', new InputPortCollection(options.workflow_input_ports));
        this.set('workflow_output_ports', new OutputPortCollection(options.workflow_output_ports));
        this.set('workflow_jobs', new WorkflowJobCollection(options.workflow_jobs));
        this.set('workflow_runs', new WorkflowRunCollection(options.workflow_runs));
    }

    /**
     * Returns defaults.
     *
     * @return {object} object holding default values
     */
    defaults()
    {
        return {description: null, name: null, created: null, updated: null, valid: false};
    }

    /**
     * Override of Backbone.Model.parse. This will populate 'workflow_runs', 'workflow_jobs', 'workflow_input_ports', and 'workflow_output_ports' with the appropriate models.
     *
     * @param {object} response JSON response from server
     * @return {object} response object
     */
    parse(response)
    {
        for (var i in response.workflow_runs)
        {
            var modelClass = this.get('workflow_runs').model;
            var model = new modelClass(response.workflow_runs[i]);
            this.get('workflow_runs').add(model, {merge: true});
        }
        response.workflow_runs = this.get('workflow_runs');

        for (var i in response.workflow_jobs)
        {
            var modelClass = this.get('workflow_jobs').model;
            var model = new modelClass(response.workflow_jobs[i]);
            this.get('workflow_jobs').add(model, {merge: true});
        }
        response.workflow_jobs = this.get('workflow_jobs');

        this.get('workflow_input_ports').set(response.workflow_input_ports, {merge: true, remove: true});
        response.workflow_input_ports = this.get('workflow_input_ports');

        for (var i in response.workflow_output_ports)
        {
            var modelClass = this.get('workflow_output_ports').model;
            var model = new modelClass(response.workflow_output_ports[i]);
            this.get('workflow_output_ports').add(model, {merge: true});
        }
        response.workflow_output_ports = this.get('workflow_output_ports');

        return response;
    }
}
Workflow.prototype.routeName = 'workflows';