/*
 * 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 calIDuration; /* forward declaration */

class calITimezone; /* forward declaration */

class calITimezoneProvider; /* forward declaration */

class calIIcalProperty; /* forward declaration */

class nsIUTF8StringEnumerator; /* forward declaration */

class nsIInputStream; /* 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;

  /* readonly attribute calIDuration duration; */
  NS_IMETHOD GetDuration(calIDuration * *aDuration) = 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;

  /**
     * The recurrence ID, a.k.a. DTSTART-of-calculated-occurrence,
     * or null if this isn't an occurrence.
     */
  /* attribute calIDateTime recurrenceId; */
  NS_IMETHOD GetRecurrenceId(calIDateTime * *aRecurrenceId) = 0;
  NS_IMETHOD SetRecurrenceId(calIDateTime * aRecurrenceId) = 0;

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

  /**
     * Return a string representation of this instance.
     */
  /* AUTF8String toString (); */
  NS_IMETHOD ToString(nsACString & _retval) = 0;

  /**
     * Serializes this component (and subcomponents) directly to an
     * input stream.  Typically used for performance to avoid
     * unnecessary conversions and XPConnect traversals.
     * 
     * @result     an input stream which can be read to get the serialized
     *             version of this component, encoded in UTF-8.  Implements
     *             nsISeekableStream so that it can be used with
     *             nsIUploadChannel.
     */
  /* nsIInputStream serializeToICSStream (); */
  NS_IMETHOD SerializeToICSStream(nsIInputStream **_retval) = 0;

  /* void addSubcomponent (in calIIcalComponent comp); */
  NS_IMETHOD AddSubcomponent(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;

  /**
     * Timezones need special handling, as they must be
     * emitted as children of VCALENDAR, but can be referenced by
     * any sub component.
     * Adding a second timezone (of the same TZID) will remove the
     * first one.
     */
  /* void addTimezoneReference (in calITimezone aTimezone); */
  NS_IMETHOD AddTimezoneReference(calITimezone *aTimezone) = 0;

  /**
     * Returns an array of VTIMEZONE components.
     * These are the timezones that are in use by this
     * component and its children.
     */
  /* void getReferencedTimezones (out PRUint32 aCount, [array, size_is (aCount), retval] out calITimezone aTimezones); */
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calITimezone ***aTimezones) = 0;

  /**
     * Clones the component. The cloned component is decoupled from any parent.
     * @return cloned component
     */
  /* calIIcalComponent clone (); */
  NS_IMETHOD Clone(calIIcalComponent **_retval) = 0;

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

  /* [noscript, notxpcom] icaltimezoneptr getIcalTimezone (); */
  NS_IMETHOD_(struct _icaltimezone *) GetIcalTimezone(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 GetDuration(calIDuration * *aDuration); \
  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 GetRecurrenceId(calIDateTime * *aRecurrenceId); \
  NS_IMETHOD SetRecurrenceId(calIDateTime * aRecurrenceId); \
  NS_IMETHOD SerializeToICS(nsACString & _retval); \
  NS_IMETHOD ToString(nsACString & _retval); \
  NS_IMETHOD SerializeToICSStream(nsIInputStream **_retval); \
  NS_IMETHOD AddSubcomponent(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 AddTimezoneReference(calITimezone *aTimezone); \
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calITimezone ***aTimezones); \
  NS_IMETHOD Clone(calIIcalComponent **_retval); \
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void); \
  NS_IMETHOD_(struct _icaltimezone *) GetIcalTimezone(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 GetDuration(calIDuration * *aDuration) { return _to GetDuration(aDuration); } \
  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 GetRecurrenceId(calIDateTime * *aRecurrenceId) { return _to GetRecurrenceId(aRecurrenceId); } \
  NS_IMETHOD SetRecurrenceId(calIDateTime * aRecurrenceId) { return _to SetRecurrenceId(aRecurrenceId); } \
  NS_IMETHOD SerializeToICS(nsACString & _retval) { return _to SerializeToICS(_retval); } \
  NS_IMETHOD ToString(nsACString & _retval) { return _to ToString(_retval); } \
  NS_IMETHOD SerializeToICSStream(nsIInputStream **_retval) { return _to SerializeToICSStream(_retval); } \
  NS_IMETHOD AddSubcomponent(calIIcalComponent *comp) { return _to AddSubcomponent(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 AddTimezoneReference(calITimezone *aTimezone) { return _to AddTimezoneReference(aTimezone); } \
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calITimezone ***aTimezones) { return _to GetReferencedTimezones(aCount, aTimezones); } \
  NS_IMETHOD Clone(calIIcalComponent **_retval) { return _to Clone(_retval); } \
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void) { return _to GetIcalComponent(); } \
  NS_IMETHOD_(struct _icaltimezone *) GetIcalTimezone(void) { return _to GetIcalTimezone(); } 

/* 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 GetDuration(calIDuration * *aDuration) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDuration(aDuration); } \
  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 GetRecurrenceId(calIDateTime * *aRecurrenceId) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRecurrenceId(aRecurrenceId); } \
  NS_IMETHOD SetRecurrenceId(calIDateTime * aRecurrenceId) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRecurrenceId(aRecurrenceId); } \
  NS_IMETHOD SerializeToICS(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->SerializeToICS(_retval); } \
  NS_IMETHOD ToString(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ToString(_retval); } \
  NS_IMETHOD SerializeToICSStream(nsIInputStream **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->SerializeToICSStream(_retval); } \
  NS_IMETHOD AddSubcomponent(calIIcalComponent *comp) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddSubcomponent(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 AddTimezoneReference(calITimezone *aTimezone) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddTimezoneReference(aTimezone); } \
  NS_IMETHOD GetReferencedTimezones(PRUint32 *aCount, calITimezone ***aTimezones) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetReferencedTimezones(aCount, aTimezones); } \
  NS_IMETHOD Clone(calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Clone(_retval); } \
  NS_IMETHOD_(struct icalcomponent_impl *) GetIcalComponent(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIcalComponent(); } \
  NS_IMETHOD_(struct _icaltimezone *) GetIcalTimezone(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIcalTimezone(); } 

#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;
}

/* readonly attribute calIDuration duration; */
NS_IMETHODIMP _MYCLASS_::GetDuration(calIDuration * *aDuration)
{
    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;
}

/* attribute calIDateTime recurrenceId; */
NS_IMETHODIMP _MYCLASS_::GetRecurrenceId(calIDateTime * *aRecurrenceId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetRecurrenceId(calIDateTime * aRecurrenceId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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

/* nsIInputStream serializeToICSStream (); */
NS_IMETHODIMP _MYCLASS_::SerializeToICSStream(nsIInputStream **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addSubcomponent (in calIIcalComponent comp); */
NS_IMETHODIMP _MYCLASS_::AddSubcomponent(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 addTimezoneReference (in calITimezone aTimezone); */
NS_IMETHODIMP _MYCLASS_::AddTimezoneReference(calITimezone *aTimezone)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

/* calIIcalComponent clone (); */
NS_IMETHODIMP _MYCLASS_::Clone(calIIcalComponent **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

/* [noscript, notxpcom] icaltimezoneptr getIcalTimezone (); */
NS_IMETHODIMP_(struct _icaltimezone *) _MYCLASS_::GetIcalTimezone()
{
    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)

  /**
     * The whole property as an ical string.
     * @exception Any libical error will be thrown as an calIError::ICS_ error.
     */
  /* readonly attribute AUTF8String icalString; */
  NS_IMETHOD GetIcalString(nsACString & aIcalString) = 0;

  /**
     * Return a string representation of this instance.
     */
  /* AUTF8String toString (); */
  NS_IMETHOD ToString(nsACString & _retval) = 0;

  /**
     * The value of the property as string.
     * The exception for properties of TEXT or X- type, those will be unescaped
     * when getting, and also expects an unescaped string when setting.
     * Datetime, numeric and other non-text types are represented as ical string
     */
  /* attribute AUTF8String value; */
  NS_IMETHOD GetValue(nsACString & aValue) = 0;
  NS_IMETHOD SetValue(const nsACString & aValue) = 0;

  /**
     * The value of the property in (escaped) ical format.
     */
  /* attribute AUTF8String valueAsIcalString; */
  NS_IMETHOD GetValueAsIcalString(nsACString & aValueAsIcalString) = 0;
  NS_IMETHOD SetValueAsIcalString(const nsACString & aValueAsIcalString) = 0;

  /**
     * The value of the property as date/datetime value, keeping
     * track of the used timezone referenced in the owning component.
     */
  /* attribute calIDateTime valueAsDatetime; */
  NS_IMETHOD GetValueAsDatetime(calIDateTime * *aValueAsDatetime) = 0;
  NS_IMETHOD SetValueAsDatetime(calIDateTime * aValueAsDatetime) = 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;

  /**
     * Returns the icalcompoment this property belongs to. Please note
     * that the returned object is a raw pointer to the appropriate
     * component and is owned by libical.
     */
  /* [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_CALIICALPROPERTY \
  NS_IMETHOD GetIcalString(nsACString & aIcalString); \
  NS_IMETHOD ToString(nsACString & _retval); \
  NS_IMETHOD GetValue(nsACString & aValue); \
  NS_IMETHOD SetValue(const nsACString & aValue); \
  NS_IMETHOD GetValueAsIcalString(nsACString & aValueAsIcalString); \
  NS_IMETHOD SetValueAsIcalString(const nsACString & aValueAsIcalString); \
  NS_IMETHOD GetValueAsDatetime(calIDateTime * *aValueAsDatetime); \
  NS_IMETHOD SetValueAsDatetime(calIDateTime * aValueAsDatetime); \
  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); \
  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_CALIICALPROPERTY(_to) \
  NS_IMETHOD GetIcalString(nsACString & aIcalString) { return _to GetIcalString(aIcalString); } \
  NS_IMETHOD ToString(nsACString & _retval) { return _to ToString(_retval); } \
  NS_IMETHOD GetValue(nsACString & aValue) { return _to GetValue(aValue); } \
  NS_IMETHOD SetValue(const nsACString & aValue) { return _to SetValue(aValue); } \
  NS_IMETHOD GetValueAsIcalString(nsACString & aValueAsIcalString) { return _to GetValueAsIcalString(aValueAsIcalString); } \
  NS_IMETHOD SetValueAsIcalString(const nsACString & aValueAsIcalString) { return _to SetValueAsIcalString(aValueAsIcalString); } \
  NS_IMETHOD GetValueAsDatetime(calIDateTime * *aValueAsDatetime) { return _to GetValueAsDatetime(aValueAsDatetime); } \
  NS_IMETHOD SetValueAsDatetime(calIDateTime * aValueAsDatetime) { return _to SetValueAsDatetime(aValueAsDatetime); } \
  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(); } \
  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_CALIICALPROPERTY(_to) \
  NS_IMETHOD GetIcalString(nsACString & aIcalString) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIcalString(aIcalString); } \
  NS_IMETHOD ToString(nsACString & _retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ToString(_retval); } \
  NS_IMETHOD GetValue(nsACString & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetValue(aValue); } \
  NS_IMETHOD SetValue(const nsACString & aValue) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetValue(aValue); } \
  NS_IMETHOD GetValueAsIcalString(nsACString & aValueAsIcalString) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetValueAsIcalString(aValueAsIcalString); } \
  NS_IMETHOD SetValueAsIcalString(const nsACString & aValueAsIcalString) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetValueAsIcalString(aValueAsIcalString); } \
  NS_IMETHOD GetValueAsDatetime(calIDateTime * *aValueAsDatetime) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetValueAsDatetime(aValueAsDatetime); } \
  NS_IMETHOD SetValueAsDatetime(calIDateTime * aValueAsDatetime) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetValueAsDatetime(aValueAsDatetime); } \
  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(); } \
  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 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 */
}

/* readonly attribute AUTF8String icalString; */
NS_IMETHODIMP _MYCLASS_::GetIcalString(nsACString & aIcalString)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

/* attribute AUTF8String value; */
NS_IMETHODIMP _MYCLASS_::GetValue(nsACString & aValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetValue(const nsACString & aValue)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String valueAsIcalString; */
NS_IMETHODIMP _MYCLASS_::GetValueAsIcalString(nsACString & aValueAsIcalString)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetValueAsIcalString(const nsACString & aValueAsIcalString)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime valueAsDatetime; */
NS_IMETHODIMP _MYCLASS_::GetValueAsDatetime(calIDateTime * *aValueAsDatetime)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetValueAsDatetime(calIDateTime * aValueAsDatetime)
{
    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;
}

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

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


/* starting interface:    calIICSService */
#define CALIICSSERVICE_IID_STR "ae4ca6c3-981b-4f66-a0ce-2f2c218ad9e3"

#define CALIICSSERVICE_IID \
  {0xae4ca6c3, 0x981b, 0x4f66, \
    { 0xa0, 0xce, 0x2f, 0x2c, 0x21, 0x8a, 0xd9, 0xe3 }}

class NS_NO_VTABLE calIICSService : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALIICSSERVICE_IID)

  /**
     * Parses an ICS string and uses the passed tzProvider instance to
     * resolve timezones not contained withing the VCALENDAR.
     *
     * @param serialized     an ICS string
     * @param tzProvider     timezone provider used to resolve TZIDs
     *                       not contained within the VCALENDAR;
     *                       if null is passed, parsing falls back to
     *                       using the timezone service
     */
  /* calIIcalComponent parseICS (in AUTF8String serialized, in calITimezoneProvider tzProvider); */
  NS_IMETHOD ParseICS(const nsACString & serialized, calITimezoneProvider *tzProvider, 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;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIICSSERVICE \
  NS_IMETHOD ParseICS(const nsACString & serialized, calITimezoneProvider *tzProvider, calIIcalComponent **_retval); \
  NS_IMETHOD CreateIcalComponent(const nsACString & kind, calIIcalComponent **_retval); \
  NS_IMETHOD CreateIcalProperty(const nsACString & kind, calIIcalProperty **_retval); 

/* 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, calITimezoneProvider *tzProvider, calIIcalComponent **_retval) { return _to ParseICS(serialized, tzProvider, _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); } 

/* 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, calITimezoneProvider *tzProvider, calIIcalComponent **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ParseICS(serialized, tzProvider, _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); } 

#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, in calITimezoneProvider tzProvider); */
NS_IMETHODIMP _MYCLASS_::ParseICS(const nsACString & serialized, calITimezoneProvider *tzProvider, 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;
}

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


#endif /* __gen_calIICSService_h__ */
