code: 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;
  }
docs: 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.