getFilterByType: function()

in ambari-web/app/views/common/filter_view.js [381:604]


  getFilterByType: function (type, isGlobal) {
    switch (type) {
      case 'ambari-bandwidth':
        return function (rowValue, rangeExp) {
          var compareChar = isNaN(rangeExp.charAt(0)) ? rangeExp.charAt(0) : false;
          var compareScale = rangeExp.charAt(rangeExp.length - 1);
          var compareValue = parseFloat(rangeExp.substr(compareChar ? 1 : 0));
          if (rangeExp.length === 1 && compareChar !== false) {
            // User types only '=' or '>' or '<', so don't filter column values
            return true;
          }
          var oneSymbolScales = {
            k: 1024,
            m: 1048576,
            g: 1073741824
          };
          var twoSymbolsScales = {
            KB: 1024,
            MB: 1048576,
            GB: 1073741824
          };

          compareValue *= oneSymbolScales[compareScale] ? oneSymbolScales[compareScale] : oneSymbolScales.g; // default value in GB
          rowValue = jQuery(rowValue).text() ? jQuery(rowValue).text() : rowValue;

          var convertedRowValue;
          if (rowValue === '<1KB') {
            convertedRowValue = 1;
          } else {
            var rowValueScale = rowValue.substr(rowValue.length - 2, 2);
            if (twoSymbolsScales[rowValueScale]) {
              convertedRowValue = parseFloat(rowValue) * twoSymbolsScales[rowValueScale];
            }
          }

          switch (compareChar) {
            case '<':
              return compareValue > convertedRowValue;
            case '>':
              return compareValue < convertedRowValue;
            case false:
            case '=':
              return compareValue === convertedRowValue;
            default:
              return false;
          }
        };
      case 'duration':
        return function (rowValue, rangeExp) {
          var compareChar = isNaN(rangeExp.charAt(0)) ? rangeExp.charAt(0) : false;
          var compareScale = rangeExp.charAt(rangeExp.length - 1);
          var compareValue = parseFloat(rangeExp.substr(compareChar ? 1 : 0));
          if (rangeExp.length === 1 && compareChar !== false) {
            // User types only '=' or '>' or '<', so don't filter column values
            return true;
          }
          var oneSymbolsScales = {
            s: 1000,
            m: 60000,
            h: 3600000
          };
          compareValue *= oneSymbolsScales[compareScale] ? oneSymbolsScales[compareScale] : oneSymbolsScales.s;
          rowValue = jQuery(rowValue).text() ? jQuery(rowValue).text() : rowValue;

          switch (compareChar) {
            case '<':
              return compareValue > rowValue;
            case '>':
              return compareValue < rowValue;
            case false:
            case '=':
              return compareValue == rowValue;
            default:
              return false;
          }
        };
      case 'date':
        return function (rowValue, rangeExp) {
          var timePassed = App.dateTime() - rowValue;
          switch (rangeExp) {
            case 'Past 1 hour':
              return timePassed <= 3600000;
            case 'Past 1 Day':
              return timePassed <= 86400000;
            case 'Past 2 Days':
              return timePassed <= 172800000;
            case 'Past 7 Days':
              return timePassed <= 604800000;
            case 'Past 14 Days':
              return timePassed <= 1209600000;
            case 'Past 30 Days':
              return timePassed <= 2592000000;
            case 'Any':
              return true;
            default:
              return false;
          }
        };
      case 'number':
        return function (rowValue, rangeExp) {
          var compareChar = rangeExp.charAt(0);
          var compareValue;
          if (rangeExp.length === 1) {
            if (isNaN(parseInt(compareChar, 10))) {
              // User types only '=' or '>' or '<', so don't filter column values
              return true;
            }
            compareValue = parseFloat(parseFloat(rangeExp).toFixed(2));
          }
          else {
            if (isNaN(parseInt(compareChar, 10))) {
              compareValue = parseFloat(parseFloat(rangeExp.substr(1, rangeExp.length)).toFixed(2));
            }
            else {
              compareValue = parseFloat(parseFloat(rangeExp.substr(0, rangeExp.length)).toFixed(2));
            }
          }
          rowValue = parseFloat(jQuery(rowValue).text() ? jQuery(rowValue).text() : rowValue);
          switch (compareChar) {
            case '<':
              return compareValue > rowValue;
            case '>':
              return compareValue < rowValue;
            case '=':
            default:
              return compareValue === rowValue;
          }
        };
      case 'sub-resource':
        return function (origin, compareValue) {
          if (!Array.isArray(compareValue) || !compareValue.length) {
            return true;
          }

          return origin.some(function (item) {
            for (var i = 0, l = compareValue.length; i < l; i++) {
              if (Array.isArray(compareValue[i].value)) {
                if (!compareValue[i].value.contains(item.get(compareValue[i].property))) return false;
              } else {
                if (item.get(compareValue[i].property) !== compareValue[i].value) return false;
              }
            }
            return true;
          });
        };
      case 'multiple':
        return function (origin, compareValue) {
          var options = compareValue.split(',');
          var rowValue = typeof origin === "string" ? origin : origin.mapProperty('componentName').join(" ");
          var str = new RegExp(compareValue, "i");
          for (var i = 0; i < options.length; i++) {
            if (!isGlobal) {
              str = new RegExp('(\\W|^)' + options[i] + '(\\W|$)');
            }
            if (rowValue.search(str) !== -1) {
              return true;
            }
          }
          return false;
        };
      case 'boolean':
      case 'select':
        return function (origin, compareValue) {
          return origin === compareValue;
        };
      case 'os':
        return function (origin, compareValue) {
          return origin.getEach('osType').contains(compareValue)
        };
      case 'range':
        return function (origin, compareValue) {
          if (compareValue[1] && compareValue[0]) {
            return origin >= compareValue[0] && origin <= compareValue[1];
          }
          if (compareValue[0]) {
            return origin >= compareValue[0];
          }
          if (compareValue[1]) {
            return origin <= compareValue[1]
          }
          return true;
        };
      case 'alert_status':
        /**
         * origin - alertDefinition.summary
         * compareValue - "OK|WARNING|CRITICAL|UNKNOWN|PENDING"
         * PENDING means that OK is 0, WARNING is 0, CRITICAL is 0 and UNKNOWN is 0
         */
        return function (origin, compareValue) {
          if ('PENDING' === compareValue) {
            var isPending = true;
            Em.keys(origin).forEach(function(state) {
              if (origin[state] && (origin[state].count > 0 || origin[state].maintenanceCount > 0)) {
                isPending = false;
              }
            });
            return isPending;
          }
          return !!origin[compareValue] && (origin[compareValue].count > 0 || origin[compareValue].maintenanceCount > 0);
        };
      case 'alert_group':
        return function (origin, compareValue) {
          return origin.mapProperty('id').contains(compareValue);
        };
      case 'enable_disable':
        return function (origin, compareValue) {
          return origin === (compareValue === 'enabled');
        };
      case 'file_extension':
        return function(origin, compareValue) {
          return origin.endsWith(compareValue);
        };
      case 'string':
      default:
        return function (origin, compareValue) {
          if (validator.isValidMatchesRegexp(compareValue)) {
            var escapedCompareValue = compareValue.replace("(", "\\(").replace(")", "\\)").trim();
            var regex = new RegExp(escapedCompareValue, "i");
            return regex.test(origin);
          }
          return false;
        }
    }
  },