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

#ifndef __gen_calIItipItem_h__
#define __gen_calIItipItem_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 calICalendar; /* forward declaration */

class nsISimpleEnumerator; /* forward declaration */


/* starting interface:    calIItipItem */
#define CALIITIPITEM_IID_STR "b84de879-4b85-4d68-8550-e0c527e46f98"

#define CALIITIPITEM_IID \
  {0xb84de879, 0x4b85, 0x4d68, \
    { 0x85, 0x50, 0xe0, 0xc5, 0x27, 0xe4, 0x6f, 0x98 }}

/** 
 * calIItipItem is an interface used to carry information between the mime
 * parser, the imip-bar UI, and the iTIP processor. It encapsulates a list of
 * calIItemBase objects and provides specialized iTIP methods for those items.
 */
class NS_NO_VTABLE calIItipItem : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(CALIITIPITEM_IID)

  /**
     * Initializes the item with an ics string
     * @arg - in parameter - AString of ical Data
     */
  /* void init (in AString icalData); */
  NS_IMETHOD Init(const nsAString & icalData) = 0;

  /**
     * Attribute: isSend - set to TRUE when sending this item to initiate an
     * iMIP communication. This will be used by the iTIP processor to route
     * the item directly to the email subsystem so that communication can be
     * initiated. For example, if you are Sending a REQUEST, you would set
     * this flag, and send the iTIP Item into the iTIP processor, which would
     * handle everything else.
     */
  /* attribute PRBool isSend; */
  NS_IMETHOD GetIsSend(PRBool *aIsSend) = 0;
  NS_IMETHOD SetIsSend(PRBool aIsSend) = 0;

  /**
     * Attribute: receivedMethod - method the iTIP item had upon reciept
     */
  /* attribute AString receivedMethod; */
  NS_IMETHOD GetReceivedMethod(nsAString & aReceivedMethod) = 0;
  NS_IMETHOD SetReceivedMethod(const nsAString & aReceivedMethod) = 0;

  /**
     * Attribute: responseMethod - method that the protocol handler (or the
     * user) decides to use to respond to the iTIP item (could be COUNTER,
     * REPLY, DECLINECOUNTER, etc)
     */
  /* attribute AString responseMethod; */
  NS_IMETHOD GetResponseMethod(nsAString & aResponseMethod) = 0;
  NS_IMETHOD SetResponseMethod(const nsAString & aResponseMethod) = 0;

  /**
     * Attribute: autoResponse Set to one of the three constants below
     */
  /* attribute unsigned long autoResponse; */
  NS_IMETHOD GetAutoResponse(PRUint32 *aAutoResponse) = 0;
  NS_IMETHOD SetAutoResponse(PRUint32 aAutoResponse) = 0;

  /**
     * Used to tell the iTIP processor to use an automatic response when
     * handling this iTIP item
     */
  enum { AUTO = 0U };

  /**
     * Used to tell the iTIP processor to allow the user to edit the response
     */
  enum { USER = 1U };

  /**
     * Used to tell the iTIP processor not to respond at all.
     */
  enum { NONE = 2U };

  /**
     * Attribute: targetCalendar - the calendar that this thing should be
     * stored in, if it should be stored onto a calendar. This is a calendar ID
     */
  /* attribute calICalendar targetCalendar; */
  NS_IMETHOD GetTargetCalendar(calICalendar * *aTargetCalendar) = 0;
  NS_IMETHOD SetTargetCalendar(calICalendar * aTargetCalendar) = 0;

  /**
     * Get the first item from the iTIP message
     * Bug XXX 351761: Need to find a way to make this use an nsISimpleEnumerator
     * @return calIItemBase
     */
  /* calIItemBase getFirstItem (); */
  NS_IMETHOD GetFirstItem(calIItemBase **_retval) = 0;

  /**
     * Get next item from the iTIP message. If there is no next item then it
     * returns NULL
     * @return calIItemBase
     */
  /* calIItemBase getNextItem (); */
  NS_IMETHOD GetNextItem(calIItemBase **_retval) = 0;

  /**
     * Modifies a calIItemBase that is in the component list. Internally, the
     * interface will update the proper component. It does this via the
     * UID of the component by calling hasSameIds().
     * @arg in parameter - item to modify
     * @return returns the new calIItemBase object for convienence
     */
  /* calIItemBase modifyItem (in calIItemBase item); */
  NS_IMETHOD ModifyItem(calIItemBase *item, calIItemBase **_retval) = 0;

  /**
     * Modifies the state of the given attendee in the item's ics
     * @arg in parameter - AString containing attendee address
     * @arg in parameter - AString contianing the new attendee status
     */
  /* void setAttendeeStatus (in AString attendeeID, in AString status); */
  NS_IMETHOD SetAttendeeStatus(const nsAString & attendeeID, const nsAString & status) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(calIItipItem, CALIITIPITEM_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIITIPITEM \
  NS_IMETHOD Init(const nsAString & icalData); \
  NS_IMETHOD GetIsSend(PRBool *aIsSend); \
  NS_IMETHOD SetIsSend(PRBool aIsSend); \
  NS_IMETHOD GetReceivedMethod(nsAString & aReceivedMethod); \
  NS_IMETHOD SetReceivedMethod(const nsAString & aReceivedMethod); \
  NS_IMETHOD GetResponseMethod(nsAString & aResponseMethod); \
  NS_IMETHOD SetResponseMethod(const nsAString & aResponseMethod); \
  NS_IMETHOD GetAutoResponse(PRUint32 *aAutoResponse); \
  NS_IMETHOD SetAutoResponse(PRUint32 aAutoResponse); \
  NS_IMETHOD GetTargetCalendar(calICalendar * *aTargetCalendar); \
  NS_IMETHOD SetTargetCalendar(calICalendar * aTargetCalendar); \
  NS_IMETHOD GetFirstItem(calIItemBase **_retval); \
  NS_IMETHOD GetNextItem(calIItemBase **_retval); \
  NS_IMETHOD ModifyItem(calIItemBase *item, calIItemBase **_retval); \
  NS_IMETHOD SetAttendeeStatus(const nsAString & attendeeID, const nsAString & status); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALIITIPITEM(_to) \
  NS_IMETHOD Init(const nsAString & icalData) { return _to Init(icalData); } \
  NS_IMETHOD GetIsSend(PRBool *aIsSend) { return _to GetIsSend(aIsSend); } \
  NS_IMETHOD SetIsSend(PRBool aIsSend) { return _to SetIsSend(aIsSend); } \
  NS_IMETHOD GetReceivedMethod(nsAString & aReceivedMethod) { return _to GetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD SetReceivedMethod(const nsAString & aReceivedMethod) { return _to SetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD GetResponseMethod(nsAString & aResponseMethod) { return _to GetResponseMethod(aResponseMethod); } \
  NS_IMETHOD SetResponseMethod(const nsAString & aResponseMethod) { return _to SetResponseMethod(aResponseMethod); } \
  NS_IMETHOD GetAutoResponse(PRUint32 *aAutoResponse) { return _to GetAutoResponse(aAutoResponse); } \
  NS_IMETHOD SetAutoResponse(PRUint32 aAutoResponse) { return _to SetAutoResponse(aAutoResponse); } \
  NS_IMETHOD GetTargetCalendar(calICalendar * *aTargetCalendar) { return _to GetTargetCalendar(aTargetCalendar); } \
  NS_IMETHOD SetTargetCalendar(calICalendar * aTargetCalendar) { return _to SetTargetCalendar(aTargetCalendar); } \
  NS_IMETHOD GetFirstItem(calIItemBase **_retval) { return _to GetFirstItem(_retval); } \
  NS_IMETHOD GetNextItem(calIItemBase **_retval) { return _to GetNextItem(_retval); } \
  NS_IMETHOD ModifyItem(calIItemBase *item, calIItemBase **_retval) { return _to ModifyItem(item, _retval); } \
  NS_IMETHOD SetAttendeeStatus(const nsAString & attendeeID, const nsAString & status) { return _to SetAttendeeStatus(attendeeID, status); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_CALIITIPITEM(_to) \
  NS_IMETHOD Init(const nsAString & icalData) { return !_to ? NS_ERROR_NULL_POINTER : _to->Init(icalData); } \
  NS_IMETHOD GetIsSend(PRBool *aIsSend) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIsSend(aIsSend); } \
  NS_IMETHOD SetIsSend(PRBool aIsSend) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetIsSend(aIsSend); } \
  NS_IMETHOD GetReceivedMethod(nsAString & aReceivedMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD SetReceivedMethod(const nsAString & aReceivedMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD GetResponseMethod(nsAString & aResponseMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetResponseMethod(aResponseMethod); } \
  NS_IMETHOD SetResponseMethod(const nsAString & aResponseMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetResponseMethod(aResponseMethod); } \
  NS_IMETHOD GetAutoResponse(PRUint32 *aAutoResponse) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetAutoResponse(aAutoResponse); } \
  NS_IMETHOD SetAutoResponse(PRUint32 aAutoResponse) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAutoResponse(aAutoResponse); } \
  NS_IMETHOD GetTargetCalendar(calICalendar * *aTargetCalendar) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTargetCalendar(aTargetCalendar); } \
  NS_IMETHOD SetTargetCalendar(calICalendar * aTargetCalendar) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTargetCalendar(aTargetCalendar); } \
  NS_IMETHOD GetFirstItem(calIItemBase **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstItem(_retval); } \
  NS_IMETHOD GetNextItem(calIItemBase **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNextItem(_retval); } \
  NS_IMETHOD ModifyItem(calIItemBase *item, calIItemBase **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->ModifyItem(item, _retval); } \
  NS_IMETHOD SetAttendeeStatus(const nsAString & attendeeID, const nsAString & status) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetAttendeeStatus(attendeeID, status); } 

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

/* Header file */
class _MYCLASS_ : public calIItipItem
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALIITIPITEM

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

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

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

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

/* void init (in AString icalData); */
NS_IMETHODIMP _MYCLASS_::Init(const nsAString & icalData)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute PRBool isSend; */
NS_IMETHODIMP _MYCLASS_::GetIsSend(PRBool *aIsSend)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetIsSend(PRBool aIsSend)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString receivedMethod; */
NS_IMETHODIMP _MYCLASS_::GetReceivedMethod(nsAString & aReceivedMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetReceivedMethod(const nsAString & aReceivedMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString responseMethod; */
NS_IMETHODIMP _MYCLASS_::GetResponseMethod(nsAString & aResponseMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetResponseMethod(const nsAString & aResponseMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long autoResponse; */
NS_IMETHODIMP _MYCLASS_::GetAutoResponse(PRUint32 *aAutoResponse)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetAutoResponse(PRUint32 aAutoResponse)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calICalendar targetCalendar; */
NS_IMETHODIMP _MYCLASS_::GetTargetCalendar(calICalendar * *aTargetCalendar)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTargetCalendar(calICalendar * aTargetCalendar)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIItemBase getFirstItem (); */
NS_IMETHODIMP _MYCLASS_::GetFirstItem(calIItemBase **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIItemBase getNextItem (); */
NS_IMETHODIMP _MYCLASS_::GetNextItem(calIItemBase **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIItemBase modifyItem (in calIItemBase item); */
NS_IMETHODIMP _MYCLASS_::ModifyItem(calIItemBase *item, calIItemBase **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setAttendeeStatus (in AString attendeeID, in AString status); */
NS_IMETHODIMP _MYCLASS_::SetAttendeeStatus(const nsAString & attendeeID, const nsAString & status)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


#endif /* __gen_calIItipItem_h__ */
