/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM /root/tmp/build-seamonkey/comm-release/mailnews/base/search/public/nsIMsgFilterPlugin.idl
 */

#ifndef __gen_nsIMsgFilterPlugin_h__
#define __gen_nsIMsgFilterPlugin_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_MailNewsTypes2_h__
#include "MailNewsTypes2.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
class nsIMsgFilterHitNotify; /* forward declaration */

class nsIMsgWindow; /* forward declaration */

class nsIMsgDBHdr; /* forward declaration */

class nsIStreamListener; /* forward declaration */

class nsIFile; /* forward declaration */


/* starting interface:    nsIMsgFilterPlugin */
#define NS_IMSGFILTERPLUGIN_IID_STR "e2e56690-a676-11d6-80c9-00008646b737"

#define NS_IMSGFILTERPLUGIN_IID \
  {0xe2e56690, 0xa676, 0x11d6, \
    { 0x80, 0xc9, 0x00, 0x00, 0x86, 0x46, 0xb7, 0x37 }}

class NS_NO_VTABLE nsIMsgFilterPlugin : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGFILTERPLUGIN_IID)

  /* void shutdown (); */
  NS_IMETHOD Shutdown(void) = 0;

  /* readonly attribute boolean shouldDownloadAllHeaders; */
  NS_IMETHOD GetShouldDownloadAllHeaders(bool *aShouldDownloadAllHeaders) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgFilterPlugin, NS_IMSGFILTERPLUGIN_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGFILTERPLUGIN \
  NS_IMETHOD Shutdown(void); \
  NS_IMETHOD GetShouldDownloadAllHeaders(bool *aShouldDownloadAllHeaders); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGFILTERPLUGIN(_to) \
  NS_IMETHOD Shutdown(void) { return _to Shutdown(); } \
  NS_IMETHOD GetShouldDownloadAllHeaders(bool *aShouldDownloadAllHeaders) { return _to GetShouldDownloadAllHeaders(aShouldDownloadAllHeaders); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGFILTERPLUGIN(_to) \
  NS_IMETHOD Shutdown(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Shutdown(); } \
  NS_IMETHOD GetShouldDownloadAllHeaders(bool *aShouldDownloadAllHeaders) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetShouldDownloadAllHeaders(aShouldDownloadAllHeaders); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgFilterPlugin : public nsIMsgFilterPlugin
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGFILTERPLUGIN

  nsMsgFilterPlugin();

private:
  ~nsMsgFilterPlugin();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgFilterPlugin, nsIMsgFilterPlugin)

nsMsgFilterPlugin::nsMsgFilterPlugin()
{
  /* member initializers and constructor code */
}

nsMsgFilterPlugin::~nsMsgFilterPlugin()
{
  /* destructor code */
}

/* void shutdown (); */
NS_IMETHODIMP nsMsgFilterPlugin::Shutdown()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean shouldDownloadAllHeaders; */
NS_IMETHODIMP nsMsgFilterPlugin::GetShouldDownloadAllHeaders(bool *aShouldDownloadAllHeaders)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIJunkMailClassificationListener */
#define NS_IJUNKMAILCLASSIFICATIONLISTENER_IID_STR "b15a0f9c-df07-4af0-9ba8-80dca68ac35d"

#define NS_IJUNKMAILCLASSIFICATIONLISTENER_IID \
  {0xb15a0f9c, 0xdf07, 0x4af0, \
    { 0x9b, 0xa8, 0x80, 0xdc, 0xa6, 0x8a, 0xc3, 0x5d }}

class NS_NO_VTABLE nsIJunkMailClassificationListener : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IJUNKMAILCLASSIFICATIONLISTENER_IID)

  /* void onMessageClassified (in string aMsgURI, in nsMsgJunkStatus aClassification, in uint32_t aJunkPercent); */
  NS_IMETHOD OnMessageClassified(const char * aMsgURI, nsMsgJunkStatus aClassification, uint32_t aJunkPercent) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIJunkMailClassificationListener, NS_IJUNKMAILCLASSIFICATIONLISTENER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIJUNKMAILCLASSIFICATIONLISTENER \
  NS_IMETHOD OnMessageClassified(const char * aMsgURI, nsMsgJunkStatus aClassification, uint32_t aJunkPercent); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIJUNKMAILCLASSIFICATIONLISTENER(_to) \
  NS_IMETHOD OnMessageClassified(const char * aMsgURI, nsMsgJunkStatus aClassification, uint32_t aJunkPercent) { return _to OnMessageClassified(aMsgURI, aClassification, aJunkPercent); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIJUNKMAILCLASSIFICATIONLISTENER(_to) \
  NS_IMETHOD OnMessageClassified(const char * aMsgURI, nsMsgJunkStatus aClassification, uint32_t aJunkPercent) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnMessageClassified(aMsgURI, aClassification, aJunkPercent); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsJunkMailClassificationListener : public nsIJunkMailClassificationListener
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIJUNKMAILCLASSIFICATIONLISTENER

  nsJunkMailClassificationListener();

private:
  ~nsJunkMailClassificationListener();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsJunkMailClassificationListener, nsIJunkMailClassificationListener)

nsJunkMailClassificationListener::nsJunkMailClassificationListener()
{
  /* member initializers and constructor code */
}

nsJunkMailClassificationListener::~nsJunkMailClassificationListener()
{
  /* destructor code */
}

/* void onMessageClassified (in string aMsgURI, in nsMsgJunkStatus aClassification, in uint32_t aJunkPercent); */
NS_IMETHODIMP nsJunkMailClassificationListener::OnMessageClassified(const char * aMsgURI, nsMsgJunkStatus aClassification, uint32_t aJunkPercent)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgTraitClassificationListener */
#define NS_IMSGTRAITCLASSIFICATIONLISTENER_IID_STR "af247d07-72f0-482d-9eab-5a786407aa4c"

#define NS_IMSGTRAITCLASSIFICATIONLISTENER_IID \
  {0xaf247d07, 0x72f0, 0x482d, \
    { 0x9e, 0xab, 0x5a, 0x78, 0x64, 0x07, 0xaa, 0x4c }}

class NS_NO_VTABLE nsIMsgTraitClassificationListener : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGTRAITCLASSIFICATIONLISTENER_IID)

  /* void onMessageTraitsClassified (in string aMsgURI, in unsigned long aTraitCount, [array, size_is (aTraitCount)] in unsigned long aTraits, [array, size_is (aTraitCount)] in unsigned long aPercents); */
  NS_IMETHOD OnMessageTraitsClassified(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aTraits, uint32_t *aPercents) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgTraitClassificationListener, NS_IMSGTRAITCLASSIFICATIONLISTENER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGTRAITCLASSIFICATIONLISTENER \
  NS_IMETHOD OnMessageTraitsClassified(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aTraits, uint32_t *aPercents); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGTRAITCLASSIFICATIONLISTENER(_to) \
  NS_IMETHOD OnMessageTraitsClassified(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aTraits, uint32_t *aPercents) { return _to OnMessageTraitsClassified(aMsgURI, aTraitCount, aTraits, aPercents); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGTRAITCLASSIFICATIONLISTENER(_to) \
  NS_IMETHOD OnMessageTraitsClassified(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aTraits, uint32_t *aPercents) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnMessageTraitsClassified(aMsgURI, aTraitCount, aTraits, aPercents); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgTraitClassificationListener : public nsIMsgTraitClassificationListener
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGTRAITCLASSIFICATIONLISTENER

  nsMsgTraitClassificationListener();

private:
  ~nsMsgTraitClassificationListener();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgTraitClassificationListener, nsIMsgTraitClassificationListener)

nsMsgTraitClassificationListener::nsMsgTraitClassificationListener()
{
  /* member initializers and constructor code */
}

nsMsgTraitClassificationListener::~nsMsgTraitClassificationListener()
{
  /* destructor code */
}

/* void onMessageTraitsClassified (in string aMsgURI, in unsigned long aTraitCount, [array, size_is (aTraitCount)] in unsigned long aTraits, [array, size_is (aTraitCount)] in unsigned long aPercents); */
NS_IMETHODIMP nsMsgTraitClassificationListener::OnMessageTraitsClassified(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aTraits, uint32_t *aPercents)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgTraitDetailListener */
#define NS_IMSGTRAITDETAILLISTENER_IID_STR "12667532-88d1-44a7-ad48-f73719be5c92"

#define NS_IMSGTRAITDETAILLISTENER_IID \
  {0x12667532, 0x88d1, 0x44a7, \
    { 0xad, 0x48, 0xf7, 0x37, 0x19, 0xbe, 0x5c, 0x92 }}

class NS_NO_VTABLE nsIMsgTraitDetailListener : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGTRAITDETAILLISTENER_IID)

  /* void onMessageTraitDetails (in string aMsgUri, in unsigned long aProTrait, in unsigned long tokenCount, [array, size_is (tokenCount)] in wstring tokenStrings, [array, size_is (tokenCount)] in unsigned long tokenPercents, [array, size_is (tokenCount)] in unsigned long runningPercents); */
  NS_IMETHOD OnMessageTraitDetails(const char * aMsgUri, uint32_t aProTrait, uint32_t tokenCount, const PRUnichar * *tokenStrings, uint32_t *tokenPercents, uint32_t *runningPercents) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgTraitDetailListener, NS_IMSGTRAITDETAILLISTENER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGTRAITDETAILLISTENER \
  NS_IMETHOD OnMessageTraitDetails(const char * aMsgUri, uint32_t aProTrait, uint32_t tokenCount, const PRUnichar * *tokenStrings, uint32_t *tokenPercents, uint32_t *runningPercents); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGTRAITDETAILLISTENER(_to) \
  NS_IMETHOD OnMessageTraitDetails(const char * aMsgUri, uint32_t aProTrait, uint32_t tokenCount, const PRUnichar * *tokenStrings, uint32_t *tokenPercents, uint32_t *runningPercents) { return _to OnMessageTraitDetails(aMsgUri, aProTrait, tokenCount, tokenStrings, tokenPercents, runningPercents); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGTRAITDETAILLISTENER(_to) \
  NS_IMETHOD OnMessageTraitDetails(const char * aMsgUri, uint32_t aProTrait, uint32_t tokenCount, const PRUnichar * *tokenStrings, uint32_t *tokenPercents, uint32_t *runningPercents) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnMessageTraitDetails(aMsgUri, aProTrait, tokenCount, tokenStrings, tokenPercents, runningPercents); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgTraitDetailListener : public nsIMsgTraitDetailListener
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGTRAITDETAILLISTENER

  nsMsgTraitDetailListener();

private:
  ~nsMsgTraitDetailListener();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgTraitDetailListener, nsIMsgTraitDetailListener)

nsMsgTraitDetailListener::nsMsgTraitDetailListener()
{
  /* member initializers and constructor code */
}

nsMsgTraitDetailListener::~nsMsgTraitDetailListener()
{
  /* destructor code */
}

/* void onMessageTraitDetails (in string aMsgUri, in unsigned long aProTrait, in unsigned long tokenCount, [array, size_is (tokenCount)] in wstring tokenStrings, [array, size_is (tokenCount)] in unsigned long tokenPercents, [array, size_is (tokenCount)] in unsigned long runningPercents); */
NS_IMETHODIMP nsMsgTraitDetailListener::OnMessageTraitDetails(const char * aMsgUri, uint32_t aProTrait, uint32_t tokenCount, const PRUnichar * *tokenStrings, uint32_t *tokenPercents, uint32_t *runningPercents)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIJunkMailPlugin */
#define NS_IJUNKMAILPLUGIN_IID_STR "8ea5bbca-f735-4d43-8541-d203d8e2ff2f"

#define NS_IJUNKMAILPLUGIN_IID \
  {0x8ea5bbca, 0xf735, 0x4d43, \
    { 0x85, 0x41, 0xd2, 0x03, 0xd8, 0xe2, 0xff, 0x2f }}

class NS_NO_VTABLE nsIJunkMailPlugin : public nsIMsgFilterPlugin {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IJUNKMAILPLUGIN_IID)

  enum {
    UNCLASSIFIED = 0U,
    GOOD = 1U,
    JUNK = 2U,
    IS_SPAM_SCORE = 100U,
    IS_HAM_SCORE = 0U,
    GOOD_TRAIT = 1U,
    JUNK_TRAIT = 2U
  };

  /* void classifyMessage (in string aMsgURI, in nsIMsgWindow aMsgWindow, in nsIJunkMailClassificationListener aListener); */
  NS_IMETHOD ClassifyMessage(const char * aMsgURI, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) = 0;

  /* void classifyMessages (in unsigned long aCount, [array, size_is (aCount)] in string aMsgURIs, in nsIMsgWindow aMsgWindow, in nsIJunkMailClassificationListener aListener); */
  NS_IMETHOD ClassifyMessages(uint32_t aCount, const char * *aMsgURIs, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) = 0;

  /* void classifyTraitsInMessage (in string aMsgURI, in unsigned long aTraitCount, [array, size_is (aTraitCount)] in unsigned long aProTraits, [array, size_is (aTraitCount)] in unsigned long aAntiTraits, in nsIMsgTraitClassificationListener aTraitListener, [optional] in nsIMsgWindow aMsgWindow, [optional] in nsIJunkMailClassificationListener aJunkListener); */
  NS_IMETHOD ClassifyTraitsInMessage(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) = 0;

  /* void classifyTraitsInMessages (in unsigned long aCount, [array, size_is (aCount)] in string aMsgURIs, in unsigned long aTraitCount, [array, size_is (aTraitCount)] in unsigned long aProTraits, [array, size_is (aTraitCount)] in unsigned long aAntiTraits, in nsIMsgTraitClassificationListener aTraitListener, [optional] in nsIMsgWindow aMsgWindow, [optional] in nsIJunkMailClassificationListener aJunkListener); */
  NS_IMETHOD ClassifyTraitsInMessages(uint32_t aCount, const char * *aMsgURIs, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) = 0;

  /* void setMessageClassification (in string aMsgURI, in nsMsgJunkStatus aOldUserClassification, in nsMsgJunkStatus aNewClassification, in nsIMsgWindow aMsgWindow, in nsIJunkMailClassificationListener aListener); */
  NS_IMETHOD SetMessageClassification(const char * aMsgURI, nsMsgJunkStatus aOldUserClassification, nsMsgJunkStatus aNewClassification, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) = 0;

  /* void setMsgTraitClassification (in string aMsgURI, in unsigned long aOldCount, [array, size_is (aOldCount)] in unsigned long aOldTraits, in unsigned long aNewCount, [array, size_is (aNewCount)] in unsigned long aNewTraits, [optional] in nsIMsgTraitClassificationListener aTraitListener, [optional] in nsIMsgWindow aMsgWindow, [optional] in nsIJunkMailClassificationListener aJunkListener); */
  NS_IMETHOD SetMsgTraitClassification(const char * aMsgURI, uint32_t aOldCount, uint32_t *aOldTraits, uint32_t aNewCount, uint32_t *aNewTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) = 0;

  /* readonly attribute boolean userHasClassified; */
  NS_IMETHOD GetUserHasClassified(bool *aUserHasClassified) = 0;

  /* void resetTrainingData (); */
  NS_IMETHOD ResetTrainingData(void) = 0;

  /* void detailMessage (in string aMsgURI, in unsigned long aProTrait, in unsigned long aAntiTrait, in nsIMsgTraitDetailListener aListener, [optional] in nsIMsgWindow aMsgWindow); */
  NS_IMETHOD DetailMessage(const char * aMsgURI, uint32_t aProTrait, uint32_t aAntiTrait, nsIMsgTraitDetailListener *aListener, nsIMsgWindow *aMsgWindow) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIJunkMailPlugin, NS_IJUNKMAILPLUGIN_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIJUNKMAILPLUGIN \
  NS_IMETHOD ClassifyMessage(const char * aMsgURI, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener); \
  NS_IMETHOD ClassifyMessages(uint32_t aCount, const char * *aMsgURIs, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener); \
  NS_IMETHOD ClassifyTraitsInMessage(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener); \
  NS_IMETHOD ClassifyTraitsInMessages(uint32_t aCount, const char * *aMsgURIs, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener); \
  NS_IMETHOD SetMessageClassification(const char * aMsgURI, nsMsgJunkStatus aOldUserClassification, nsMsgJunkStatus aNewClassification, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener); \
  NS_IMETHOD SetMsgTraitClassification(const char * aMsgURI, uint32_t aOldCount, uint32_t *aOldTraits, uint32_t aNewCount, uint32_t *aNewTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener); \
  NS_IMETHOD GetUserHasClassified(bool *aUserHasClassified); \
  NS_IMETHOD ResetTrainingData(void); \
  NS_IMETHOD DetailMessage(const char * aMsgURI, uint32_t aProTrait, uint32_t aAntiTrait, nsIMsgTraitDetailListener *aListener, nsIMsgWindow *aMsgWindow); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIJUNKMAILPLUGIN(_to) \
  NS_IMETHOD ClassifyMessage(const char * aMsgURI, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) { return _to ClassifyMessage(aMsgURI, aMsgWindow, aListener); } \
  NS_IMETHOD ClassifyMessages(uint32_t aCount, const char * *aMsgURIs, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) { return _to ClassifyMessages(aCount, aMsgURIs, aMsgWindow, aListener); } \
  NS_IMETHOD ClassifyTraitsInMessage(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) { return _to ClassifyTraitsInMessage(aMsgURI, aTraitCount, aProTraits, aAntiTraits, aTraitListener, aMsgWindow, aJunkListener); } \
  NS_IMETHOD ClassifyTraitsInMessages(uint32_t aCount, const char * *aMsgURIs, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) { return _to ClassifyTraitsInMessages(aCount, aMsgURIs, aTraitCount, aProTraits, aAntiTraits, aTraitListener, aMsgWindow, aJunkListener); } \
  NS_IMETHOD SetMessageClassification(const char * aMsgURI, nsMsgJunkStatus aOldUserClassification, nsMsgJunkStatus aNewClassification, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) { return _to SetMessageClassification(aMsgURI, aOldUserClassification, aNewClassification, aMsgWindow, aListener); } \
  NS_IMETHOD SetMsgTraitClassification(const char * aMsgURI, uint32_t aOldCount, uint32_t *aOldTraits, uint32_t aNewCount, uint32_t *aNewTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) { return _to SetMsgTraitClassification(aMsgURI, aOldCount, aOldTraits, aNewCount, aNewTraits, aTraitListener, aMsgWindow, aJunkListener); } \
  NS_IMETHOD GetUserHasClassified(bool *aUserHasClassified) { return _to GetUserHasClassified(aUserHasClassified); } \
  NS_IMETHOD ResetTrainingData(void) { return _to ResetTrainingData(); } \
  NS_IMETHOD DetailMessage(const char * aMsgURI, uint32_t aProTrait, uint32_t aAntiTrait, nsIMsgTraitDetailListener *aListener, nsIMsgWindow *aMsgWindow) { return _to DetailMessage(aMsgURI, aProTrait, aAntiTrait, aListener, aMsgWindow); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIJUNKMAILPLUGIN(_to) \
  NS_IMETHOD ClassifyMessage(const char * aMsgURI, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClassifyMessage(aMsgURI, aMsgWindow, aListener); } \
  NS_IMETHOD ClassifyMessages(uint32_t aCount, const char * *aMsgURIs, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClassifyMessages(aCount, aMsgURIs, aMsgWindow, aListener); } \
  NS_IMETHOD ClassifyTraitsInMessage(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClassifyTraitsInMessage(aMsgURI, aTraitCount, aProTraits, aAntiTraits, aTraitListener, aMsgWindow, aJunkListener); } \
  NS_IMETHOD ClassifyTraitsInMessages(uint32_t aCount, const char * *aMsgURIs, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClassifyTraitsInMessages(aCount, aMsgURIs, aTraitCount, aProTraits, aAntiTraits, aTraitListener, aMsgWindow, aJunkListener); } \
  NS_IMETHOD SetMessageClassification(const char * aMsgURI, nsMsgJunkStatus aOldUserClassification, nsMsgJunkStatus aNewClassification, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMessageClassification(aMsgURI, aOldUserClassification, aNewClassification, aMsgWindow, aListener); } \
  NS_IMETHOD SetMsgTraitClassification(const char * aMsgURI, uint32_t aOldCount, uint32_t *aOldTraits, uint32_t aNewCount, uint32_t *aNewTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMsgTraitClassification(aMsgURI, aOldCount, aOldTraits, aNewCount, aNewTraits, aTraitListener, aMsgWindow, aJunkListener); } \
  NS_IMETHOD GetUserHasClassified(bool *aUserHasClassified) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUserHasClassified(aUserHasClassified); } \
  NS_IMETHOD ResetTrainingData(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ResetTrainingData(); } \
  NS_IMETHOD DetailMessage(const char * aMsgURI, uint32_t aProTrait, uint32_t aAntiTrait, nsIMsgTraitDetailListener *aListener, nsIMsgWindow *aMsgWindow) { return !_to ? NS_ERROR_NULL_POINTER : _to->DetailMessage(aMsgURI, aProTrait, aAntiTrait, aListener, aMsgWindow); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsJunkMailPlugin : public nsIJunkMailPlugin
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIJUNKMAILPLUGIN

  nsJunkMailPlugin();

private:
  ~nsJunkMailPlugin();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsJunkMailPlugin, nsIJunkMailPlugin)

nsJunkMailPlugin::nsJunkMailPlugin()
{
  /* member initializers and constructor code */
}

nsJunkMailPlugin::~nsJunkMailPlugin()
{
  /* destructor code */
}

/* void classifyMessage (in string aMsgURI, in nsIMsgWindow aMsgWindow, in nsIJunkMailClassificationListener aListener); */
NS_IMETHODIMP nsJunkMailPlugin::ClassifyMessage(const char * aMsgURI, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void classifyMessages (in unsigned long aCount, [array, size_is (aCount)] in string aMsgURIs, in nsIMsgWindow aMsgWindow, in nsIJunkMailClassificationListener aListener); */
NS_IMETHODIMP nsJunkMailPlugin::ClassifyMessages(uint32_t aCount, const char * *aMsgURIs, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void classifyTraitsInMessage (in string aMsgURI, in unsigned long aTraitCount, [array, size_is (aTraitCount)] in unsigned long aProTraits, [array, size_is (aTraitCount)] in unsigned long aAntiTraits, in nsIMsgTraitClassificationListener aTraitListener, [optional] in nsIMsgWindow aMsgWindow, [optional] in nsIJunkMailClassificationListener aJunkListener); */
NS_IMETHODIMP nsJunkMailPlugin::ClassifyTraitsInMessage(const char * aMsgURI, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void classifyTraitsInMessages (in unsigned long aCount, [array, size_is (aCount)] in string aMsgURIs, in unsigned long aTraitCount, [array, size_is (aTraitCount)] in unsigned long aProTraits, [array, size_is (aTraitCount)] in unsigned long aAntiTraits, in nsIMsgTraitClassificationListener aTraitListener, [optional] in nsIMsgWindow aMsgWindow, [optional] in nsIJunkMailClassificationListener aJunkListener); */
NS_IMETHODIMP nsJunkMailPlugin::ClassifyTraitsInMessages(uint32_t aCount, const char * *aMsgURIs, uint32_t aTraitCount, uint32_t *aProTraits, uint32_t *aAntiTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setMessageClassification (in string aMsgURI, in nsMsgJunkStatus aOldUserClassification, in nsMsgJunkStatus aNewClassification, in nsIMsgWindow aMsgWindow, in nsIJunkMailClassificationListener aListener); */
NS_IMETHODIMP nsJunkMailPlugin::SetMessageClassification(const char * aMsgURI, nsMsgJunkStatus aOldUserClassification, nsMsgJunkStatus aNewClassification, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setMsgTraitClassification (in string aMsgURI, in unsigned long aOldCount, [array, size_is (aOldCount)] in unsigned long aOldTraits, in unsigned long aNewCount, [array, size_is (aNewCount)] in unsigned long aNewTraits, [optional] in nsIMsgTraitClassificationListener aTraitListener, [optional] in nsIMsgWindow aMsgWindow, [optional] in nsIJunkMailClassificationListener aJunkListener); */
NS_IMETHODIMP nsJunkMailPlugin::SetMsgTraitClassification(const char * aMsgURI, uint32_t aOldCount, uint32_t *aOldTraits, uint32_t aNewCount, uint32_t *aNewTraits, nsIMsgTraitClassificationListener *aTraitListener, nsIMsgWindow *aMsgWindow, nsIJunkMailClassificationListener *aJunkListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean userHasClassified; */
NS_IMETHODIMP nsJunkMailPlugin::GetUserHasClassified(bool *aUserHasClassified)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void resetTrainingData (); */
NS_IMETHODIMP nsJunkMailPlugin::ResetTrainingData()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void detailMessage (in string aMsgURI, in unsigned long aProTrait, in unsigned long aAntiTrait, in nsIMsgTraitDetailListener aListener, [optional] in nsIMsgWindow aMsgWindow); */
NS_IMETHODIMP nsJunkMailPlugin::DetailMessage(const char * aMsgURI, uint32_t aProTrait, uint32_t aAntiTrait, nsIMsgTraitDetailListener *aListener, nsIMsgWindow *aMsgWindow)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgCorpus */
#define NS_IMSGCORPUS_IID_STR "70bad26f-dfd4-41bd-8fab-4c09b9c1e845"

#define NS_IMSGCORPUS_IID \
  {0x70bad26f, 0xdfd4, 0x41bd, \
    { 0x8f, 0xab, 0x4c, 0x09, 0xb9, 0xc1, 0xe8, 0x45 }}

class NS_NO_VTABLE nsIMsgCorpus : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGCORPUS_IID)

  /* void clearTrait (in unsigned long aTrait); */
  NS_IMETHOD ClearTrait(uint32_t aTrait) = 0;

  /* void updateData (in nsIFile aFile, in boolean aIsAdd, [optional] in unsigned long aRemapCount, [array, size_is (aRemapCount), optional] in unsigned long aFromTraits, [array, size_is (aRemapCount), optional] in unsigned long aToTraits); */
  NS_IMETHOD UpdateData(nsIFile *aFile, bool aIsAdd, uint32_t aRemapCount, uint32_t *aFromTraits, uint32_t *aToTraits) = 0;

  /* unsigned long getTokenCount (in AUTF8String aWord, in unsigned long aTrait); */
  NS_IMETHOD GetTokenCount(const nsACString & aWord, uint32_t aTrait, uint32_t *_retval) = 0;

  /* unsigned long corpusCounts (in unsigned long aTrait, out unsigned long aMessageCount); */
  NS_IMETHOD CorpusCounts(uint32_t aTrait, uint32_t *aMessageCount, uint32_t *_retval) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgCorpus, NS_IMSGCORPUS_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGCORPUS \
  NS_IMETHOD ClearTrait(uint32_t aTrait); \
  NS_IMETHOD UpdateData(nsIFile *aFile, bool aIsAdd, uint32_t aRemapCount, uint32_t *aFromTraits, uint32_t *aToTraits); \
  NS_IMETHOD GetTokenCount(const nsACString & aWord, uint32_t aTrait, uint32_t *_retval); \
  NS_IMETHOD CorpusCounts(uint32_t aTrait, uint32_t *aMessageCount, uint32_t *_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGCORPUS(_to) \
  NS_IMETHOD ClearTrait(uint32_t aTrait) { return _to ClearTrait(aTrait); } \
  NS_IMETHOD UpdateData(nsIFile *aFile, bool aIsAdd, uint32_t aRemapCount, uint32_t *aFromTraits, uint32_t *aToTraits) { return _to UpdateData(aFile, aIsAdd, aRemapCount, aFromTraits, aToTraits); } \
  NS_IMETHOD GetTokenCount(const nsACString & aWord, uint32_t aTrait, uint32_t *_retval) { return _to GetTokenCount(aWord, aTrait, _retval); } \
  NS_IMETHOD CorpusCounts(uint32_t aTrait, uint32_t *aMessageCount, uint32_t *_retval) { return _to CorpusCounts(aTrait, aMessageCount, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGCORPUS(_to) \
  NS_IMETHOD ClearTrait(uint32_t aTrait) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearTrait(aTrait); } \
  NS_IMETHOD UpdateData(nsIFile *aFile, bool aIsAdd, uint32_t aRemapCount, uint32_t *aFromTraits, uint32_t *aToTraits) { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdateData(aFile, aIsAdd, aRemapCount, aFromTraits, aToTraits); } \
  NS_IMETHOD GetTokenCount(const nsACString & aWord, uint32_t aTrait, uint32_t *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTokenCount(aWord, aTrait, _retval); } \
  NS_IMETHOD CorpusCounts(uint32_t aTrait, uint32_t *aMessageCount, uint32_t *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CorpusCounts(aTrait, aMessageCount, _retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgCorpus : public nsIMsgCorpus
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGCORPUS

  nsMsgCorpus();

private:
  ~nsMsgCorpus();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgCorpus, nsIMsgCorpus)

nsMsgCorpus::nsMsgCorpus()
{
  /* member initializers and constructor code */
}

nsMsgCorpus::~nsMsgCorpus()
{
  /* destructor code */
}

/* void clearTrait (in unsigned long aTrait); */
NS_IMETHODIMP nsMsgCorpus::ClearTrait(uint32_t aTrait)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void updateData (in nsIFile aFile, in boolean aIsAdd, [optional] in unsigned long aRemapCount, [array, size_is (aRemapCount), optional] in unsigned long aFromTraits, [array, size_is (aRemapCount), optional] in unsigned long aToTraits); */
NS_IMETHODIMP nsMsgCorpus::UpdateData(nsIFile *aFile, bool aIsAdd, uint32_t aRemapCount, uint32_t *aFromTraits, uint32_t *aToTraits)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long getTokenCount (in AUTF8String aWord, in unsigned long aTrait); */
NS_IMETHODIMP nsMsgCorpus::GetTokenCount(const nsACString & aWord, uint32_t aTrait, uint32_t *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long corpusCounts (in unsigned long aTrait, out unsigned long aMessageCount); */
NS_IMETHODIMP nsMsgCorpus::CorpusCounts(uint32_t aTrait, uint32_t *aMessageCount, uint32_t *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsIMsgFilterPlugin_h__ */
