src/composites/Parameters.js
function Parameters(collection) {
    abstractions.Composite.call(this, utilities.types.PARAMETERS);

    // the parameters are immutable so the methods are included in the constructor
    const duplicator = new utilities.Duplicator();
    const copy = duplicator.duplicateComponent(collection);

    this.getCollection = function() { return copy; };

    this.toArray = function() {
        const array = copy.toArray();
        return array;
    };
    
    this.acceptVisitor = function(visitor) {
        visitor.visitParameters(this);
    };
    
    this.getSize = function() {
        const size = copy.getSize();
        return size;
    };
    
    this.getParameter = function(key, index) {
        var value;
        index = index || 1;  // default is the first parameter
        if (copy.getTypeId() === utilities.types.CATALOG) {
            value = copy.getValue(key);
        } else {
            value = copy.getItem(index);
        }
        return value;
    };

    this.setParameter = function(key, value, index) {
        index = index || 1;  // default is the first parameter
        if (copy.getTypeId() === utilities.types.CATALOG) {
            copy.setValue(key, value);
        } else {
            copy.setItem(index, value);
        }
    };

    return this;
}
function Parameters(collection) {
    abstractions.Composite.call(this, utilities.types.PARAMETERS);

    // the parameters are immutable so the methods are included in the constructor
    const duplicator = new utilities.Duplicator();
    const copy = duplicator.duplicateComponent(collection);

    this.getCollection = function() { return copy; };

    this.toArray = function() {
        const array = copy.toArray();
        return array;
    };
    
    this.acceptVisitor = function(visitor) {
        visitor.visitParameters(this);
    };
    
    this.getSize = function() {
        const size = copy.getSize();
        return size;
    };
    
    this.getParameter = function(key, index) {
        var value;
        index = index || 1;  // default is the first parameter
        if (copy.getTypeId() === utilities.types.CATALOG) {
            value = copy.getValue(key);
        } else {
            value = copy.getItem(index);
        }
        return value;
    };

    this.setParameter = function(key, value, index) {
        index = index || 1;  // default is the first parameter
        if (copy.getTypeId() === utilities.types.CATALOG) {
            copy.setValue(key, value);
        } else {
            copy.setItem(index, value);
        }
    };

    return this;
}
function Parameters ( collection ) { abstractions . Composite . call ( this , utilities . types . PARAMETERS ) ; // the parameters are immutable so the methods are included in the constructor const duplicator = new utilities . Duplicator ( ) ; const copy = duplicator . duplicateComponent ( collection ) ; this . getCollection = function ( ) { return copy ; } ; this . toArray = function ( ) { const array = copy . toArray ( ) ; return array ; } ; this . acceptVisitor = function ( visitor ) { visitor . visitParameters ( this ) ; } ; this . getSize = function ( ) { const size = copy . getSize ( ) ; return size ; } ; this . getParameter = function ( key , index ) { var value ; index = index || 1 ; // default is the first parameter if ( copy . getTypeId ( ) === utilities . types . CATALOG ) { value = copy . getValue ( key ) ; } else { value = copy . getItem ( index ) ; } return value ; } ; this . setParameter = function ( key , value , index ) { index = index || 1 ; // default is the first parameter if ( copy . getTypeId ( ) === utilities . types . CATALOG ) { copy . setValue ( key , value ) ; } else { copy . setItem ( index , value ) ; } } ; return this ; }
PUBLIC CONSTRUCTORS 
This constructor creates a new parameter catalog or list.

@constructor
@param {Collection} collection The collection of parameters.
@returns {Parameters} The new parameter list.
PUBLIC CONSTRUCTORS This constructor creates a new parameter catalog or list .