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

#ifndef __gen_calIICSService_h__
#define __gen_calIICSService_h__


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

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

class calIDateTime; /* forward declaration */

class calIIcalProperty; /* forward declaration */

class nsIUTF8StringEnumerator; /* forward declaration */


/* starting interface:    calIIcalComponent */
#define CALIICALCOMPONENT_IID_STR "c4637c40-3c4c-4ecd-b802-8b5b46bdf5a4"

#define CALIICALCOMPONENT_IID \
  {0xc4637c40, 0x3c4c, 0x4ecd, \
    { 0xb8, 0x02, 0x8b, 0x5b, 0x46, 0xbd, 0xf5, 0xa4 }}

/**
 * General notes:
 *
 * As with libical, use of getNextFoo(footype) is only valid if there have been
 * no intervening getNextFoo(otherfootype)s, or removeFoo()s, or addFoo()s. In
 * general, you want to do as little manipulation of your FooContainers as
 * possible while iterating over them.
 */
class NS_NO_VTABLE calIIcalComponent : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALIICALCOMPONENT_IID)

  /**
     * This is the value that an integer-valued getter will provide if
     * there is no such property on the wrapped ical structure.
     */
  enum { INVALID_VALUE = -1 };

  /**
     * @param kind ANY, XROOT, VCALENDAR, VEVENT, etc.
     */
  /* calIIcalComponent getFirstSubcomponent (in AUTF8String componentType); */
  NS_IMETHOD GetFirstSubcomponent(const nsACString & componentType, calIIcalComponent **_retval) = 0;

  /* calIIcalComponent getNextSubcomponent (in AUTF8String componentType); */
  NS_IMETHOD GetNextSubcomponent(const nsACString & componentType, calIIcalComponent **_retval) = 0;

  /* readonly attribute AUTF8String componentType; */
  NS_IMETHOD GetComponentType(nsACString & aComponentType) = 0;

  /* attribute AUTF8String uid; */
  NS_IMETHOD GetUid(nsACString & aUid) = 0;
  NS_IMETHOD SetUid(const nsACString & aUid) = 0;

  /* attribute AUTF8String prodid; */
  NS_IMETHOD GetProdid(nsACString & aProdid) = 0;
  NS_IMETHOD SetProdid(const nsACString & aProdid) = 0;

  /* attribute AUTF8String version; */
  NS_IMETHOD GetVersion(nsACString & aVersion) = 0;
  NS_IMETHOD SetVersion(const nsACString & aVersion) = 0;

  /**
     * PUBLISH, REQUEST, REPLY, etc.
     */
  /* attribute AUTF8String method; */
  NS_IMETHOD GetMethod(nsACString & aMethod) = 0;
  NS_IMETHOD SetMethod(const nsACString & aMethod) = 0;

  /**
     * TENTATIVE, CONFIRMED, CANCELLED, etc.
     */
  /* attribute AUTF8String status; */
  NS_IMETHOD GetStatus(nsACString & aStatus) = 0;
  NS_IMETHOD SetStatus(const nsACString & aStatus) = 0;

  /**
     * OPAQUE, TRANSPARENT, etc.
     */
  /* attribute AUTF8String transp; */
  NS_IMETHOD GetTransp(nsACString & aTransp) = 0;
  NS_IMETHOD SetTransp(const nsACString & aTransp) = 0;

  /* attribute AUTF8String summary; */
  NS_IMETHOD GetSummary(nsACString & aSummary) = 0;
  NS_IMETHOD SetSummary(const nsACString & aSummary) = 0;

  /* attribute AUTF8String description; */
  NS_IMETHOD GetDescription(nsACString & aDescription) = 0;
  NS_IMETHOD SetDescription(const nsACString & aDescription) = 0;

  /* attribute AUTF8String location; */
  NS_IMETHOD GetLocation(nsACString & aLocation) = 0;
  NS_IMETHOD SetLocation(const nsACString & aLocation) = 0;

  /* attribute AUTF8String categories; */
  NS_IMETHOD GetCategories(nsACString & aCategories) = 0;
  NS_IMETHOD SetCategories(const nsACString & aCategories) = 0;

  /* attribute AUTF8String URL; */
  NS_IMETHOD GetURL(nsACString & aURL) = 0;
  NS_IMETHOD SetURL(const nsACString & aURL) = 0;

  /* attribute PRInt32 priority; */
  NS_IMETHOD GetPriority(PRInt32 *aPriority) = 0;
  NS_IMETHOD SetPriority(PRInt32 aPriority) = 0;

  /**
     * PUBLIC, PRIVATE, CONFIDENTIAL, etc.
     */
  /* attribute AUTF8String icalClass; */
  NS_IMETHOD GetIcalClass(nsACString & aIcalClass) = 0;
  NS_IMETHOD SetIcalClass(const nsACString & aIcalClass) = 0;

  /* attribute calIDateTime startTime; */
  NS_IMETHOD GetStartTime(calIDateTime * *aStartTime) = 0;
  NS_IMETHOD SetStartTime(calIDateTime * aStartTime) = 0;

  /* attribute calIDateTime endTime; */
  NS_IMETHOD GetEndTime(calIDateTime * *aEndTime) = 0;
  NS_IMETHOD SetEndTime(calIDateTime * aEndTime) = 0;

  /* attribute calIDateTime dueTime; */
  NS_IMETHOD GetDueTime(calIDateTime * *aDueTime) = 0;
  NS_IMETHOD SetDueTime(calIDateTime * aDueTime) = 0;

  /* attribute calIDateTime stampTime; */
  NS_IMETHOD GetStampTime(calIDateTime * *aStampTime) = 0;
  NS_IMETHOD SetStampTime(calIDateTime * aStampTime) = 0;

  /* attribute calIDateTime createdTime; */
  NS_IMETHOD GetCreatedTime(calIDateTime * *aCreatedTime) = 0;
  NS_IMETHOD SetCreatedTime(calIDateTime * aCreatedTime) = 0;

  /* attribute calIDateTime completedTime; */
  NS_IMETHOD GetCompletedTime(calIDateTime * *aCompletedTime) = 0;
  NS_IMETHOD SetCompletedTime(calIDateTime * aCompletedTime) = 0;

  /* attribute calIDateTime lastModified; */
  NS_IMETHOD GetLastModified(calIDateTime * *aLastModified) = 0;
  NS_IMETHOD SetLastModified(calIDateTime * aLastModified) = 0;

  /* AUTF8String serializeToICS (); */
  NS_IMETHOD SerializeToICS(nsACString & _retval) = 0;

  /* void addSubcomponent (in calIIcalComponent comp); */
  NS_IMETHOD AddSubcomponent(calIIcalComponent *comp) = 0;

  /* void removeSubcomponent (in calIIcalComponent comp); */
  NS_IMETHOD RemoveSubcomponent(calIIcalComponent *comp) = 0;

  /**
     * @param kind ANY, ATTENDEE, X-WHATEVER, etc.
     */
  /* calIIcalProperty getFirstProperty (in AUTF8String kind); */
  NS_IMETHOD GetFirstProperty(const nsACString & kind, calIIcalProperty **_retval) = 0;

  /* calIIcalProperty getNextProperty (in AUTF8String kind); */
  NS_IMETHOD GetNextProperty(const nsACString & kind, calIIcalProperty **_retval) = 0;

  /* void addProperty (in calIIcalProperty prop); */
  NS_IMETHOD AddProperty(calIIcalProperty *prop) = 0;

  /* void removeProperty (in calIIcalProperty prop); */
  NS_IMETHOD RemoveProperty(calIIcalProperty *prop) = 0;

  /**
     * Timezones need special handling, as they must be
     * emitted as children of VCALENDAR, but can be referenced by
     * any sub component.  The components this expects to receive
     * are VCALENDAR components with a single VTIMEZONE child.
     * Adding the same TZID twice will cause the second and later
     * adds to be ignored.  Appropriate calIIcalComponents can
     * be obtained via the calIICSService.
     */
  /* void addTimezoneReference (in calIIcalComponent aTimezone); */
  NS_IMETHOD AddTimezoneReference(calIIcalComponent *aTimezone) = 0;

  /**
     * Returns an array of VCALENDAR components, each with a single
     * VTIMEZONE.  These are the timezones that are in use by this
     * component and its children.  Child timezones are only added
     * at addSubcomponent time.
     */
  /* void getReferencedTimezones (out PRUint32 aCount, [array, size_is (aCount), retval] out calIIcalComponent aTimezones); */
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calIIcalComponent ***aTimezones) = 0;

  /* [noscript, notxpcom] icalcomponentptr getIcalComponent (); */
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIICALCOMPONENT \
  NS_IMETHOD GetFirstSubcomponent(const nsACString & componentType, calIIcalComponent **_retval); \
  NS_IMETHOD GetNextSubcomponent(const nsACString & componentType, calIIcalComponent **_retval); \
  NS_IMETHOD GetComponentType(nsACString & aComponentType); \
  NS_IMETHOD GetUid(nsACString & aUid); \
  NS_IMETHOD SetUid(const nsACString & aUid); \
  NS_IMETHOD GetProdid(nsACString & aProdid); \
  NS_IMETHOD SetProdid(const nsACString & aProdid); \
  NS_IMETHOD GetVersion(nsACString & aVersion); \
  NS_IMETHOD SetVersion(const nsACString & aVersion); \
  NS_IMETHOD GetMethod(nsACString & aMethod); \
  NS_IMETHOD SetMethod(const nsACString & aMethod); \
  NS_IMETHOD GetStatus(nsACString & aStatus); \
  NS_IMETHOD SetStatus(const nsACString & aStatus); \
  NS_IMETHOD GetTransp(nsACString & aTransp); \
  NS_IMETHOD SetTransp(const nsACString & aTransp); \
  NS_IMETHOD GetSummary(nsACString & aSummary); \
  NS_IMETHOD SetSummary(const nsACString & aSummary); \
  NS_IMETHOD GetDescription(nsACString & aDescription); \
  NS_IMETHOD SetDescription(const nsACString & aDescription); \
  NS_IMETHOD GetLocation(nsACString & aLocation); \
  NS_IMETHOD SetLocation(const nsACString & aLocation); \
  NS_IMETHOD GetCategories(nsACString & aCategories); \
  NS_IMETHOD SetCategories(const nsACString & aCategories); \
  NS_IMETHOD GetURL(nsACString & aURL); \
  NS_IMETHOD SetURL(const nsACString & aURL); \
  NS_IMETHOD GetPriority(PRInt32 *aPriority); \
  NS_IMETHOD SetPriority(PRInt32 aPriority); \
  NS_IMETHOD GetIcalClass(nsACString & aIcalClass); \
  NS_IMETHOD SetIcalClass(const nsACString & aIcalClass); \
  NS_IMETHOD GetStartTime(calIDateTime * *aStartTime); \
  NS_IMETHOD SetStartTime(calIDateTime * aStartTime); \
  NS_IMETHOD GetEndTime(calIDateTime * *aEndTime); \
  NS_IMETHOD SetEndTime(calIDateTime * aEndTime); \
  NS_IMETHOD GetDueTime(calIDateTime * *aDueTime); \
  NS_IMETHOD SetDueTime(calIDateTime * aDueTime); \
  NS_IMETHOD GetStampTime(calIDateTime * *aStampTime); \
  NS_IMETHOD SetStampTime(calIDateTime * aStampTime); \
  NS_IMETHOD GetCreatedTime(calIDateTime * *aCreatedTime); \
  NS_IMETHOD SetCreatedTime(calIDateTime * aCreatedTime); \
  NS_IMETHOD GetCompletedTime(calIDateTime * *aCompletedTime); \
  NS_IMETHOD SetCompletedTime(calIDateTime * aCompletedTime); \
  NS_IMETHOD GetLastModified(calIDateTime * *aLastModified); \
  NS_IMETHOD SetLastModified(calIDateTime * aLastModified); \
  NS_IMETHOD SerializeToICS(nsACString & _retval); \
  NS_IMETHOD AddSubcomponent(calIIcalComponent *comp); \
  NS_IMETHOD RemoveSubcomponent(calIIcalComponent *comp); \
  NS_IMETHOD GetFirstProperty(const nsACString & kind, calIIcalProperty **_retval); \
  NS_IMETHOD GetNextProperty(const nsACString & kind, calIIcalProperty **_retval); \
  NS_IMETHOD AddProperty(calIIcalProperty *prop); \
  NS_IMETHOD RemoveProperty(calIIcalProperty *prop); \
  NS_IMETHOD AddTimezoneReference(calIIcalComponent *aTimezone); \
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calIIcalComponent ***aTimezones); \
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALIICALCOMPONENT(_to) \
  NS_IMETHOD GetFirstSubcomponent(const nsACString & componentType, calIIcalComponent **_retval) { return _to GetFirstSubcomponent(componentType, _retval); } \
  NS_IMETHOD GetNextSubcomponent(const nsACString & componentType, calIIcalComponent **_retval) { return _to GetNextSubcomponent(componentType, _retval); } \
  NS_IMETHOD GetComponentType(nsACString & aComponentType) { return _to GetComponentType(aComponentType); } \
  NS_IMETHOD GetUid(nsACString & aUid) { return _to GetUid(aUid); } \
  NS_IMETHOD SetUid(const nsACString & aUid) { return _to SetUid(aUid); } \
  NS_IMETHOD GetProdid(nsACString & aProdid) { return _to GetProdid(aProdid); } \
  NS_IMETHOD SetProdid(const nsACString & aProdid) { return _to SetProdid(aProdid); } \
  NS_IMETHOD GetVersion(nsACString & aVersion) { return _to GetVersion(aVersion); } \
  NS_IMETHOD SetVersion(const nsACString & aVersion) { return _to SetVersion(aVersion); } \
  NS_IMETHOD GetMethod(nsACString & aMethod) { return _to GetMethod(aMethod); } \
  NS_IMETHOD SetMethod(const nsACString & aMethod) { return _to SetMethod(aMethod); } \
  NS_IMETHOD GetStatus(nsACString & aStatus) { return _to GetStatus(aStatus); } \
  NS_IMETHOD SetStatus(const nsACString & aStatus) { return _to SetStatus(aStatus); } \
  NS_IMETHOD GetTransp(nsACString & aTransp) { return _to GetTransp(aTransp); } \
  NS_IMETHOD SetTransp(const nsACString & aTransp) { return _to SetTransp(aTransp); } \
  NS_IMETHOD GetSummary(nsACString & aSummary) { return _to GetSummary(aSummary); } \
  NS_IMETHOD SetSummary(const nsACString & aSummary) { return _to SetSummary(aSummary); } \
  NS_IMETHOD GetDescription(nsACString & aDescription) { return _to GetDescription(aDescription); } \
  NS_IMETHOD SetDescription(const nsACString & aDescription) { return _to SetDescription(aDescription); } \
  NS_IMETHOD GetLocation(nsACString & aLocation) { return _to GetLocation(aLocation); } \
  NS_IMETHOD SetLocation(const nsACString & aLocation) { return _to SetLocation(aLocation); } \
  NS_IMETHOD GetCategories(nsACString & aCategories) { return _to GetCategories(aCategories); } \
  NS_IMETHOD SetCategories(const nsACString & aCategories) { return _to SetCategories(aCategories); } \
  NS_IMETHOD GetURL(nsACString & aURL) { return _to GetURL(aURL); } \
  NS_IMETHOD SetURL(const nsACString & aURL) { return _to SetURL(aURL); } \
  NS_IMETHOD GetPriority(PRInt32 *aPriority) { return _to GetPriority(aPriority); } \
  NS_IMETHOD SetPriority(PRInt32 aPriority) { return _to SetPriority(aPriority); } \
  NS_IMETHOD GetIcalClass(nsACString & aIcalClass) { return _to GetIcalClass(aIcalClass); } \
  NS_IMETHOD SetIcalClass(const nsACString & aIcalClass) { return _to SetIcalClass(aIcalClass); } \
  NS_IMETHOD GetStartTime(calIDateTime * *aStartTime) { return _to GetStartTime(aStartTime); } \
  NS_IMETHOD SetStartTime(calIDateTime * aStartTime) { return _to SetStartTime(aStartTime); } \
  NS_IMETHOD GetEndTime(calIDateTime * *aEndTime) { return _to GetEndTime(aEndTime); } \
  NS_IMETHOD SetEndTime(calIDateTime * aEndTime) { return _to SetEndTime(aEndTime); } \
  NS_IMETHOD GetDueTime(calIDateTime * *aDueTime) { return _to GetDueTime(aDueTime); } \
  NS_IMETHOD SetDueTime(calIDateTime * aDueTime) { return _to SetDueTime(aDueTime); } \
  NS_IMETHOD GetStampTime(calIDateTime * *aStampTime) { return _to GetStampTime(aStampTime); } \
  NS_IMETHOD SetStampTime(calIDateTime * aStampTime) { return _to SetStampTime(aStampTime); } \
  NS_IMETHOD GetCreatedTime(calIDateTime * *aCreatedTime) { return _to GetCreatedTime(aCreatedTime); } \
  NS_IMETHOD SetCreatedTime(calIDateTime * aCreatedTime) { return _to SetCreatedTime(aCreatedTime); } \
  NS_IMETHOD GetCompletedTime(calIDateTime * *aCompletedTime) { return _to GetCompletedTime(aCompletedTime); } \
  NS_IMETHOD SetCompletedTime(calIDateTime * aCompletedTime) { return _to SetCompletedTime(aCompletedTime); } \
  NS_IMETHOD GetLastModified(calIDateTime * *aLastModified) { return _to GetLastModified(aLastModified); } \
  NS_IMETHOD SetLastModified(calIDateTime * aLastModified) { return _to SetLastModified(aLastModified); } \
  NS_IMETHOD SerializeToICS(nsACString & _retval) { return _to SerializeToICS(_retval); } \
  NS_IMETHOD AddSubcomponent(calIIcalComponent *comp) { return _to AddSubcomponent(comp); } \
  NS_IMETHOD RemoveSubcomponent(calIIcalComponent *comp) { return _to RemoveSubcomponent(comp); } \
  NS_IMETHOD GetFirstProperty(const nsACString & kind, calIIcalProperty **_retval) { return _to GetFirstProperty(kind, _retval); } \
  NS_IMETHOD GetNextProperty(const nsACString & kind, calIIcalProperty **_retval) { return _to GetNextProperty(kind, _retval); } \
  NS_IMETHOD AddProperty(calIIcalProperty *prop) { return _to AddProperty(prop); } \
  NS_IMETHOD RemoveProperty(calIIcalProperty *prop) { return _to RemoveProperty(prop); } \
  NS_IMETHOD AddTimezoneReference(calIIcalComponent *aTimezone) { return _to AddTimezoneReference(aTimezone); } \
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calIIcalComponent ***aTimezones) { return _to GetReferencedTimezones(aCount, aTimezones); } \
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void) { return _to GetIcalComponent(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_CALIICALCOMPONENT(_to) \
  NS_IMETHOD GetFirstSubcomponent(const nsACString & componentType, calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstSubcomponent(componentType, _retval); } \
  NS_IMETHOD GetNextSubcomponent(const nsACString & componentType, calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextSubcomponent(componentType, _retval); } \
  NS_IMETHOD GetComponentType(nsACString & aComponentType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetComponentType(aComponentType); } \
  NS_IMETHOD GetUid(nsACString & aUid) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUid(aUid); } \
  NS_IMETHOD SetUid(const nsACString & aUid) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetUid(aUid); } \
  NS_IMETHOD GetProdid(nsACString & aProdid) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetProdid(aProdid); } \
  NS_IMETHOD SetProdid(const nsACString & aProdid) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetProdid(aProdid); } \
  NS_IMETHOD GetVersion(nsACString & aVersion) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetVersion(aVersion); } \
  NS_IMETHOD SetVersion(const nsACString & aVersion) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetVersion(aVersion); } \
  NS_IMETHOD GetMethod(nsACString & aMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMethod(aMethod); } \
  NS_IMETHOD SetMethod(const nsACString & aMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetMethod(aMethod); } \
  NS_IMETHOD GetStatus(nsACString & aStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStatus(aStatus); } \
  NS_IMETHOD SetStatus(const nsACString & aStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStatus(aStatus); } \
  NS_IMETHOD GetTransp(nsACString & aTransp) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTransp(aTransp); } \
  NS_IMETHOD SetTransp(const nsACString & aTransp) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTransp(aTransp); } \
  NS_IMETHOD GetSummary(nsACString & aSummary) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSummary(aSummary); } \
  NS_IMETHOD SetSummary(const nsACString & aSummary) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSummary(aSummary); } \
  NS_IMETHOD GetDescription(nsACString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDescription(aDescription); } \
  NS_IMETHOD SetDescription(const nsACString & aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDescription(aDescription); } \
  NS_IMETHOD GetLocation(nsACString & aLocation) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLocation(aLocation); } \
  NS_IMETHOD SetLocation(const nsACString & aLocation) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetLocation(aLocation); } \
  NS_IMETHOD GetCategories(nsACString & aCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCategories(aCategories); } \
  NS_IMETHOD SetCategories(const nsACString & aCategories) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCategories(aCategories); } \
  NS_IMETHOD GetURL(nsACString & aURL) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURL(aURL); } \
  NS_IMETHOD SetURL(const nsACString & aURL) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetURL(aURL); } \
  NS_IMETHOD GetPriority(PRInt32 *aPriority) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPriority(aPriority); } \
  NS_IMETHOD SetPriority(PRInt32 aPriority) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetPriority(aPriority); } \
  NS_IMETHOD GetIcalClass(nsACString & aIcalClass) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIcalClass(aIcalClass); } \
  NS_IMETHOD SetIcalClass(const nsACString & aIcalClass) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetIcalClass(aIcalClass); } \
  NS_IMETHOD GetStartTime(calIDateTime * *aStartTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStartTime(aStartTime); } \
  NS_IMETHOD SetStartTime(calIDateTime * aStartTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStartTime(aStartTime); } \
  NS_IMETHOD GetEndTime(calIDateTime * *aEndTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEndTime(aEndTime); } \
  NS_IMETHOD SetEndTime(calIDateTime * aEndTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetEndTime(aEndTime); } \
  NS_IMETHOD GetDueTime(calIDateTime * *aDueTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDueTime(aDueTime); } \
  NS_IMETHOD SetDueTime(calIDateTime * aDueTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDueTime(aDueTime); } \
  NS_IMETHOD GetStampTime(calIDateTime * *aStampTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStampTime(aStampTime); } \
  NS_IMETHOD SetStampTime(calIDateTime * aStampTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStampTime(aStampTime); } \
  NS_IMETHOD GetCreatedTime(calIDateTime * *aCreatedTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCreatedTime(aCreatedTime); } \
  NS_IMETHOD SetCreatedTime(calIDateTime * aCreatedTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCreatedTime(aCreatedTime); } \
  NS_IMETHOD GetCompletedTime(calIDateTime * *aCompletedTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCompletedTime(aCompletedTime); } \
  NS_IMETHOD SetCompletedTime(calIDateTime * aCompletedTime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCompletedTime(aCompletedTime); } \
  NS_IMETHOD GetLastModified(calIDateTime * *aLastModified) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLastModified(aLastModified); } \
  NS_IMETHOD SetLastModified(calIDateTime * aLastModified) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetLastModified(aLastModified); } \
  NS_IMETHOD SerializeToICS(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->SerializeToICS(_retval); } \
  NS_IMETHOD AddSubcomponent(calIIcalComponent *comp) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddSubcomponent(comp); } \
  NS_IMETHOD RemoveSubcomponent(calIIcalComponent *comp) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveSubcomponent(comp); } \
  NS_IMETHOD GetFirstProperty(const nsACString & kind, calIIcalProperty **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstProperty(kind, _retval); } \
  NS_IMETHOD GetNextProperty(const nsACString & kind, calIIcalProperty **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextProperty(kind, _retval); } \
  NS_IMETHOD AddProperty(calIIcalProperty *prop) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddProperty(prop); } \
  NS_IMETHOD RemoveProperty(calIIcalProperty *prop) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveProperty(prop); } \
  NS_IMETHOD AddTimezoneReference(calIIcalComponent *aTimezone) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddTimezoneReference(aTimezone); } \
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calIIcalComponent ***aTimezones) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetReferencedTimezones(aCount, aTimezones); } \
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIcalComponent(); } 

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

/* Header file */
class _MYCLASS_ : public calIIcalComponent
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALIICALCOMPONENT

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

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

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

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

/* calIIcalComponent getFirstSubcomponent (in AUTF8String componentType); */
NS_IMETHODIMP _MYCLASS_::GetFirstSubcomponent(const nsACString & componentType, calIIcalComponent **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIIcalComponent getNextSubcomponent (in AUTF8String componentType); */
NS_IMETHODIMP _MYCLASS_::GetNextSubcomponent(const nsACString & componentType, calIIcalComponent **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute AUTF8String componentType; */
NS_IMETHODIMP _MYCLASS_::GetComponentType(nsACString & aComponentType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String uid; */
NS_IMETHODIMP _MYCLASS_::GetUid(nsACString & aUid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetUid(const nsACString & aUid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String prodid; */
NS_IMETHODIMP _MYCLASS_::GetProdid(nsACString & aProdid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetProdid(const nsACString & aProdid)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String version; */
NS_IMETHODIMP _MYCLASS_::GetVersion(nsACString & aVersion)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetVersion(const nsACString & aVersion)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String method; */
NS_IMETHODIMP _MYCLASS_::GetMethod(nsACString & aMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetMethod(const nsACString & aMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String status; */
NS_IMETHODIMP _MYCLASS_::GetStatus(nsACString & aStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetStatus(const nsACString & aStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String transp; */
NS_IMETHODIMP _MYCLASS_::GetTransp(nsACString & aTransp)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTransp(const nsACString & aTransp)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String summary; */
NS_IMETHODIMP _MYCLASS_::GetSummary(nsACString & aSummary)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetSummary(const nsACString & aSummary)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

/* attribute AUTF8String location; */
NS_IMETHODIMP _MYCLASS_::GetLocation(nsACString & aLocation)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetLocation(const nsACString & aLocation)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String categories; */
NS_IMETHODIMP _MYCLASS_::GetCategories(nsACString & aCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetCategories(const nsACString & aCategories)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String URL; */
NS_IMETHODIMP _MYCLASS_::GetURL(nsACString & aURL)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetURL(const nsACString & aURL)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute PRInt32 priority; */
NS_IMETHODIMP _MYCLASS_::GetPriority(PRInt32 *aPriority)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetPriority(PRInt32 aPriority)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String icalClass; */
NS_IMETHODIMP _MYCLASS_::GetIcalClass(nsACString & aIcalClass)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetIcalClass(const nsACString & aIcalClass)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime startTime; */
NS_IMETHODIMP _MYCLASS_::GetStartTime(calIDateTime * *aStartTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetStartTime(calIDateTime * aStartTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime endTime; */
NS_IMETHODIMP _MYCLASS_::GetEndTime(calIDateTime * *aEndTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetEndTime(calIDateTime * aEndTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime dueTime; */
NS_IMETHODIMP _MYCLASS_::GetDueTime(calIDateTime * *aDueTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetDueTime(calIDateTime * aDueTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime stampTime; */
NS_IMETHODIMP _MYCLASS_::GetStampTime(calIDateTime * *aStampTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetStampTime(calIDateTime * aStampTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime createdTime; */
NS_IMETHODIMP _MYCLASS_::GetCreatedTime(calIDateTime * *aCreatedTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetCreatedTime(calIDateTime * aCreatedTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime completedTime; */
NS_IMETHODIMP _MYCLASS_::GetCompletedTime(calIDateTime * *aCompletedTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetCompletedTime(calIDateTime * aCompletedTime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime lastModified; */
NS_IMETHODIMP _MYCLASS_::GetLastModified(calIDateTime * *aLastModified)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetLastModified(calIDateTime * aLastModified)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AUTF8String serializeToICS (); */
NS_IMETHODIMP _MYCLASS_::SerializeToICS(nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addSubcomponent (in calIIcalComponent comp); */
NS_IMETHODIMP _MYCLASS_::AddSubcomponent(calIIcalComponent *comp)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeSubcomponent (in calIIcalComponent comp); */
NS_IMETHODIMP _MYCLASS_::RemoveSubcomponent(calIIcalComponent *comp)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIIcalProperty getFirstProperty (in AUTF8String kind); */
NS_IMETHODIMP _MYCLASS_::GetFirstProperty(const nsACString & kind, calIIcalProperty **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIIcalProperty getNextProperty (in AUTF8String kind); */
NS_IMETHODIMP _MYCLASS_::GetNextProperty(const nsACString & kind, calIIcalProperty **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addProperty (in calIIcalProperty prop); */
NS_IMETHODIMP _MYCLASS_::AddProperty(calIIcalProperty *prop)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeProperty (in calIIcalProperty prop); */
NS_IMETHODIMP _MYCLASS_::RemoveProperty(calIIcalProperty *prop)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addTimezoneReference (in calIIcalComponent aTimezone); */
NS_IMETHODIMP _MYCLASS_::AddTimezoneReference(calIIcalComponent *aTimezone)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getReferencedTimezones (out PRUint32 aCount, [array, size_is (aCount), retval] out calIIcalComponent aTimezones); */
NS_IMETHODIMP _MYCLASS_::GetReferencedTimezones(PRUint32 *aCount, calIIcalComponent ***aTimezones)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript, notxpcom] icalcomponentptr getIcalComponent (); */
NS_IMETHODIMP_(struct icalcomponent_impl *) _MYCLASS_::GetIcalComponent()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    calIIcalProperty */
#define CALIICALPROPERTY_IID_STR "17349a10-5d80-47fa-9bea-f22957357675"

#define CALIICALPROPERTY_IID \
  {0x17349a10, 0x5d80, 0x47fa, \
    { 0x9b, 0xea, 0xf2, 0x29, 0x57, 0x35, 0x76, 0x75 }}

class NS_NO_VTABLE calIIcalProperty : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALIICALPROPERTY_IID)

  /* attribute AUTF8String stringValue; */
  NS_IMETHOD GetStringValue(nsACString & aStringValue) = 0;
  NS_IMETHOD SetStringValue(const nsACString & aStringValue) = 0;

  /* readonly attribute AUTF8String propertyName; */
  NS_IMETHOD GetPropertyName(nsACString & aPropertyName) = 0;

  /* AUTF8String getParameter (in AUTF8String paramname); */
  NS_IMETHOD GetParameter(const nsACString & paramname, nsACString & _retval) = 0;

  /* void setParameter (in AUTF8String paramname, in AUTF8String paramval); */
  NS_IMETHOD SetParameter(const nsACString & paramname, const nsACString & paramval) = 0;

  /* AUTF8String getFirstParameterName (); */
  NS_IMETHOD GetFirstParameterName(nsACString & _retval) = 0;

  /* AUTF8String getNextParameterName (); */
  NS_IMETHOD GetNextParameterName(nsACString & _retval) = 0;

  /**
     * This does not work with X-PARAMETERS, due to limitations in libical.
     * You have to use clearXParameters() and then rebuild the ones you wanted
     * to preserve.  Sorry about that.
     */
  /* void removeParameter (in AUTF8String paramname); */
  NS_IMETHOD RemoveParameter(const nsACString & paramname) = 0;

  /* void clearXParameters (); */
  NS_IMETHOD ClearXParameters(void) = 0;

  /* [noscript, notxpcom] icalpropertyptr getIcalProperty (); */
  NS_IMETHOD_(struct icalproperty_impl *) GetIcalProperty(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIICALPROPERTY \
  NS_IMETHOD GetStringValue(nsACString & aStringValue); \
  NS_IMETHOD SetStringValue(const nsACString & aStringValue); \
  NS_IMETHOD GetPropertyName(nsACString & aPropertyName); \
  NS_IMETHOD GetParameter(const nsACString & paramname, nsACString & _retval); \
  NS_IMETHOD SetParameter(const nsACString & paramname, const nsACString & paramval); \
  NS_IMETHOD GetFirstParameterName(nsACString & _retval); \
  NS_IMETHOD GetNextParameterName(nsACString & _retval); \
  NS_IMETHOD RemoveParameter(const nsACString & paramname); \
  NS_IMETHOD ClearXParameters(void); \
  NS_IMETHOD_(struct icalproperty_impl *) GetIcalProperty(void); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALIICALPROPERTY(_to) \
  NS_IMETHOD GetStringValue(nsACString & aStringValue) { return _to GetStringValue(aStringValue); } \
  NS_IMETHOD SetStringValue(const nsACString & aStringValue) { return _to SetStringValue(aStringValue); } \
  NS_IMETHOD GetPropertyName(nsACString & aPropertyName) { return _to GetPropertyName(aPropertyName); } \
  NS_IMETHOD GetParameter(const nsACString & paramname, nsACString & _retval) { return _to GetParameter(paramname, _retval); } \
  NS_IMETHOD SetParameter(const nsACString & paramname, const nsACString & paramval) { return _to SetParameter(paramname, paramval); } \
  NS_IMETHOD GetFirstParameterName(nsACString & _retval) { return _to GetFirstParameterName(_retval); } \
  NS_IMETHOD GetNextParameterName(nsACString & _retval) { return _to GetNextParameterName(_retval); } \
  NS_IMETHOD RemoveParameter(const nsACString & paramname) { return _to RemoveParameter(paramname); } \
  NS_IMETHOD ClearXParameters(void) { return _to ClearXParameters(); } \
  NS_IMETHOD_(struct icalproperty_impl *) GetIcalProperty(void) { return _to GetIcalProperty(); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_CALIICALPROPERTY(_to) \
  NS_IMETHOD GetStringValue(nsACString & aStringValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStringValue(aStringValue); } \
  NS_IMETHOD SetStringValue(const nsACString & aStringValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetStringValue(aStringValue); } \
  NS_IMETHOD GetPropertyName(nsACString & aPropertyName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetPropertyName(aPropertyName); } \
  NS_IMETHOD GetParameter(const nsACString & paramname, nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetParameter(paramname, _retval); } \
  NS_IMETHOD SetParameter(const nsACString & paramname, const nsACString & paramval) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetParameter(paramname, paramval); } \
  NS_IMETHOD GetFirstParameterName(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstParameterName(_retval); } \
  NS_IMETHOD GetNextParameterName(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextParameterName(_retval); } \
  NS_IMETHOD RemoveParameter(const nsACString & paramname) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveParameter(paramname); } \
  NS_IMETHOD ClearXParameters(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ClearXParameters(); } \
  NS_IMETHOD_(struct icalproperty_impl *) GetIcalProperty(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIcalProperty(); } 

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

/* Header file */
class _MYCLASS_ : public calIIcalProperty
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALIICALPROPERTY

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

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

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

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

/* attribute AUTF8String stringValue; */
NS_IMETHODIMP _MYCLASS_::GetStringValue(nsACString & aStringValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetStringValue(const nsACString & aStringValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute AUTF8String propertyName; */
NS_IMETHODIMP _MYCLASS_::GetPropertyName(nsACString & aPropertyName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AUTF8String getParameter (in AUTF8String paramname); */
NS_IMETHODIMP _MYCLASS_::GetParameter(const nsACString & paramname, nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setParameter (in AUTF8String paramname, in AUTF8String paramval); */
NS_IMETHODIMP _MYCLASS_::SetParameter(const nsACString & paramname, const nsACString & paramval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AUTF8String getFirstParameterName (); */
NS_IMETHODIMP _MYCLASS_::GetFirstParameterName(nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AUTF8String getNextParameterName (); */
NS_IMETHODIMP _MYCLASS_::GetNextParameterName(nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeParameter (in AUTF8String paramname); */
NS_IMETHODIMP _MYCLASS_::RemoveParameter(const nsACString & paramname)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void clearXParameters (); */
NS_IMETHODIMP _MYCLASS_::ClearXParameters()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [noscript, notxpcom] icalpropertyptr getIcalProperty (); */
NS_IMETHODIMP_(struct icalproperty_impl *) _MYCLASS_::GetIcalProperty()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


/* starting interface:    calIICSService */
#define CALIICSSERVICE_IID_STR "c788a1dc-0929-4029-9a14-e1bc654eafad"

#define CALIICSSERVICE_IID \
  {0xc788a1dc, 0x0929, 0x4029, \
    { 0x9a, 0x14, 0xe1, 0xbc, 0x65, 0x4e, 0xaf, 0xad }}

class NS_NO_VTABLE calIICSService : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALIICSSERVICE_IID)

  /* calIIcalComponent parseICS (in AUTF8String serialized); */
  NS_IMETHOD ParseICS(const nsACString & serialized, calIIcalComponent **_retval) = 0;

  /* calIIcalComponent createIcalComponent (in AUTF8String kind); */
  NS_IMETHOD CreateIcalComponent(const nsACString & kind, calIIcalComponent **_retval) = 0;

  /* calIIcalProperty createIcalProperty (in AUTF8String kind); */
  NS_IMETHOD CreateIcalProperty(const nsACString & kind, calIIcalProperty **_retval) = 0;

  /* calIIcalComponent getTimezone (in AUTF8String tzid); */
  NS_IMETHOD GetTimezone(const nsACString & tzid, calIIcalComponent **_retval) = 0;

  /* AUTF8String getTimezoneLatitude (in AUTF8String tzid); */
  NS_IMETHOD GetTimezoneLatitude(const nsACString & tzid, nsACString & _retval) = 0;

  /* AUTF8String getTimezoneLongitude (in AUTF8String tzid); */
  NS_IMETHOD GetTimezoneLongitude(const nsACString & tzid, nsACString & _retval) = 0;

  /* readonly attribute nsIUTF8StringEnumerator timezoneIds; */
  NS_IMETHOD GetTimezoneIds(nsIUTF8StringEnumerator * *aTimezoneIds) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIICSSERVICE \
  NS_IMETHOD ParseICS(const nsACString & serialized, calIIcalComponent **_retval); \
  NS_IMETHOD CreateIcalComponent(const nsACString & kind, calIIcalComponent **_retval); \
  NS_IMETHOD CreateIcalProperty(const nsACString & kind, calIIcalProperty **_retval); \
  NS_IMETHOD GetTimezone(const nsACString & tzid, calIIcalComponent **_retval); \
  NS_IMETHOD GetTimezoneLatitude(const nsACString & tzid, nsACString & _retval); \
  NS_IMETHOD GetTimezoneLongitude(const nsACString & tzid, nsACString & _retval); \
  NS_IMETHOD GetTimezoneIds(nsIUTF8StringEnumerator * *aTimezoneIds); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALIICSSERVICE(_to) \
  NS_IMETHOD ParseICS(const nsACString & serialized, calIIcalComponent **_retval) { return _to ParseICS(serialized, _retval); } \
  NS_IMETHOD CreateIcalComponent(const nsACString & kind, calIIcalComponent **_retval) { return _to CreateIcalComponent(kind, _retval); } \
  NS_IMETHOD CreateIcalProperty(const nsACString & kind, calIIcalProperty **_retval) { return _to CreateIcalProperty(kind, _retval); } \
  NS_IMETHOD GetTimezone(const nsACString & tzid, calIIcalComponent **_retval) { return _to GetTimezone(tzid, _retval); } \
  NS_IMETHOD GetTimezoneLatitude(const nsACString & tzid, nsACString & _retval) { return _to GetTimezoneLatitude(tzid, _retval); } \
  NS_IMETHOD GetTimezoneLongitude(const nsACString & tzid, nsACString & _retval) { return _to GetTimezoneLongitude(tzid, _retval); } \
  NS_IMETHOD GetTimezoneIds(nsIUTF8StringEnumerator * *aTimezoneIds) { return _to GetTimezoneIds(aTimezoneIds); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_CALIICSSERVICE(_to) \
  NS_IMETHOD ParseICS(const nsACString & serialized, calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ParseICS(serialized, _retval); } \
  NS_IMETHOD CreateIcalComponent(const nsACString & kind, calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateIcalComponent(kind, _retval); } \
  NS_IMETHOD CreateIcalProperty(const nsACString & kind, calIIcalProperty **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CreateIcalProperty(kind, _retval); } \
  NS_IMETHOD GetTimezone(const nsACString & tzid, calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTimezone(tzid, _retval); } \
  NS_IMETHOD GetTimezoneLatitude(const nsACString & tzid, nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTimezoneLatitude(tzid, _retval); } \
  NS_IMETHOD GetTimezoneLongitude(const nsACString & tzid, nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTimezoneLongitude(tzid, _retval); } \
  NS_IMETHOD GetTimezoneIds(nsIUTF8StringEnumerator * *aTimezoneIds) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTimezoneIds(aTimezoneIds); } 

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

/* Header file */
class _MYCLASS_ : public calIICSService
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALIICSSERVICE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

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

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

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

/* calIIcalComponent parseICS (in AUTF8String serialized); */
NS_IMETHODIMP _MYCLASS_::ParseICS(const nsACString & serialized, calIIcalComponent **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIIcalComponent createIcalComponent (in AUTF8String kind); */
NS_IMETHODIMP _MYCLASS_::CreateIcalComponent(const nsACString & kind, calIIcalComponent **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIIcalProperty createIcalProperty (in AUTF8String kind); */
NS_IMETHODIMP _MYCLASS_::CreateIcalProperty(const nsACString & kind, calIIcalProperty **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIIcalComponent getTimezone (in AUTF8String tzid); */
NS_IMETHODIMP _MYCLASS_::GetTimezone(const nsACString & tzid, calIIcalComponent **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AUTF8String getTimezoneLatitude (in AUTF8String tzid); */
NS_IMETHODIMP _MYCLASS_::GetTimezoneLatitude(const nsACString & tzid, nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AUTF8String getTimezoneLongitude (in AUTF8String tzid); */
NS_IMETHODIMP _MYCLASS_::GetTimezoneLongitude(const nsACString & tzid, nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsIUTF8StringEnumerator timezoneIds; */
NS_IMETHODIMP _MYCLASS_::GetTimezoneIds(nsIUTF8StringEnumerator * *aTimezoneIds)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


#endif /* __gen_calIICSService_h__ */
