/*
 * searchquery.cc
 *
 * Copyright (c) 2002, 2003 Frerich Raabe <raabe@kde.org>
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. For licensing and distribution details, check the
 * accompanying file 'COPYING'.
 */
#include "port.h"
#include "searchquery.h"

using namespace Barry;

SearchQuery::SearchQuery()
{
}

SearchQuery::SearchQuery( const QString &searchTerm, Flags flags, DataCollections collections ):
	m_searchTerm( searchTerm ),
	m_flags( flags ),
	m_collections( collections )
{
	if ( m_flags & RegExp ) {
		m_regexp.setPattern( m_searchTerm );
		m_regexp.setCaseSensitive( m_flags & CaseSensitive );
	}
}

bool SearchQuery::operator==( const SearchQuery &rhs ) const
{
	return m_searchTerm == rhs.m_searchTerm &&
	       m_flags == rhs.m_flags &&
	       m_collections == rhs.m_collections;
}

bool SearchQuery::matches( const Port &port ) const
{
	bool found = false;
	if ( m_flags & RegExp ) {
		found = m_regexp.search( port.name() ) > -1;
		if ( m_collections & Comments )
			found |= m_regexp.search( port.comment() ) > -1;
		if ( m_collections & Descriptions )
			found |= m_regexp.search( port.description() ) > -1;
	} else {
		const bool caseSensitive = m_flags & CaseSensitive;
		found = port.name().find( m_searchTerm, 0, caseSensitive ) != -1;
		if ( m_collections & Comments )
			found |= port.comment().find( m_searchTerm, 0, caseSensitive ) != -1;
		if ( m_collections & Descriptions )
			found |= port.description().find( m_searchTerm, 0, caseSensitive ) != -1;
	}
	return found;
}
// vim:ts=4:sw=4:noet:list
