# File lib/hammer_cli_csv/content_view_filters.rb, line 40
      def create_filters_from_csv(line)
        @existing_filters[line[ORGANIZATION]] ||= {}
        if !@existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]]
          @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]] ||= {}
          @api.resource(:content_view_filters)\
            .call(:index, {
                    'per_page' => 999999,
                    'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW])
                  })['results'].each do |filter|
            @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][filter['name']] = filter['id'] if filter
          end
        end

        repository_ids = collect_column(line[REPOSITORIES]) do |repository|
          katello_repository(line[ORGANIZATION], :name => repository)
        end

        line[COUNT].to_i.times do |number|
          name = namify(line[NAME], number)

          filter_id = @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][name]
          if !filter_id
            print "Creating filter '#{name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose?
            filter_id = @api.resource(:content_view_filters)\
              .call(:create, {
                      'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW]),
                      'name' => name,
                      'description' => line[DESCRIPTION],
                      'type' => filter_type(line[TYPE]),
                      'inclusion' => filter_inclusion?(line[TYPE]),
                      'repository_ids' => repository_ids
                    })['id']
            @existing_filters[line[ORGANIZATION]][name] = filter_id
          else
            print "Updating filter '#{name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose?
            @api.resource(:content_view_filters)\
              .call(:update, {
                      'id' => filter_id,
                      'description' => line[DESCRIPTION],
                      'type' => filter_type(line[TYPE]),
                      'inclusion' => filter_inclusion?(line[TYPE]),
                      'repository_ids' => repository_ids
                    })
          end

          @existing_rules ||= {}
          @existing_rules[line[ORGANIZATION]] ||= {}
          @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]] ||= {}
          @api.resource(:content_view_filter_rules)\
            .call(:index, {
                    'per_page' => 999999,
                    'content_view_filter_id' => filter_id
                  })['results'].each do |rule|
            @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]][rule['name']] = rule
          end

          collect_column(line[RULES]) do |rule|
            name, type, version = rule.split('|')
            params = {
              'content_view_filter_id' => filter_id,
              'name' => name
            }
            if type == '='
              params['type'] = 'equal',
                               params['version'] = version
            elsif type == '<'
              params['type'] = 'less',
                               params['max_version'] = version
            elsif type == '>'
              params['type'] = 'greater',
                               params['min_version'] = version
            elsif type == '-'
              params['type'] = 'range',
                               min_version, max_version = version.split(',')
              params['min_version'] = min_version
              params['max_version'] = max_version
            else
              raise "Unknown type '#{type}' from '#{line[RULES]}'"
            end

            rule = @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]][name]
            if !rule
              print "creating rule '#{rule}'..." if option_verbose?
              rule = @api.resource(:content_view_filter_rules).call(:create, params)
              @existing_rules[line[ORGANIZATION]][line[CONTENTVIEW]][rule['name']] = rule
            else
              print "updating rule '#{rule}'..." if option_verbose?
              params['id'] = rule['id']
              @api.resource(:content_view_filter_rules).call(:update, params)
            end
          end

          puts 'done' if option_verbose?
        end

      rescue RuntimeError => e
        raise "#{e}\n       #{line}"
      end