docs: function(fieldName, comparisonType, comparisonOp, compareTo) {
              if (!this.dataModelObject.hasField(fieldName)) {
                  throw new Error("Cannot add filter on a nonexistent field.");
              }
              if (comparisonType !== this.dataModelObject.fieldByName(fieldName).type) {
                  throw new Error(
                      "Cannot add " + comparisonType +  
                      " filter on " + fieldName + 
                      " because it is of type " +
                      this.dataModelObject.fieldByName(fieldName).type);
              }
              if (!utils.contains(this._comparisons[comparisonType], comparisonOp)) {
                  throw new Error(
                      "Cannot add " + comparisonType + 
                      " filter because " + comparisonOp +
                      " is not a valid comparison operator");
              }
  
              var ret = {
                  fieldName: fieldName,
                  owner: this.dataModelObject.fieldByName(fieldName).lineage.join("."),
                  type: comparisonType
              };
              // These fields are type dependent
              if (utils.contains(["boolean", "string", "ipv4", "number"], ret.type)) {
                  ret.rule = {
                      comparator: comparisonOp,
                      compareTo: compareTo
                  };
              }
              this.filters.push(ret);
      
              return this;
          }