/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM flockIBlogWebService.idl
 */

#ifndef __gen_flockIBlogWebService_h__
#define __gen_flockIBlogWebService_h__


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

#ifndef __gen_nsISimpleEnumerator_h__
#include "nsISimpleEnumerator.h"
#endif

#ifndef __gen_nsIStringEnumerator_h__
#include "nsIStringEnumerator.h"
#endif

#ifndef __gen_nsIRDFDataSource_h__
#include "nsIRDFDataSource.h"
#endif

#ifndef __gen_nsIRDFNode_h__
#include "nsIRDFNode.h"
#endif

#ifndef __gen_flockIError_h__
#include "flockIError.h"
#endif

#ifndef __gen_flockIWebService_h__
#include "flockIWebService.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif

/* starting interface:    flockIBlogLink */
#define FLOCKIBLOGLINK_IID_STR "78b76670-a8db-4fea-adbe-54ab509aa467"

#define FLOCKIBLOGLINK_IID \
  {0x78b76670, 0xa8db, 0x4fea, \
    { 0xad, 0xbe, 0x54, 0xab, 0x50, 0x9a, 0xa4, 0x67 }}

/**
 * Used for automatic detection for blog API on self-hosted blogs.
 *
 * @see flockICustomBlogWebService#detectAccount
 */
class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogLink : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGLINK_IID)

  /* attribute AString href; */
  NS_SCRIPTABLE NS_IMETHOD GetHref(nsAString & aHref) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetHref(const nsAString & aHref) = 0;

  /* attribute AString rel; */
  NS_SCRIPTABLE NS_IMETHOD GetRel(nsAString & aRel) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetRel(const nsAString & aRel) = 0;

  /* attribute AString type; */
  NS_SCRIPTABLE NS_IMETHOD GetType(nsAString & aType) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsAString & aType) = 0;

  /* attribute AString title; */
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogLink, FLOCKIBLOGLINK_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGLINK \
  NS_SCRIPTABLE NS_IMETHOD GetHref(nsAString & aHref); \
  NS_SCRIPTABLE NS_IMETHOD SetHref(const nsAString & aHref); \
  NS_SCRIPTABLE NS_IMETHOD GetRel(nsAString & aRel); \
  NS_SCRIPTABLE NS_IMETHOD SetRel(const nsAString & aRel); \
  NS_SCRIPTABLE NS_IMETHOD GetType(nsAString & aType); \
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsAString & aType); \
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle); \
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGLINK(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetHref(nsAString & aHref) { return _to GetHref(aHref); } \
  NS_SCRIPTABLE NS_IMETHOD SetHref(const nsAString & aHref) { return _to SetHref(aHref); } \
  NS_SCRIPTABLE NS_IMETHOD GetRel(nsAString & aRel) { return _to GetRel(aRel); } \
  NS_SCRIPTABLE NS_IMETHOD SetRel(const nsAString & aRel) { return _to SetRel(aRel); } \
  NS_SCRIPTABLE NS_IMETHOD GetType(nsAString & aType) { return _to GetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsAString & aType) { return _to SetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle) { return _to GetTitle(aTitle); } \
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle) { return _to SetTitle(aTitle); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGLINK(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetHref(nsAString & aHref) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHref(aHref); } \
  NS_SCRIPTABLE NS_IMETHOD SetHref(const nsAString & aHref) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetHref(aHref); } \
  NS_SCRIPTABLE NS_IMETHOD GetRel(nsAString & aRel) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRel(aRel); } \
  NS_SCRIPTABLE NS_IMETHOD SetRel(const nsAString & aRel) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRel(aRel); } \
  NS_SCRIPTABLE NS_IMETHOD GetType(nsAString & aType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD SetType(const nsAString & aType) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetType(aType); } \
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTitle(aTitle); } \
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTitle(aTitle); } 

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

/* Header file */
class _MYCLASS_ : public flockIBlogLink
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGLINK

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogLink)

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

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

/* attribute AString href; */
NS_IMETHODIMP _MYCLASS_::GetHref(nsAString & aHref)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetHref(const nsAString & aHref)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString rel; */
NS_IMETHODIMP _MYCLASS_::GetRel(nsAString & aRel)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetRel(const nsAString & aRel)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString type; */
NS_IMETHODIMP _MYCLASS_::GetType(nsAString & aType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetType(const nsAString & aType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString title; */
NS_IMETHODIMP _MYCLASS_::GetTitle(nsAString & aTitle)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTitle(const nsAString & aTitle)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockIBlogCategory */
#define FLOCKIBLOGCATEGORY_IID_STR "73c5d97d-c715-439a-86c9-3086b4576a46"

#define FLOCKIBLOGCATEGORY_IID \
  {0x73c5d97d, 0xc715, 0x439a, \
    { 0x86, 0xc9, 0x30, 0x86, 0xb4, 0x57, 0x6a, 0x46 }}

/**
 * A category already existing on a blog
 *
 * @see flockIBlogWebService
 */
class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogCategory : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGCATEGORY_IID)

  /**
   * id of the category internal to the server. It may be a numeric
   * value for the server, but Flock treats it as a string.
   */
  /* attribute AString id; */
  NS_SCRIPTABLE NS_IMETHOD GetId(nsAString & aId) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetId(const nsAString & aId) = 0;

  /** Human readable category label, eg. "sports" or "movies" */
  /* attribute AString label; */
  NS_SCRIPTABLE NS_IMETHOD GetLabel(nsAString & aLabel) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetLabel(const nsAString & aLabel) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogCategory, FLOCKIBLOGCATEGORY_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGCATEGORY \
  NS_SCRIPTABLE NS_IMETHOD GetId(nsAString & aId); \
  NS_SCRIPTABLE NS_IMETHOD SetId(const nsAString & aId); \
  NS_SCRIPTABLE NS_IMETHOD GetLabel(nsAString & aLabel); \
  NS_SCRIPTABLE NS_IMETHOD SetLabel(const nsAString & aLabel); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGCATEGORY(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetId(nsAString & aId) { return _to GetId(aId); } \
  NS_SCRIPTABLE NS_IMETHOD SetId(const nsAString & aId) { return _to SetId(aId); } \
  NS_SCRIPTABLE NS_IMETHOD GetLabel(nsAString & aLabel) { return _to GetLabel(aLabel); } \
  NS_SCRIPTABLE NS_IMETHOD SetLabel(const nsAString & aLabel) { return _to SetLabel(aLabel); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGCATEGORY(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetId(nsAString & aId) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetId(aId); } \
  NS_SCRIPTABLE NS_IMETHOD SetId(const nsAString & aId) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetId(aId); } \
  NS_SCRIPTABLE NS_IMETHOD GetLabel(nsAString & aLabel) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLabel(aLabel); } \
  NS_SCRIPTABLE NS_IMETHOD SetLabel(const nsAString & aLabel) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetLabel(aLabel); } 

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

/* Header file */
class _MYCLASS_ : public flockIBlogCategory
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGCATEGORY

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogCategory)

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

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

/* attribute AString id; */
NS_IMETHODIMP _MYCLASS_::GetId(nsAString & aId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetId(const nsAString & aId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString label; */
NS_IMETHODIMP _MYCLASS_::GetLabel(nsAString & aLabel)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetLabel(const nsAString & aLabel)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockIBlogPost */
#define FLOCKIBLOGPOST_IID_STR "81fc5b1e-c739-4b12-94f9-a9bf6d9938fe"

#define FLOCKIBLOGPOST_IID \
  {0x81fc5b1e, 0xc739, 0x4b12, \
    { 0x94, 0xf9, 0xa9, 0xbf, 0x6d, 0x99, 0x38, 0xfe }}

/**
 * A post to be published to a blog
 *
 * @see flockIBlogWebService#newPost
 * @see flockIBlogWebService#editPost
 */
class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogPost : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGPOST_IID)

  /**
   * The id on the server. May be null if this is a new post,
   * but either this or editURI must be set if the user want to
   * update/replace an existing post
   */
  /* attribute AString postid; */
  NS_SCRIPTABLE NS_IMETHOD GetPostid(nsAString & aPostid) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetPostid(const nsAString & aPostid) = 0;

  /**
   * The editURI on the server. May be null if this is a new post,
   * but either this or postid must be set if the user want to
   * update/replace an existing post
   *
   * @see flockIBlogWebService#newPost
   * @see flockIBlogWebService#editPost
   */
  /* attribute AString editURI; */
  NS_SCRIPTABLE NS_IMETHOD GetEditURI(nsAString & aEditURI) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetEditURI(const nsAString & aEditURI) = 0;

  /** The post title. May be null. */
  /* attribute AString title; */
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle) = 0;

  /** The post description. May be null. */
  /* attribute AString description; */
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsAString & aDescription) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsAString & aDescription) = 0;

  /**
   * The publishing date, in a format dependant on the service.
   * To be left null for new posts.
   */
  /* attribute AString issued; */
  NS_SCRIPTABLE NS_IMETHOD GetIssued(nsAString & aIssued) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetIssued(const nsAString & aIssued) = 0;

  /**
   * Tags to be associated to the post. If the service supports tags native
   * tags are used, otherwise Technorati tags are inserted at the end of the post.
   *
   * Elements of the nsIStringEnumerator are of type AString.
   */
  /* attribute nsIStringEnumerator tags; */
  NS_SCRIPTABLE NS_IMETHOD GetTags(nsIStringEnumerator * *aTags) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetTags(nsIStringEnumerator * aTags) = 0;

  /**
   * Categories to be associated to the post. Has no effect for services that don't
   * support categories.
   *
   * Elements of the nsIStringEnumerator are of type flockIBlogCategory.
   *
   * @see flockIBlogCategory
   */
  /* attribute nsISimpleEnumerator categories; */
  NS_SCRIPTABLE NS_IMETHOD GetCategories(nsISimpleEnumerator * *aCategories) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetCategories(nsISimpleEnumerator * aCategories) = 0;

  /**
   * Additional attributes, specific to the service: privacy, moods...
   *
   * Elements of the nsIStringEnumerator are of type AString.
   */
  /* attribute nsIStringEnumerator extra; */
  NS_SCRIPTABLE NS_IMETHOD GetExtra(nsIStringEnumerator * *aExtra) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetExtra(nsIStringEnumerator * aExtra) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogPost, FLOCKIBLOGPOST_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGPOST \
  NS_SCRIPTABLE NS_IMETHOD GetPostid(nsAString & aPostid); \
  NS_SCRIPTABLE NS_IMETHOD SetPostid(const nsAString & aPostid); \
  NS_SCRIPTABLE NS_IMETHOD GetEditURI(nsAString & aEditURI); \
  NS_SCRIPTABLE NS_IMETHOD SetEditURI(const nsAString & aEditURI); \
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle); \
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle); \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsAString & aDescription); \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsAString & aDescription); \
  NS_SCRIPTABLE NS_IMETHOD GetIssued(nsAString & aIssued); \
  NS_SCRIPTABLE NS_IMETHOD SetIssued(const nsAString & aIssued); \
  NS_SCRIPTABLE NS_IMETHOD GetTags(nsIStringEnumerator * *aTags); \
  NS_SCRIPTABLE NS_IMETHOD SetTags(nsIStringEnumerator * aTags); \
  NS_SCRIPTABLE NS_IMETHOD GetCategories(nsISimpleEnumerator * *aCategories); \
  NS_SCRIPTABLE NS_IMETHOD SetCategories(nsISimpleEnumerator * aCategories); \
  NS_SCRIPTABLE NS_IMETHOD GetExtra(nsIStringEnumerator * *aExtra); \
  NS_SCRIPTABLE NS_IMETHOD SetExtra(nsIStringEnumerator * aExtra); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGPOST(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetPostid(nsAString & aPostid) { return _to GetPostid(aPostid); } \
  NS_SCRIPTABLE NS_IMETHOD SetPostid(const nsAString & aPostid) { return _to SetPostid(aPostid); } \
  NS_SCRIPTABLE NS_IMETHOD GetEditURI(nsAString & aEditURI) { return _to GetEditURI(aEditURI); } \
  NS_SCRIPTABLE NS_IMETHOD SetEditURI(const nsAString & aEditURI) { return _to SetEditURI(aEditURI); } \
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle) { return _to GetTitle(aTitle); } \
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle) { return _to SetTitle(aTitle); } \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsAString & aDescription) { return _to GetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsAString & aDescription) { return _to SetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD GetIssued(nsAString & aIssued) { return _to GetIssued(aIssued); } \
  NS_SCRIPTABLE NS_IMETHOD SetIssued(const nsAString & aIssued) { return _to SetIssued(aIssued); } \
  NS_SCRIPTABLE NS_IMETHOD GetTags(nsIStringEnumerator * *aTags) { return _to GetTags(aTags); } \
  NS_SCRIPTABLE NS_IMETHOD SetTags(nsIStringEnumerator * aTags) { return _to SetTags(aTags); } \
  NS_SCRIPTABLE NS_IMETHOD GetCategories(nsISimpleEnumerator * *aCategories) { return _to GetCategories(aCategories); } \
  NS_SCRIPTABLE NS_IMETHOD SetCategories(nsISimpleEnumerator * aCategories) { return _to SetCategories(aCategories); } \
  NS_SCRIPTABLE NS_IMETHOD GetExtra(nsIStringEnumerator * *aExtra) { return _to GetExtra(aExtra); } \
  NS_SCRIPTABLE NS_IMETHOD SetExtra(nsIStringEnumerator * aExtra) { return _to SetExtra(aExtra); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGPOST(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetPostid(nsAString & aPostid) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPostid(aPostid); } \
  NS_SCRIPTABLE NS_IMETHOD SetPostid(const nsAString & aPostid) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetPostid(aPostid); } \
  NS_SCRIPTABLE NS_IMETHOD GetEditURI(nsAString & aEditURI) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEditURI(aEditURI); } \
  NS_SCRIPTABLE NS_IMETHOD SetEditURI(const nsAString & aEditURI) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetEditURI(aEditURI); } \
  NS_SCRIPTABLE NS_IMETHOD GetTitle(nsAString & aTitle) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTitle(aTitle); } \
  NS_SCRIPTABLE NS_IMETHOD SetTitle(const nsAString & aTitle) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTitle(aTitle); } \
  NS_SCRIPTABLE NS_IMETHOD GetDescription(nsAString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD SetDescription(const nsAString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDescription(aDescription); } \
  NS_SCRIPTABLE NS_IMETHOD GetIssued(nsAString & aIssued) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIssued(aIssued); } \
  NS_SCRIPTABLE NS_IMETHOD SetIssued(const nsAString & aIssued) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetIssued(aIssued); } \
  NS_SCRIPTABLE NS_IMETHOD GetTags(nsIStringEnumerator * *aTags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTags(aTags); } \
  NS_SCRIPTABLE NS_IMETHOD SetTags(nsIStringEnumerator * aTags) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTags(aTags); } \
  NS_SCRIPTABLE NS_IMETHOD GetCategories(nsISimpleEnumerator * *aCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCategories(aCategories); } \
  NS_SCRIPTABLE NS_IMETHOD SetCategories(nsISimpleEnumerator * aCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCategories(aCategories); } \
  NS_SCRIPTABLE NS_IMETHOD GetExtra(nsIStringEnumerator * *aExtra) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetExtra(aExtra); } \
  NS_SCRIPTABLE NS_IMETHOD SetExtra(nsIStringEnumerator * aExtra) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetExtra(aExtra); } 

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

/* Header file */
class _MYCLASS_ : public flockIBlogPost
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGPOST

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogPost)

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

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

/* attribute AString postid; */
NS_IMETHODIMP _MYCLASS_::GetPostid(nsAString & aPostid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetPostid(const nsAString & aPostid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString editURI; */
NS_IMETHODIMP _MYCLASS_::GetEditURI(nsAString & aEditURI)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetEditURI(const nsAString & aEditURI)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString title; */
NS_IMETHODIMP _MYCLASS_::GetTitle(nsAString & aTitle)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTitle(const nsAString & aTitle)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString description; */
NS_IMETHODIMP _MYCLASS_::GetDescription(nsAString & aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetDescription(const nsAString & aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString issued; */
NS_IMETHODIMP _MYCLASS_::GetIssued(nsAString & aIssued)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetIssued(const nsAString & aIssued)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIStringEnumerator tags; */
NS_IMETHODIMP _MYCLASS_::GetTags(nsIStringEnumerator * *aTags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTags(nsIStringEnumerator * aTags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsISimpleEnumerator categories; */
NS_IMETHODIMP _MYCLASS_::GetCategories(nsISimpleEnumerator * *aCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetCategories(nsISimpleEnumerator * aCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIStringEnumerator extra; */
NS_IMETHODIMP _MYCLASS_::GetExtra(nsIStringEnumerator * *aExtra)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetExtra(nsIStringEnumerator * aExtra)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockIBlogPublishListener */
#define FLOCKIBLOGPUBLISHLISTENER_IID_STR "7a3280f6-b57c-4f27-897c-61651b6c0343"

#define FLOCKIBLOGPUBLISHLISTENER_IID \
  {0x7a3280f6, 0xb57c, 0x4f27, \
    { 0x89, 0x7c, 0x61, 0x65, 0x1b, 0x6c, 0x03, 0x43 }}

class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogPublishListener : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGPUBLISHLISTENER_IID)

  /* void onResult (in AString permalink); */
  NS_SCRIPTABLE NS_IMETHOD OnResult(const nsAString & permalink) = 0;

  /* void onFault (in flockIError fault); */
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault) = 0;

  /* void onError (in flockIError error); */
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogPublishListener, FLOCKIBLOGPUBLISHLISTENER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGPUBLISHLISTENER \
  NS_SCRIPTABLE NS_IMETHOD OnResult(const nsAString & permalink); \
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault); \
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGPUBLISHLISTENER(_to) \
  NS_SCRIPTABLE NS_IMETHOD OnResult(const nsAString & permalink) { return _to OnResult(permalink); } \
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault) { return _to OnFault(fault); } \
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error) { return _to OnError(error); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGPUBLISHLISTENER(_to) \
  NS_SCRIPTABLE NS_IMETHOD OnResult(const nsAString & permalink) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnResult(permalink); } \
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnFault(fault); } \
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnError(error); } 

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

/* Header file */
class _MYCLASS_ : public flockIBlogPublishListener
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGPUBLISHLISTENER

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogPublishListener)

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

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

/* void onResult (in AString permalink); */
NS_IMETHODIMP _MYCLASS_::OnResult(const nsAString & permalink)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void onFault (in flockIError fault); */
NS_IMETHODIMP _MYCLASS_::OnFault(flockIError *fault)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void onError (in flockIError error); */
NS_IMETHODIMP _MYCLASS_::OnError(flockIError *error)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockIBlogListener */
#define FLOCKIBLOGLISTENER_IID_STR "1405ac69-d6d0-4fd4-b55a-36ec8274153f"

#define FLOCKIBLOGLISTENER_IID \
  {0x1405ac69, 0xd6d0, 0x4fd4, \
    { 0xb5, 0x5a, 0x36, 0xec, 0x82, 0x74, 0x15, 0x3f }}

class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogListener : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGLISTENER_IID)

  /* void onResult (in nsISimpleEnumerator aSimpleEnum); */
  NS_SCRIPTABLE NS_IMETHOD OnResult(nsISimpleEnumerator *aSimpleEnum) = 0;

  /* void onFault (in flockIError fault); */
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault) = 0;

  /* void onError (in flockIError error); */
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogListener, FLOCKIBLOGLISTENER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGLISTENER \
  NS_SCRIPTABLE NS_IMETHOD OnResult(nsISimpleEnumerator *aSimpleEnum); \
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault); \
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGLISTENER(_to) \
  NS_SCRIPTABLE NS_IMETHOD OnResult(nsISimpleEnumerator *aSimpleEnum) { return _to OnResult(aSimpleEnum); } \
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault) { return _to OnFault(fault); } \
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error) { return _to OnError(error); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGLISTENER(_to) \
  NS_SCRIPTABLE NS_IMETHOD OnResult(nsISimpleEnumerator *aSimpleEnum) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnResult(aSimpleEnum); } \
  NS_SCRIPTABLE NS_IMETHOD OnFault(flockIError *fault) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnFault(fault); } \
  NS_SCRIPTABLE NS_IMETHOD OnError(flockIError *error) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnError(error); } 

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

/* Header file */
class _MYCLASS_ : public flockIBlogListener
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGLISTENER

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogListener)

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

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

/* void onResult (in nsISimpleEnumerator aSimpleEnum); */
NS_IMETHODIMP _MYCLASS_::OnResult(nsISimpleEnumerator *aSimpleEnum)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void onFault (in flockIError fault); */
NS_IMETHODIMP _MYCLASS_::OnFault(flockIError *fault)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void onError (in flockIError error); */
NS_IMETHODIMP _MYCLASS_::OnError(flockIError *error)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockIBlogWebService */
#define FLOCKIBLOGWEBSERVICE_IID_STR "1a95c7f7-b96a-41ed-a009-318ef45add6c"

#define FLOCKIBLOGWEBSERVICE_IID \
  {0x1a95c7f7, 0xb96a, 0x41ed, \
    { 0xa0, 0x09, 0x31, 0x8e, 0xf4, 0x5a, 0xdd, 0x6c }}

/**
 * Represents a web service that supports blogging.
 *
 * @see flockIBlogAccount
 */
class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogWebService : public flockILoginWebService {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGWEBSERVICE_IID)

  enum { CATEGORIES_NO = 0 };

  enum { CATEGORIES_SINGLE = 1 };

  enum { CATEGORIES_MULTIPLE = 2 };

  /* attribute long supportsCategories; */
  NS_SCRIPTABLE NS_IMETHOD GetSupportsCategories(PRInt32 *aSupportsCategories) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetSupportsCategories(PRInt32 aSupportsCategories) = 0;

  /**
   * Tells whether the service supports one category per post, multiple categories
   * or no categories at all
   */
  /* attribute boolean supportsPostReplace; */
  NS_SCRIPTABLE NS_IMETHOD GetSupportsPostReplace(PRBool *aSupportsPostReplace) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetSupportsPostReplace(PRBool aSupportsPostReplace) = 0;

  /**
   * Chrome URL of the XUL file to be overlayed to the blog publishing metadata
   * window, to add service-specific features (privacy, mood...)
   */
  /* attribute AString metadataOverlay; */
  NS_SCRIPTABLE NS_IMETHOD GetMetadataOverlay(nsAString & aMetadataOverlay) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetMetadataOverlay(const nsAString & aMetadataOverlay) = 0;

  /* attribute AString authtoken; */
  NS_SCRIPTABLE NS_IMETHOD GetAuthtoken(nsAString & aAuthtoken) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetAuthtoken(const nsAString & aAuthtoken) = 0;

  /**
   * Call the server to retrieve the list of blog of a user. The list is
   * returned through flockIBlogListener: on success,
   * flockIBlogListener.onSuccess(blogList, null) is called where blogList is a
   * nsISimpleEnumerator of nsIPropertyBag having the following properties:
   *  string title
   *  string blogID
   *  string APILink
   *  string URL
   *
   * @see nsISimpleEnumerator
   */
  /* void getUsersBlogs (in flockIBlogListener aBlogListener, in AString aAPILink, in AString aUsername, in AString aPassword); */
  NS_SCRIPTABLE NS_IMETHOD GetUsersBlogs(flockIBlogListener *aBlogListener, const nsAString & aAPILink, const nsAString & aUsername, const nsAString & aPassword) = 0;

  /**
   * Call the server to retrieve the last published post on a blog
   */
  /* void getRecentPosts (in flockIBlogListener aBlogListener, in AString aBlogId, in PRUint32 aNumber); */
  NS_SCRIPTABLE NS_IMETHOD GetRecentPosts(flockIBlogListener *aBlogListener, const nsAString & aBlogId, PRUint32 aNumber) = 0;

  /* void getCategoryList (in flockIBlogListener aBlogListener, in AString aBlogId); */
  NS_SCRIPTABLE NS_IMETHOD GetCategoryList(flockIBlogListener *aBlogListener, const nsAString & aBlogId) = 0;

  /**
   * Call the server to retrieve the last published post on a blog.
   *
   * @param aPublishListener (in) a listener to respond to successful
   *        publication or error
   * @param aBlogId (in) The blogid (as the server would understand)
   * @param aPost (in) A flockIBlogPost holding the content of the post (title, body...)
   * @param aPublish (in) true to publish directly, false to publish as a draft
   * @param aNotification (in) list of URL to notifify of the new post
   */
  /* void newPost (in flockIBlogPublishListener aPublishListener, in AString aBlogId, in flockIBlogPost aPost, in boolean aPublish, in nsIStringEnumerator aNotifications); */
  NS_SCRIPTABLE NS_IMETHOD NewPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications) = 0;

  /**
   * Call the server to retrieve the last published post on a blog
   *
   * @param aPublishListener (in) a listener to respond to successful
   *        publication or error
   * @param aBlogId (in) The blogid (as the server would understand)
   * @param aPost (in) A flockIBlogPost holding the content of the post (title, body...).
   *                   It should also contain the postid to specify the post to replace
   * @param aPublish (in) true to publish directly, false to publish as a draft
   * @param aNotification (in) list of URL to notifify of the new post
   */
  /* void editPost (in flockIBlogPublishListener aPublishListener, in AString aBlogId, in flockIBlogPost aPost, in boolean aPublish, in nsIStringEnumerator aNotifications); */
  NS_SCRIPTABLE NS_IMETHOD EditPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications) = 0;

  /**
   * For the given post, remove all categories and replace them by a new set
   *
   * @param aPublishListener (in) a listener to respond to successful
   *        publication or error
   * @param aAccount (in) The account info (auth info)
   * @param aPostId (in) The postid (as the server would understand)
   * @param aCategories (in) The new categories to set
   */
  /* void setPostCategories (in flockIBlogPublishListener aPublishListener, in AString aBlogId, in AString aPostId, in nsISimpleEnumerator aCategories); */
  NS_SCRIPTABLE NS_IMETHOD SetPostCategories(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, const nsAString & aPostId, nsISimpleEnumerator *aCategories) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogWebService, FLOCKIBLOGWEBSERVICE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGWEBSERVICE \
  NS_SCRIPTABLE NS_IMETHOD GetSupportsCategories(PRInt32 *aSupportsCategories); \
  NS_SCRIPTABLE NS_IMETHOD SetSupportsCategories(PRInt32 aSupportsCategories); \
  NS_SCRIPTABLE NS_IMETHOD GetSupportsPostReplace(PRBool *aSupportsPostReplace); \
  NS_SCRIPTABLE NS_IMETHOD SetSupportsPostReplace(PRBool aSupportsPostReplace); \
  NS_SCRIPTABLE NS_IMETHOD GetMetadataOverlay(nsAString & aMetadataOverlay); \
  NS_SCRIPTABLE NS_IMETHOD SetMetadataOverlay(const nsAString & aMetadataOverlay); \
  NS_SCRIPTABLE NS_IMETHOD GetAuthtoken(nsAString & aAuthtoken); \
  NS_SCRIPTABLE NS_IMETHOD SetAuthtoken(const nsAString & aAuthtoken); \
  NS_SCRIPTABLE NS_IMETHOD GetUsersBlogs(flockIBlogListener *aBlogListener, const nsAString & aAPILink, const nsAString & aUsername, const nsAString & aPassword); \
  NS_SCRIPTABLE NS_IMETHOD GetRecentPosts(flockIBlogListener *aBlogListener, const nsAString & aBlogId, PRUint32 aNumber); \
  NS_SCRIPTABLE NS_IMETHOD GetCategoryList(flockIBlogListener *aBlogListener, const nsAString & aBlogId); \
  NS_SCRIPTABLE NS_IMETHOD NewPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications); \
  NS_SCRIPTABLE NS_IMETHOD EditPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications); \
  NS_SCRIPTABLE NS_IMETHOD SetPostCategories(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, const nsAString & aPostId, nsISimpleEnumerator *aCategories); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGWEBSERVICE(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetSupportsCategories(PRInt32 *aSupportsCategories) { return _to GetSupportsCategories(aSupportsCategories); } \
  NS_SCRIPTABLE NS_IMETHOD SetSupportsCategories(PRInt32 aSupportsCategories) { return _to SetSupportsCategories(aSupportsCategories); } \
  NS_SCRIPTABLE NS_IMETHOD GetSupportsPostReplace(PRBool *aSupportsPostReplace) { return _to GetSupportsPostReplace(aSupportsPostReplace); } \
  NS_SCRIPTABLE NS_IMETHOD SetSupportsPostReplace(PRBool aSupportsPostReplace) { return _to SetSupportsPostReplace(aSupportsPostReplace); } \
  NS_SCRIPTABLE NS_IMETHOD GetMetadataOverlay(nsAString & aMetadataOverlay) { return _to GetMetadataOverlay(aMetadataOverlay); } \
  NS_SCRIPTABLE NS_IMETHOD SetMetadataOverlay(const nsAString & aMetadataOverlay) { return _to SetMetadataOverlay(aMetadataOverlay); } \
  NS_SCRIPTABLE NS_IMETHOD GetAuthtoken(nsAString & aAuthtoken) { return _to GetAuthtoken(aAuthtoken); } \
  NS_SCRIPTABLE NS_IMETHOD SetAuthtoken(const nsAString & aAuthtoken) { return _to SetAuthtoken(aAuthtoken); } \
  NS_SCRIPTABLE NS_IMETHOD GetUsersBlogs(flockIBlogListener *aBlogListener, const nsAString & aAPILink, const nsAString & aUsername, const nsAString & aPassword) { return _to GetUsersBlogs(aBlogListener, aAPILink, aUsername, aPassword); } \
  NS_SCRIPTABLE NS_IMETHOD GetRecentPosts(flockIBlogListener *aBlogListener, const nsAString & aBlogId, PRUint32 aNumber) { return _to GetRecentPosts(aBlogListener, aBlogId, aNumber); } \
  NS_SCRIPTABLE NS_IMETHOD GetCategoryList(flockIBlogListener *aBlogListener, const nsAString & aBlogId) { return _to GetCategoryList(aBlogListener, aBlogId); } \
  NS_SCRIPTABLE NS_IMETHOD NewPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications) { return _to NewPost(aPublishListener, aBlogId, aPost, aPublish, aNotifications); } \
  NS_SCRIPTABLE NS_IMETHOD EditPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications) { return _to EditPost(aPublishListener, aBlogId, aPost, aPublish, aNotifications); } \
  NS_SCRIPTABLE NS_IMETHOD SetPostCategories(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, const nsAString & aPostId, nsISimpleEnumerator *aCategories) { return _to SetPostCategories(aPublishListener, aBlogId, aPostId, aCategories); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGWEBSERVICE(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetSupportsCategories(PRInt32 *aSupportsCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSupportsCategories(aSupportsCategories); } \
  NS_SCRIPTABLE NS_IMETHOD SetSupportsCategories(PRInt32 aSupportsCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSupportsCategories(aSupportsCategories); } \
  NS_SCRIPTABLE NS_IMETHOD GetSupportsPostReplace(PRBool *aSupportsPostReplace) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSupportsPostReplace(aSupportsPostReplace); } \
  NS_SCRIPTABLE NS_IMETHOD SetSupportsPostReplace(PRBool aSupportsPostReplace) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSupportsPostReplace(aSupportsPostReplace); } \
  NS_SCRIPTABLE NS_IMETHOD GetMetadataOverlay(nsAString & aMetadataOverlay) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMetadataOverlay(aMetadataOverlay); } \
  NS_SCRIPTABLE NS_IMETHOD SetMetadataOverlay(const nsAString & aMetadataOverlay) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMetadataOverlay(aMetadataOverlay); } \
  NS_SCRIPTABLE NS_IMETHOD GetAuthtoken(nsAString & aAuthtoken) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAuthtoken(aAuthtoken); } \
  NS_SCRIPTABLE NS_IMETHOD SetAuthtoken(const nsAString & aAuthtoken) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAuthtoken(aAuthtoken); } \
  NS_SCRIPTABLE NS_IMETHOD GetUsersBlogs(flockIBlogListener *aBlogListener, const nsAString & aAPILink, const nsAString & aUsername, const nsAString & aPassword) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUsersBlogs(aBlogListener, aAPILink, aUsername, aPassword); } \
  NS_SCRIPTABLE NS_IMETHOD GetRecentPosts(flockIBlogListener *aBlogListener, const nsAString & aBlogId, PRUint32 aNumber) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRecentPosts(aBlogListener, aBlogId, aNumber); } \
  NS_SCRIPTABLE NS_IMETHOD GetCategoryList(flockIBlogListener *aBlogListener, const nsAString & aBlogId) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCategoryList(aBlogListener, aBlogId); } \
  NS_SCRIPTABLE NS_IMETHOD NewPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications) { return !_to ? NS_ERROR_NULL_POINTER : _to->NewPost(aPublishListener, aBlogId, aPost, aPublish, aNotifications); } \
  NS_SCRIPTABLE NS_IMETHOD EditPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications) { return !_to ? NS_ERROR_NULL_POINTER : _to->EditPost(aPublishListener, aBlogId, aPost, aPublish, aNotifications); } \
  NS_SCRIPTABLE NS_IMETHOD SetPostCategories(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, const nsAString & aPostId, nsISimpleEnumerator *aCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetPostCategories(aPublishListener, aBlogId, aPostId, aCategories); } 

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

/* Header file */
class _MYCLASS_ : public flockIBlogWebService
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGWEBSERVICE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogWebService)

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

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

/* attribute long supportsCategories; */
NS_IMETHODIMP _MYCLASS_::GetSupportsCategories(PRInt32 *aSupportsCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetSupportsCategories(PRInt32 aSupportsCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean supportsPostReplace; */
NS_IMETHODIMP _MYCLASS_::GetSupportsPostReplace(PRBool *aSupportsPostReplace)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetSupportsPostReplace(PRBool aSupportsPostReplace)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString metadataOverlay; */
NS_IMETHODIMP _MYCLASS_::GetMetadataOverlay(nsAString & aMetadataOverlay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetMetadataOverlay(const nsAString & aMetadataOverlay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString authtoken; */
NS_IMETHODIMP _MYCLASS_::GetAuthtoken(nsAString & aAuthtoken)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetAuthtoken(const nsAString & aAuthtoken)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getUsersBlogs (in flockIBlogListener aBlogListener, in AString aAPILink, in AString aUsername, in AString aPassword); */
NS_IMETHODIMP _MYCLASS_::GetUsersBlogs(flockIBlogListener *aBlogListener, const nsAString & aAPILink, const nsAString & aUsername, const nsAString & aPassword)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getRecentPosts (in flockIBlogListener aBlogListener, in AString aBlogId, in PRUint32 aNumber); */
NS_IMETHODIMP _MYCLASS_::GetRecentPosts(flockIBlogListener *aBlogListener, const nsAString & aBlogId, PRUint32 aNumber)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getCategoryList (in flockIBlogListener aBlogListener, in AString aBlogId); */
NS_IMETHODIMP _MYCLASS_::GetCategoryList(flockIBlogListener *aBlogListener, const nsAString & aBlogId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void newPost (in flockIBlogPublishListener aPublishListener, in AString aBlogId, in flockIBlogPost aPost, in boolean aPublish, in nsIStringEnumerator aNotifications); */
NS_IMETHODIMP _MYCLASS_::NewPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void editPost (in flockIBlogPublishListener aPublishListener, in AString aBlogId, in flockIBlogPost aPost, in boolean aPublish, in nsIStringEnumerator aNotifications); */
NS_IMETHODIMP _MYCLASS_::EditPost(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, flockIBlogPost *aPost, PRBool aPublish, nsIStringEnumerator *aNotifications)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setPostCategories (in flockIBlogPublishListener aPublishListener, in AString aBlogId, in AString aPostId, in nsISimpleEnumerator aCategories); */
NS_IMETHODIMP _MYCLASS_::SetPostCategories(flockIBlogPublishListener *aPublishListener, const nsAString & aBlogId, const nsAString & aPostId, nsISimpleEnumerator *aCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockICustomBlogWebService */
#define FLOCKICUSTOMBLOGWEBSERVICE_IID_STR "c65e850a-579d-4f0c-ac60-5c8ae709e5ec"

#define FLOCKICUSTOMBLOGWEBSERVICE_IID \
  {0xc65e850a, 0x579d, 0x4f0c, \
    { 0xac, 0x60, 0x5c, 0x8a, 0xe7, 0x09, 0xe5, 0xec }}

/**
 * This interface is used for blog API such as ATOM, Metaweblog or MovableType.
 * It adds attributes to register themselves to the blog service (for
 * autodetection) and a detectAccount method to see if the API is supported for
 * a given blog.
 *
 * Some flockIBlogWebService may mirror their calls to an API. For example, the
 * WordPress service (a flockIBlogWebService) is mirroring all its server calls
 * to the MovableType API service (a flockICustomBlogWebService).
 */
class NS_NO_VTABLE NS_SCRIPTABLE flockICustomBlogWebService : public flockIBlogWebService {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKICUSTOMBLOGWEBSERVICE_IID)

  /* attribute AString name; */
  NS_SCRIPTABLE NS_IMETHOD GetName(nsAString & aName) = 0;
  NS_SCRIPTABLE NS_IMETHOD SetName(const nsAString & aName) = 0;

  /**
   * Detect an account in a collection of links
   * @param aUrl (in): the URL of the blog
   * @param aLinkList (in): an enumerator of flockIBlogLink
   * @return a wrapped JS object with the following members:
   *
   * @see flockIBlogLink
   */
  /* nsISupports detectAccount (in AString aUrl, in nsISimpleEnumerator aLinkList); */
  NS_SCRIPTABLE NS_IMETHOD DetectAccount(const nsAString & aUrl, nsISimpleEnumerator *aLinkList, nsISupports **_retval) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockICustomBlogWebService, FLOCKICUSTOMBLOGWEBSERVICE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKICUSTOMBLOGWEBSERVICE \
  NS_SCRIPTABLE NS_IMETHOD GetName(nsAString & aName); \
  NS_SCRIPTABLE NS_IMETHOD SetName(const nsAString & aName); \
  NS_SCRIPTABLE NS_IMETHOD DetectAccount(const nsAString & aUrl, nsISimpleEnumerator *aLinkList, nsISupports **_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKICUSTOMBLOGWEBSERVICE(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetName(nsAString & aName) { return _to GetName(aName); } \
  NS_SCRIPTABLE NS_IMETHOD SetName(const nsAString & aName) { return _to SetName(aName); } \
  NS_SCRIPTABLE NS_IMETHOD DetectAccount(const nsAString & aUrl, nsISimpleEnumerator *aLinkList, nsISupports **_retval) { return _to DetectAccount(aUrl, aLinkList, _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_FLOCKICUSTOMBLOGWEBSERVICE(_to) \
  NS_SCRIPTABLE NS_IMETHOD GetName(nsAString & aName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetName(aName); } \
  NS_SCRIPTABLE NS_IMETHOD SetName(const nsAString & aName) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetName(aName); } \
  NS_SCRIPTABLE NS_IMETHOD DetectAccount(const nsAString & aUrl, nsISimpleEnumerator *aLinkList, nsISupports **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->DetectAccount(aUrl, aLinkList, _retval); } 

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

/* Header file */
class _MYCLASS_ : public flockICustomBlogWebService
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKICUSTOMBLOGWEBSERVICE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockICustomBlogWebService)

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

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

/* attribute AString name; */
NS_IMETHODIMP _MYCLASS_::GetName(nsAString & aName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetName(const nsAString & aName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISupports detectAccount (in AString aUrl, in nsISimpleEnumerator aLinkList); */
NS_IMETHODIMP _MYCLASS_::DetectAccount(const nsAString & aUrl, nsISimpleEnumerator *aLinkList, nsISupports **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    flockIBlogAccount */
#define FLOCKIBLOGACCOUNT_IID_STR "47027282-1234-49a8-8e81-dfcddad69dad"

#define FLOCKIBLOGACCOUNT_IID \
  {0x47027282, 0x1234, 0x49a8, \
    { 0x8e, 0x81, 0xdf, 0xcd, 0xda, 0xd6, 0x9d, 0xad }}

/**
 * Represents an account with a blog web service.
 *
 * More documentation here:
 * http://developer.flock.com/wiki/Accounts_Management
 *
 * @see flockIBlogWebService
 */
class NS_NO_VTABLE NS_SCRIPTABLE flockIBlogAccount : public flockIWebServiceAccount {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(FLOCKIBLOGACCOUNT_IID)

};

  NS_DEFINE_STATIC_IID_ACCESSOR(flockIBlogAccount, FLOCKIBLOGACCOUNT_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_FLOCKIBLOGACCOUNT \
  /* no methods! */

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_FLOCKIBLOGACCOUNT(_to) \
  /* no methods! */

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_FLOCKIBLOGACCOUNT(_to) \
  /* no methods! */

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

/* Header file */
class _MYCLASS_ : public flockIBlogAccount
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_FLOCKIBLOGACCOUNT

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, flockIBlogAccount)

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

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

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


#endif /* __gen_flockIBlogWebService_h__ */
