/*
 * 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 "f41392ab-dcad-4bad-818f-b3d1631c4d93"

#define CALIITIPITEM_IID \
  {0xf41392ab, 0xdcad, 0x4bad, \
    { 0x81, 0x8f, 0xb3, 0xd1, 0x63, 0x1c, 0x4d, 0x93 }}

/** 
 * 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_DEFINE_STATIC_IID_ACCESSOR(CALIITIPITEM_IID)

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

  /**
     * Creates a new calItipItem with the same attributes as the one that
     * clone() is called upon.
     */
  /* calIItipItem clone (); */
  NS_IMETHOD Clone(calIItipItem **_retval) = 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 AUTF8String receivedMethod; */
  NS_IMETHOD GetReceivedMethod(nsACString & aReceivedMethod) = 0;
  NS_IMETHOD SetReceivedMethod(const nsACString & 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 AUTF8String responseMethod; */
  NS_IMETHOD GetResponseMethod(nsACString & aResponseMethod) = 0;
  NS_IMETHOD SetResponseMethod(const nsACString & 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;

  /**
     * localStatus: The response that the user has made to the invitation in
     *              this ItipItem.
     */
  /* attribute AUTF8String localStatus; */
  NS_IMETHOD GetLocalStatus(nsACString & aLocalStatus) = 0;
  NS_IMETHOD SetLocalStatus(const nsACString & aLocalStatus) = 0;

  /**
     * Get the list of items that are encapsulated in this calIItipItem
     * @returns An array of calIItemBase items that are inside this
     *          calIItipItem
     */
  /* void getItemList (out unsigned long itemCount, [array, size_is (itemCount), retval] out calIItemBase items); */
  NS_IMETHOD GetItemList(PRUint32 *itemCount, calIItemBase ***items) = 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();
*/
/**
     * Get next item from the iTIP message. If there is no next item then it
     * returns NULL
     * @return calIItemBase
     
    calIItemBase getNextItem();
*/
/**
     * 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().
     * @param 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
     * @param in parameter - AString containing attendee address
     * @param 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;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIITIPITEM \
  NS_IMETHOD Init(const nsACString & icalData); \
  NS_IMETHOD Clone(calIItipItem **_retval); \
  NS_IMETHOD GetIsSend(PRBool *aIsSend); \
  NS_IMETHOD SetIsSend(PRBool aIsSend); \
  NS_IMETHOD GetReceivedMethod(nsACString & aReceivedMethod); \
  NS_IMETHOD SetReceivedMethod(const nsACString & aReceivedMethod); \
  NS_IMETHOD GetResponseMethod(nsACString & aResponseMethod); \
  NS_IMETHOD SetResponseMethod(const nsACString & aResponseMethod); \
  NS_IMETHOD GetAutoResponse(PRUint32 *aAutoResponse); \
  NS_IMETHOD SetAutoResponse(PRUint32 aAutoResponse); \
  NS_IMETHOD GetTargetCalendar(calICalendar * *aTargetCalendar); \
  NS_IMETHOD SetTargetCalendar(calICalendar * aTargetCalendar); \
  NS_IMETHOD GetLocalStatus(nsACString & aLocalStatus); \
  NS_IMETHOD SetLocalStatus(const nsACString & aLocalStatus); \
  NS_IMETHOD GetItemList(PRUint32 *itemCount, calIItemBase ***items); \
  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 nsACString & icalData) { return _to Init(icalData); } \
  NS_IMETHOD Clone(calIItipItem **_retval) { return _to Clone(_retval); } \
  NS_IMETHOD GetIsSend(PRBool *aIsSend) { return _to GetIsSend(aIsSend); } \
  NS_IMETHOD SetIsSend(PRBool aIsSend) { return _to SetIsSend(aIsSend); } \
  NS_IMETHOD GetReceivedMethod(nsACString & aReceivedMethod) { return _to GetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD SetReceivedMethod(const nsACString & aReceivedMethod) { return _to SetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD GetResponseMethod(nsACString & aResponseMethod) { return _to GetResponseMethod(aResponseMethod); } \
  NS_IMETHOD SetResponseMethod(const nsACString & 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 GetLocalStatus(nsACString & aLocalStatus) { return _to GetLocalStatus(aLocalStatus); } \
  NS_IMETHOD SetLocalStatus(const nsACString & aLocalStatus) { return _to SetLocalStatus(aLocalStatus); } \
  NS_IMETHOD GetItemList(PRUint32 *itemCount, calIItemBase ***items) { return _to GetItemList(itemCount, items); } \
  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 nsACString & icalData) { return !_to ? NS_ERROR_NULL_POINTER : _to->Init(icalData); } \
  NS_IMETHOD Clone(calIItipItem **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Clone(_retval); } \
  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(nsACString & aReceivedMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD SetReceivedMethod(const nsACString & aReceivedMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetReceivedMethod(aReceivedMethod); } \
  NS_IMETHOD GetResponseMethod(nsACString & aResponseMethod) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetResponseMethod(aResponseMethod); } \
  NS_IMETHOD SetResponseMethod(const nsACString & 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 GetLocalStatus(nsACString & aLocalStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetLocalStatus(aLocalStatus); } \
  NS_IMETHOD SetLocalStatus(const nsACString & aLocalStatus) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetLocalStatus(aLocalStatus); } \
  NS_IMETHOD GetItemList(PRUint32 *itemCount, calIItemBase ***items) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetItemList(itemCount, items); } \
  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 AUTF8String icalData); */
NS_IMETHODIMP _MYCLASS_::Init(const nsACString & icalData)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* calIItipItem clone (); */
NS_IMETHODIMP _MYCLASS_::Clone(calIItipItem **_retval)
{
    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 AUTF8String receivedMethod; */
NS_IMETHODIMP _MYCLASS_::GetReceivedMethod(nsACString & aReceivedMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetReceivedMethod(const nsACString & aReceivedMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String responseMethod; */
NS_IMETHODIMP _MYCLASS_::GetResponseMethod(nsACString & aResponseMethod)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetResponseMethod(const nsACString & 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;
}

/* attribute AUTF8String localStatus; */
NS_IMETHODIMP _MYCLASS_::GetLocalStatus(nsACString & aLocalStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetLocalStatus(const nsACString & aLocalStatus)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getItemList (out unsigned long itemCount, [array, size_is (itemCount), retval] out calIItemBase items); */
NS_IMETHODIMP _MYCLASS_::GetItemList(PRUint32 *itemCount, calIItemBase ***items)
{
    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__ */
