00001
00002
00003
00004
00005
#ifndef _kmsearchpattern_h_
00006
#define _kmsearchpattern_h_
00007
00008
#include <qptrlist.h>
00009
#include <qstring.h>
00010
#include <qcstring.h>
00011
#include "kmmsgbase.h"
00012
00013
class KMMessage;
00014
class KConfig;
00015
class DwBoyerMoore;
00016
class DwString;
00017
00018
00019
00020
const int FILTER_MAX_RULES=8;
00021
00029 class KMSearchRule
00030 {
00031
public:
00039 enum Function { FuncContains=0, FuncContainsNot,
00040 FuncEquals, FuncNotEqual,
00041 FuncRegExp, FuncNotRegExp,
00042 FuncIsGreater, FuncIsLessOrEqual,
00043 FuncIsLess, FuncIsGreaterOrEqual };
00044
KMSearchRule (
const QCString & field=0, Function=FuncContains,
00045
const QString &contents=QString::null );
00046
KMSearchRule (
const KMSearchRule &other );
00047
00048
const KMSearchRule & operator=(
const KMSearchRule & other );
00049
00052
static KMSearchRule* createInstance(
const QCString & field=0,
00053 Function function=FuncContains,
00054
const QString & contents=QString::null );
00055
00056
static KMSearchRule* createInstance(
const QCString & field,
00057
const char * function,
00058
const QString & contents );
00059
00060
static KMSearchRule * createInstance(
const KMSearchRule & other );
00061
00067
static KMSearchRule* createInstanceFromConfig(
const KConfig * config,
int aIdx );
00068
00069
virtual ~
KMSearchRule() {};
00070
00075
virtual bool matches(
const KMMessage * msg )
const = 0;
00076
00081
virtual bool matches(
const DwString & str, KMMessage & msg,
00082
const DwBoyerMoore * headerField=0,
00083
int headerLen=-1 )
const;
00084
00089
virtual bool isEmpty() const = 0;
00090
00093 virtual
bool requiresBody()
const {
return true; }
00094
00095
00101
void writeConfig( KConfig * config,
int aIdx )
const;
00102
00105 Function function()
const {
return mFunction; }
00106
00108 void setFunction( Function aFunction ) { mFunction = aFunction; }
00109
00120 QCString
field()
const {
return mField; }
00121
00124 void setField(
const QCString & field ) { mField = field; }
00125
00128 QString
contents()
const {
return mContents; }
00130 void setContents(
const QString & aContents ) { mContents = aContents; }
00131
00133
#ifndef NDEBUG
00134
const QString
asString() const;
00135 #endif
00136
00137 private:
00138 static Function configValueToFunc( const
char * str );
00139 QCString mField;
00140 Function mFunction;
00141 QString mContents;
00142 };
00143
00144
00145
00146
00153 class
KMSearchRuleString : public
KMSearchRule
00154 {
00155
public:
00156
KMSearchRuleString(
const QCString & field=0, Function function=FuncContains,
00157
const QString & contents=QString::null );
00158
KMSearchRuleString(
const KMSearchRuleString & other );
00159
const KMSearchRuleString & operator=(
const KMSearchRuleString & other );
00160
00161
virtual ~
KMSearchRuleString();
00162
virtual bool isEmpty()
const ;
00163
virtual bool requiresBody()
const;
00164
00165
virtual bool matches(
const KMMessage * msg )
const;
00166
00170
virtual bool matches(
const DwString & str, KMMessage & msg,
00171
const DwBoyerMoore * headerField=0,
00172
int headerLen=-1 )
const;
00173
00175
bool matchesInternal(
const QString & msgContents )
const;
00176
00177
private:
00178
const DwBoyerMoore *mBmHeaderField;
00179 };
00180
00181
00188 class KMSearchRuleNumerical :
public KMSearchRule
00189 {
00190
public:
00191
KMSearchRuleNumerical(
const QCString & field=0, Function function=FuncContains,
00192
const QString & contents=QString::null );
00193
virtual bool isEmpty()
const ;
00194
00195
virtual bool matches(
const KMMessage * msg )
const;
00196
00198
bool matchesInternal(
unsigned long numericalValue,
00199
unsigned long numericalMsgContents,
00200
const QString & msgContents )
const;
00201 };
00202
00203
00210 class KMSearchRuleStatus :
public KMSearchRule
00211 {
00212
public:
00213
KMSearchRuleStatus(
const QCString & field=0, Function function=FuncContains,
00214
const QString & contents=QString::null );
00215
virtual bool isEmpty()
const ;
00216
virtual bool matches(
const KMMessage * msg )
const;
00217
00218
virtual bool matches(
const DwString &, KMMessage &,
00219
const DwBoyerMoore *,
00220
int )
const;
00221
private:
00222 KMMsgStatus mStatus;
00223 };
00224
00225
00226
00246 class KMSearchPattern :
public QPtrList<KMSearchRule>
00247 {
00248
00249
public:
00254 enum Operator { OpAnd, OpOr };
00263
KMSearchPattern(
const KConfig * config=0 );
00264
00266 ~
KMSearchPattern();
00267
00277
bool matches(
const KMMessage * msg )
const;
00278
bool matches(
const DwString & str )
const;
00279
bool matches( Q_UINT32 sernum )
const;
00280
00283
bool requiresBody() const;
00284
00290
void purify();
00291
00305
void readConfig( const KConfig * config );
00312
void writeConfig( KConfig * config ) const;
00313
00315 QString name()
const {
return mName; }
00318 void setName(
const QString & newName ) { mName = newName ; }
00319
00321 KMSearchPattern::Operator op()
const {
return mOperator; }
00323 void setOp( KMSearchPattern::Operator aOp ) { mOperator = aOp; }
00324
00326
#ifndef NDEBUG
00327
QString
asString() const;
00328 #endif
00329
00331 const
KMSearchPattern & operator=( const
KMSearchPattern & aPattern );
00332
00333 private:
00340
void importLegacyConfig( const KConfig * config );
00343
void init();
00344
00345 QString mName;
00346 Operator mOperator;
00347 };
00348
00349 #endif