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

#ifndef __gen_calIWcapCalendar_h__
#define __gen_calIWcapCalendar_h__


#ifndef __gen_calICalendar_h__
#include "calICalendar.h"
#endif

#ifndef __gen_calIDateTime_h__
#include "calIDateTime.h"
#endif

#ifndef __gen_calIOperation_h__
#include "calIOperation.h"
#endif

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

class calIAttendee; /* forward declaration */


/* starting interface:    calIWcapCalendar */
#define CALIWCAPCALENDAR_IID_STR "21a189df-6c92-41f6-9e2b-1929ef25caee"

#define CALIWCAPCALENDAR_IID \
  {0x21a189df, 0x6c92, 0x41f6, \
    { 0x9e, 0x2b, 0x19, 0x29, 0xef, 0x25, 0xca, 0xee }}

/** Adds WCAP specific capabilities to calICalendar.
 */
class NS_NO_VTABLE calIWcapCalendar : public calICalendar {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALIWCAPCALENDAR_IID)

  /**
     * User session this calendar instance belongs to.
     */
  /* readonly attribute calIWcapSession session; */
  NS_IMETHOD GetSession(calIWcapSession * *aSession) = 0;

  /**
     * Current calId the calendar instance acts on; defaults to userId.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute string calId; */
  NS_IMETHOD GetCalId(char * *aCalId) = 0;

  /**
     * UserId of primary owner of this calendar instance.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute string ownerId; */
  NS_IMETHOD GetOwnerId(char * *aOwnerId) = 0;

  /**
     * Determines whether this calendar instance is the user's default calendar.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute boolean isDefaultCalendar; */
  NS_IMETHOD GetIsDefaultCalendar(PRBool *aIsDefaultCalendar) = 0;

  /**
     * Whether the currently selected calendar belongs to user.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute boolean isOwnedCalendar; */
  NS_IMETHOD GetIsOwnedCalendar(PRBool *aIsOwnedCalendar) = 0;

  /**
     * Calendar description.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute string description; */
  NS_IMETHOD GetDescription(char * *aDescription) = 0;

  /**
     * Calendar display name.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute string displayName; */
  NS_IMETHOD GetDisplayName(char * *aDisplayName) = 0;

  /**
     * Gets this calendar's (calId) default timezone.
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* readonly attribute string defaultTimezone; */
  NS_IMETHOD GetDefaultTimezone(char * *aDefaultTimezone) = 0;

  /**
     * Tests whether the passed item corresponds to an invitation.
     *
     * @param item item to be tested
     * @return whether the passed item corresponds to an invitation
     */
  /* boolean isInvitation (in calIItemBase item); */
  NS_IMETHOD IsInvitation(calIItemBase *item, PRBool *_retval) = 0;

  /**
     * Gets the invited attendee if the passed item corresponds to
     * an invitation.
     *
     * @param item invitation item
     * @return attendee object else null
     */
  /* calIAttendee getInvitedAttendee (in calIItemBase item); */
  NS_IMETHOD GetInvitedAttendee(calIItemBase *item, calIAttendee **_retval) = 0;

  /**
     * Gets calendar properties.
     *
     * @param propName property name (e.g. X-S1CS-CALPROPS-COMMON-NAME)
     * @param count length of props array
     * @param listener called with array of strings as result
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     */
  /* void getCalendarProperties (in string propName, out unsigned long count, [array, size_is (count), retval] out string props); */
  NS_IMETHOD GetCalendarProperties(const char *propName, PRUint32 *count, char ***props) = 0;

  /**
     * Scope: getItems only
     * Whether getItems should only return items that have alarms set for the
     * specified range.
     */
  enum { ITEM_FILTER_BY_ALARM_RANGE = 8388608U };

  /**
//      * Scope: Attendee
//      * The event or todo is an invitation from another
//      * user and the current user has declined the invitation.
//      */
/**
//      * Scope: Attendee
//      * The event or todo is an invitation from another
//      * user and the current user has accepted the invitation.
//      */
/**
//      * Scope: Organizer
//      * The event or todo is an invitation from the current
//      * user to other invitees, and all invitees have replied.
//      */
/**
     * Scope: Attendee
     * The event or todo is an invitation from another
     * user and the current user has not replied to it yet.
     */
  enum { ITEM_FILTER_REQUEST_NEEDS_ACTION = 134217728U };

  /**
     * Scope: Attendee
     * The event or todo is an invitation from another
     * user and the current user is not required to reply.
     */
  enum { ITEM_FILTER_REQUEST_NEEDSNOACTION = 268435456U };

  /**
//      * Scope: Organizer
//      * The event or todo is an invitation from the current
//      * user to other invitees, and is currently in the
//      * process of sending out invitations.
//      */
/**
//      * Scope: Organizer
//      * The event or todo is an invitation from the current
//      * user to other invitees, and is currently awaiting.
//      */
  enum { ITEM_FILTER_SUPPRESS_ONERROR = 2147483648U };

  /** xxx todo: to be moved to calIOperationListener?
     */
  enum { SYNC = 5U };

  /**
     * Syncs in changes since time <code>dtFrom</code>.
     * The passed <code>listener</code> receives a
     * <code>SYNC</code> with timestamp as detail.
     *
     * @param destCal destination calendar to write changes to (may be null)
     * @param itemFilter ITEM_FILTER flags OR-ed together,
     *                   ITEM_FILTER_CLASS_OCCURRENCES not allowed
     * @param dtFrom start time to sync changes from,
     *               if null all items are synced in
     * @param listener operation listener for SYNC operation
     *                 (may optionally implemented calIObserver to receive
     *                 onAddItem(), onModifyItem() or onDeleteItem() calls)
     */
  /* calIOperation syncChangesTo (in calICalendar destCal, in unsigned long itemFilter, in calIDateTime dtFrom, in calIOperationListener listener); */
  NS_IMETHOD SyncChangesTo(calICalendar *destCal, PRUint32 itemFilter, calIDateTime *dtFrom, calIOperationListener *listener, calIOperation **_retval) = 0;

  /**
     * Whether it is allowed or denied to get availability information
     * (i.e. free-busy times).
     */
  enum { AC_FREEBUSY = 1U };

  /**
     * Whether it is allowed or denied to invite a calendar's
     * owner placing an invitation into the calendar.
     */
  enum { AC_SCHEDULE = 2U };

  /**
     * Whether it is allowed or denied to read components.
     */
  enum { AC_COMP_READ = 4U };

  /**
     * Whether it is allowed or denied to add, modify or delete components.
     */
  enum { AC_COMP_WRITE = 8U };

  /**
     * Whether it is allowed or denied to read properties.
     */
  enum { AC_PROP_READ = 16U };

  /**
     * Whether it is allowed or denied to add, modify or delete properties.
     */
  enum { AC_PROP_WRITE = 32U };

  /**
     * Full access, includes all of the above.
     */
  enum { AC_FULL = 63U };

  /**
     * Checks whether the currently logged in user can perform the specified
     * actions. Clients should check these bits before performing operations
     * on a calendar instance, e.g.
     *
     * if (cal.checkAccess(calIWcapCalendar.AC_COMP_WRITE))
     *     cal.deleteItem(item, listener);
     *
     * or
     * 
     * if (cal.checkAccess(calIWcapCalendar.AC_PROP_WRITE))
     *     cal.name = newName;
     *
     * @exception NS_ERROR_NOT_AVAILABLE if not logged in
     * @param accessControlBits access control bits (above AC_ definitions)
     * @return true if access is granted, false otherwise
     */
  /* boolean checkAccess (in unsigned long accessControlBits); */
  NS_IMETHOD CheckAccess(PRUint32 accessControlBits, PRBool *_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIWCAPCALENDAR \
  NS_IMETHOD GetSession(calIWcapSession * *aSession); \
  NS_IMETHOD GetCalId(char * *aCalId); \
  NS_IMETHOD GetOwnerId(char * *aOwnerId); \
  NS_IMETHOD GetIsDefaultCalendar(PRBool *aIsDefaultCalendar); \
  NS_IMETHOD GetIsOwnedCalendar(PRBool *aIsOwnedCalendar); \
  NS_IMETHOD GetDescription(char * *aDescription); \
  NS_IMETHOD GetDisplayName(char * *aDisplayName); \
  NS_IMETHOD GetDefaultTimezone(char * *aDefaultTimezone); \
  NS_IMETHOD IsInvitation(calIItemBase *item, PRBool *_retval); \
  NS_IMETHOD GetInvitedAttendee(calIItemBase *item, calIAttendee **_retval); \
  NS_IMETHOD GetCalendarProperties(const char *propName, PRUint32 *count, char ***props); \
  NS_IMETHOD SyncChangesTo(calICalendar *destCal, PRUint32 itemFilter, calIDateTime *dtFrom, calIOperationListener *listener, calIOperation **_retval); \
  NS_IMETHOD CheckAccess(PRUint32 accessControlBits, PRBool *_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALIWCAPCALENDAR(_to) \
  NS_IMETHOD GetSession(calIWcapSession * *aSession) { return _to GetSession(aSession); } \
  NS_IMETHOD GetCalId(char * *aCalId) { return _to GetCalId(aCalId); } \
  NS_IMETHOD GetOwnerId(char * *aOwnerId) { return _to GetOwnerId(aOwnerId); } \
  NS_IMETHOD GetIsDefaultCalendar(PRBool *aIsDefaultCalendar) { return _to GetIsDefaultCalendar(aIsDefaultCalendar); } \
  NS_IMETHOD GetIsOwnedCalendar(PRBool *aIsOwnedCalendar) { return _to GetIsOwnedCalendar(aIsOwnedCalendar); } \
  NS_IMETHOD GetDescription(char * *aDescription) { return _to GetDescription(aDescription); } \
  NS_IMETHOD GetDisplayName(char * *aDisplayName) { return _to GetDisplayName(aDisplayName); } \
  NS_IMETHOD GetDefaultTimezone(char * *aDefaultTimezone) { return _to GetDefaultTimezone(aDefaultTimezone); } \
  NS_IMETHOD IsInvitation(calIItemBase *item, PRBool *_retval) { return _to IsInvitation(item, _retval); } \
  NS_IMETHOD GetInvitedAttendee(calIItemBase *item, calIAttendee **_retval) { return _to GetInvitedAttendee(item, _retval); } \
  NS_IMETHOD GetCalendarProperties(const char *propName, PRUint32 *count, char ***props) { return _to GetCalendarProperties(propName, count, props); } \
  NS_IMETHOD SyncChangesTo(calICalendar *destCal, PRUint32 itemFilter, calIDateTime *dtFrom, calIOperationListener *listener, calIOperation **_retval) { return _to SyncChangesTo(destCal, itemFilter, dtFrom, listener, _retval); } \
  NS_IMETHOD CheckAccess(PRUint32 accessControlBits, PRBool *_retval) { return _to CheckAccess(accessControlBits, _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_CALIWCAPCALENDAR(_to) \
  NS_IMETHOD GetSession(calIWcapSession * *aSession) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSession(aSession); } \
  NS_IMETHOD GetCalId(char * *aCalId) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCalId(aCalId); } \
  NS_IMETHOD GetOwnerId(char * *aOwnerId) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetOwnerId(aOwnerId); } \
  NS_IMETHOD GetIsDefaultCalendar(PRBool *aIsDefaultCalendar) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsDefaultCalendar(aIsDefaultCalendar); } \
  NS_IMETHOD GetIsOwnedCalendar(PRBool *aIsOwnedCalendar) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsOwnedCalendar(aIsOwnedCalendar); } \
  NS_IMETHOD GetDescription(char * *aDescription) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDescription(aDescription); } \
  NS_IMETHOD GetDisplayName(char * *aDisplayName) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDisplayName(aDisplayName); } \
  NS_IMETHOD GetDefaultTimezone(char * *aDefaultTimezone) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDefaultTimezone(aDefaultTimezone); } \
  NS_IMETHOD IsInvitation(calIItemBase *item, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->IsInvitation(item, _retval); } \
  NS_IMETHOD GetInvitedAttendee(calIItemBase *item, calIAttendee **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetInvitedAttendee(item, _retval); } \
  NS_IMETHOD GetCalendarProperties(const char *propName, PRUint32 *count, char ***props) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCalendarProperties(propName, count, props); } \
  NS_IMETHOD SyncChangesTo(calICalendar *destCal, PRUint32 itemFilter, calIDateTime *dtFrom, calIOperationListener *listener, calIOperation **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->SyncChangesTo(destCal, itemFilter, dtFrom, listener, _retval); } \
  NS_IMETHOD CheckAccess(PRUint32 accessControlBits, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CheckAccess(accessControlBits, _retval); } 

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

/* Header file */
class _MYCLASS_ : public calIWcapCalendar
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALIWCAPCALENDAR

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

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

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

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

/* readonly attribute calIWcapSession session; */
NS_IMETHODIMP _MYCLASS_::GetSession(calIWcapSession * *aSession)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string calId; */
NS_IMETHODIMP _MYCLASS_::GetCalId(char * *aCalId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string ownerId; */
NS_IMETHODIMP _MYCLASS_::GetOwnerId(char * *aOwnerId)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean isDefaultCalendar; */
NS_IMETHODIMP _MYCLASS_::GetIsDefaultCalendar(PRBool *aIsDefaultCalendar)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean isOwnedCalendar; */
NS_IMETHODIMP _MYCLASS_::GetIsOwnedCalendar(PRBool *aIsOwnedCalendar)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string description; */
NS_IMETHODIMP _MYCLASS_::GetDescription(char * *aDescription)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string displayName; */
NS_IMETHODIMP _MYCLASS_::GetDisplayName(char * *aDisplayName)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute string defaultTimezone; */
NS_IMETHODIMP _MYCLASS_::GetDefaultTimezone(char * *aDefaultTimezone)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean isInvitation (in calIItemBase item); */
NS_IMETHODIMP _MYCLASS_::IsInvitation(calIItemBase *item, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIAttendee getInvitedAttendee (in calIItemBase item); */
NS_IMETHODIMP _MYCLASS_::GetInvitedAttendee(calIItemBase *item, calIAttendee **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getCalendarProperties (in string propName, out unsigned long count, [array, size_is (count), retval] out string props); */
NS_IMETHODIMP _MYCLASS_::GetCalendarProperties(const char *propName, PRUint32 *count, char ***props)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIOperation syncChangesTo (in calICalendar destCal, in unsigned long itemFilter, in calIDateTime dtFrom, in calIOperationListener listener); */
NS_IMETHODIMP _MYCLASS_::SyncChangesTo(calICalendar *destCal, PRUint32 itemFilter, calIDateTime *dtFrom, calIOperationListener *listener, calIOperation **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean checkAccess (in unsigned long accessControlBits); */
NS_IMETHODIMP _MYCLASS_::CheckAccess(PRUint32 accessControlBits, PRBool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


#endif /* __gen_calIWcapCalendar_h__ */
