CalendarFolder Class

package javaxt.exchange;

//******************************************************************************
//**  CalendarFolder Class
//******************************************************************************
/**
 *   Enter class description here
 *
 ******************************************************************************/

public class CalendarFolder extends Folder {

    private java.util.HashSet<FieldURI> props = new java.util.HashSet<FieldURI>();
    private Connection conn;

  //**************************************************************************
  //** Constructor
  //**************************************************************************
  /** Creates a new instance of CalendarFolder. */

    public CalendarFolder(Connection conn) throws ExchangeException {
        super("calendar", conn);
        props.add(new FieldURI("calendar:TimeZone"));
        this.conn = conn;
    }

    /*
    public CalendarEvent[] getEvents() throws ExchangeException {

        java.util.ArrayList<CalendarEvent> events = new java.util.ArrayList<CalendarEvent>();

        int offset = 0;
        int maxRecords = 25;
        while(true){

            CalendarEvent[] arr = getEvents(offset, maxRecords);
            for (int i=0; i<arr.length; i++){
                events.add(arr[i]);
            }
            if (arr.length<maxRecords) break;
            else offset+=maxRecords;
        }

        return events.toArray(new CalendarEvent[events.size()]);
    }
    */


  //**************************************************************************
  //** getEvents
  //**************************************************************************
  /** Returns an array of CalendarEvents for a given range.
   *  @param limit Maximum number of items to return.
   *  @param offset Item offset. 0 implies no offset.
   */
    public CalendarEvent[] getEvents(int offset, int limit) throws ExchangeException {
        java.util.ArrayList<CalendarEvent> events = new java.util.ArrayList<CalendarEvent>();
        org.w3c.dom.Document xml = getItems(offset, limit, props, null, null);
        org.w3c.dom.Node[] nodes = javaxt.xml.DOM.getElementsByTagName("CalendarItem", xml);

        for (org.w3c.dom.Node node : nodes){
            events.add(new CalendarEvent(node, conn));
        }
        return events.toArray(new CalendarEvent[events.size()]);
    }


  //**************************************************************************
  //** getEvents
  //**************************************************************************
  /** Returns an array of CalendarEvents for a given day.
   */
    public CalendarEvent[] getEvents(javaxt.utils.Date date) throws ExchangeException {
        return getEvents(date.getDate());
    }


  //**************************************************************************
  //** getEvents
  //**************************************************************************
  /** Returns an array of CalendarEvents for a given day.
   */
    public CalendarEvent[] getEvents(java.util.Date date) throws ExchangeException {
        try{
            javaxt.utils.Date startDate = new javaxt.utils.Date(date);
            startDate = new javaxt.utils.Date(startDate.toString("yyyy-MM-dd"));

            javaxt.utils.Date nextDay = new javaxt.utils.Date(date);
            nextDay.add(1, "day");
            nextDay = new javaxt.utils.Date(nextDay.toString("yyyy-MM-dd"));


            return getEvents(startDate, nextDay);
        }
        catch(java.text.ParseException e){
          //Should never happen!!
            return null;
        }        
    }


  //**************************************************************************
  //** getEvents
  //**************************************************************************
  /** Returns an array of CalendarEvents for a given date range.
   */
    public CalendarEvent[] getEvents(java.util.Date start, java.util.Date end) throws ExchangeException {
        return getEvents(new javaxt.utils.Date(start), new javaxt.utils.Date(end));
    }


  //**************************************************************************
  //** getEvents
  //**************************************************************************
  /** Returns an array of CalendarEvents for a given date range.
   */
    public CalendarEvent[] getEvents(javaxt.utils.Date start, javaxt.utils.Date end) throws ExchangeException {

        String StartDate = FolderItem.formatDate(start);
        String EndDate = FolderItem.formatDate(end);

        java.util.ArrayList<CalendarEvent> events = new java.util.ArrayList<CalendarEvent>();
        org.w3c.dom.Document xml = getItems("<m:CalendarView StartDate=\"" + StartDate + "\" EndDate=\"" + EndDate + "\"/>", props, null, null);
        org.w3c.dom.Node[] nodes = javaxt.xml.DOM.getElementsByTagName("CalendarItem", xml);

        for (org.w3c.dom.Node node : nodes){
            CalendarEvent event = new CalendarEvent(node, conn);
            if (event.isAllDayEvent() && event.getStartTime().compareTo(start, "days")==-1){
                
            }
            else{
                events.add(new CalendarEvent(node, conn));
            }
        }



        return events.toArray(new CalendarEvent[events.size()]);
    }
    

    
/*
    public void sendSharingRequest(Mailbox recipient, Mailbox sender, Connection conn) throws ExchangeException {
        
        if (true) throw new ExchangeException("not implemented");
        
      
        javaxt.exchange.Email email = new javaxt.exchange.Email();
        email.setSubject("I'd like to share my calendar with you");
        email.setBody("<div style=\"color:blue;\"><span>Do you see this in blue?</div>", "HTML");
        email.addRecipient("To", recipient);
        email.setMessageClass("IPM.Sharing"); //"PidTagMessageClass", "IPM.Sharing"
        //email.setMessageType("Sharing"); //"PidNameContentClass", "Sharing"
        
        
      //Create attachment
        StringBuffer str = new StringBuffer();
        str.append("<?xml version=\"1.0\"?>");
        str.append("<SharingMessage xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
        str.append("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ");
        str.append("xmlns=\"http://schemas.microsoft.com/sharing/2008\">");
        str.append("<DataType>calendar</DataType>");
        str.append("<Initiator>");
        str.append("<Name>" + sender.getName() + "</Name>");
        str.append("<SmtpAddress>" + sender.getEmailAddress() + "</SmtpAddress>");
//str.append("<EntryId>" + sender.getEntryID() + "</EntryId>");
        str.append("</Initiator>");
        str.append("<Invitation>");
        str.append("<Providers>");
        str.append("<Provider Type=\"ms-exchange-internal\" TargetRecipients=\"" + recipient.getEmailAddress() + "\">");
        str.append("<FolderId xmlns=\"http://schemas.microsoft.com/exchange/sharing/2008\">");
        str.append(this.getID());
        str.append("</FolderId>");
        str.append("<MailboxId xmlns=\"http://schemas.microsoft.com/exchange/sharing/2008\">");
        str.append(sender.getID());
        str.append("</MailboxId>");
        str.append("</Provider>");
        str.append("</Providers>");
        str.append("</Invitation>");
        str.append("</SharingMessage>");
        //email.addAttachment(str.toString());
        
        
        
        java.util.HashMap<String, String> headers = new java.util.HashMap<String, String>();

        

//        X-MS-Exchange-Organization-AuthAs: Internal 
//        X-MS-Exchange-Organization-AuthMechanism: 04 
//        X-MS-Exchange-Organization-AuthSource: exchange2010.example.com 
//        X-MS-Has-Attach: yes 
//        X-MS-Exchange-Organization-SCL: -1 
//        X-MS-TNEF-Correlator: 
//        x-sharing-capabilities: 402B0 
//        x-sharing-flavor: 310 
//        x-sharing-provider-guid: AEF0060000000000C000000000000046 
//        x-sharing-provider-name: Microsoft Exchange 
//        x-sharing-provider-url: http://www.microsoft.com/exchange/ 
//        x-sharing-remote-path: 
//        x-sharing-remote-name: =?iso-8859-1?Q?Jane=B4s_her_share_calendar?= 
//        x-sharing-remote-uid: 00000000BC5AB69D4370454FB480A15DB2A7E93C0100DCB29F06B087BB439B542470E7A5D6E300002DAFEAEA0000 
//        x-sharing-remote-store-uid: 0000000038A1BB1005E5101AA1BB08002B2A56C20000454D534D44422E444C4C00000000000000001B55FA20AA6611CD9BC800AA002FC45A0C00000045584348414E474532303130002F6F3D4669727374204F7267616E697A6174696F6E2F6F753D45786368616E67652041646D696E6973747261746976652047726F7570202846594449424F484632335350444C54292F636E3D526563697069656E74732F636E3D4A616E6520446F6534633900 
//        x-sharing-remote-type: IPF.Appointment        
            
        

        // Section 2.2.2
        headers.put("x-sharing-capabilities", "40290"); //Test representation of SharingCapabilities value 
        headers.put("x-sharing-flavor", "20310"); //Text representation of SharingFlavor value [MS-OXSHARE] 2.2.2.6 
        
        

        headers.put("x-sharing-local-type", "IPF.Appointment"); //MUST be set to same value as PidLidSharingLocalType 
        headers.put("x-sharing-provider-guid", "AEF0060000000000C000000000000046"); //Constant Required Value [MS-OXSHARE] 2.2.2.13 
        headers.put("x-sharing-provider-name", "Microsoft Exchange"); //Constant Required Value [MS-OXSHARE] 2.2.2.15] 
        headers.put("x-sharing-provider-url", "HTTP://www.microsoft.com/exchange"); //Constant Required Value [MS-OXSHARE] 2.2.2.17 

        // Section 2.2.3
        headers.put("x-sharing-remote-name", "Calendar"); //MUST be set to same value as PidLidSharingRemoteName 
        headers.put("x-sharing-remote-store-uid", sender.getID()); //MUST be set to same value as PidLidSharingRemoteStoreUid 
        headers.put("x-sharing-remote-type", "IPF.Appointment"); //Constant Required Value [MS-OXSHARE] 2.2.3.6 
        headers.put("x-sharing-remote-uid", this.getID()); //Must be set to same value as PidLidSharingRemoteUid 



       
       
       String action = "SendOnly";
       
      //Send the message and create a copy in the "sentitems" folder
        StringBuffer msg = new StringBuffer();
        msg.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        msg.append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:t=\"http://schemas.microsoft.com/exchange/services/2006/types\" xmlns:m=\"http://schemas.microsoft.com/exchange/services/2006/messages\">");
        msg.append("<soap:Body>");
        msg.append("<m:CreateItem MessageDisposition=\"" + action + "\">");

        
        
        msg.append("<m:SavedItemFolderId>");

            String folderName = "drafts";
            if (action.equals("SendOnly") || action.equals("SendAndSaveCopy")) folderName = "sentitems";
            msg.append("<t:DistinguishedFolderId Id=\"" + folderName + "\" />");
        
        msg.append("</m:SavedItemFolderId>");
        msg.append("<m:Items>");
        
        


        String messageType = "Message";
        
        msg.append("<t:" + messageType + ">");
        msg.append("<t:ItemClass>" + email.getMessageClass() + "</t:ItemClass>"); //<--New for sharing requests
        msg.append("<t:Subject>" + email.getSubject() + "</t:Subject>");
        msg.append("<t:Sensitivity>" + email.getSensitivity() + "</t:Sensitivity>");

        
      //Set body
        if (email.getBody()!=null){
            msg.append("<t:Body BodyType=\"" + email.getBodyType() + "\">");
            //msg.append(wrap(body));
            msg.append("</t:Body>");
        };


        msg.append("<t:Importance>" + email.getImportance() + "</t:Importance>");


        msg.append("<t:ToRecipients>");
        msg.append(recipient.toXML("t"));
        msg.append("</t:ToRecipients>");


        msg.append("</t:" + messageType + ">");


        
        msg.append("</m:Items>");
        msg.append("</m:CreateItem>");
        msg.append("</soap:Body>");
        msg.append("</soap:Envelope>");        
        
        conn.execute(msg.toString(), headers);
        
    }
*/
}