protected ListDictionary CreateScheduleEventParam(ScheduleEvent scheduleEvent, bool modify)
        {
            if (scheduleEvent.EventType != ScheduleEventType.Normal && scheduleEvent.EventType != ScheduleEventType.Banner)
            {
                return(null);
            }
            if (scheduleEvent.MemberCount == 0)
            {
                return(null);
            }

            ListDictionary schedule_event = new ListDictionary();

            schedule_event["xmlns"]       = "";
            schedule_event["id"]          = modify ? scheduleEvent.ID : "dummy";
            schedule_event["event_type"]  = scheduleEvent.EventType.ToString().ToLowerInvariant();
            schedule_event["version"]     = modify ? scheduleEvent.Version : "dummy";
            schedule_event["public_type"] = scheduleEvent.PublicType.ToString().ToLowerInvariant();
            schedule_event["plan"]        = scheduleEvent.Plan;
            schedule_event["detail"]      = scheduleEvent.Detail;
            schedule_event["description"] = scheduleEvent.Description;
            schedule_event["allday"]      = scheduleEvent.AllDay;
            schedule_event["start_only"]  = scheduleEvent.StartOnly;

            schedule_event["members"] = PrepareMembers(scheduleEvent);

            schedule_event["when"] = CreateWhen(scheduleEvent);

            return(schedule_event);
        }
        protected ListDictionary CreateWhen(ScheduleEvent scheduleEvent)
        {
            ListDictionary when = new ListDictionary();

            if (scheduleEvent.AllDay || scheduleEvent.EventType == ScheduleEventType.Banner)
            {
                ListDictionary date = new ListDictionary();
                date["start"] = Utility.FormatXSDDate(scheduleEvent.Start);
                if (!scheduleEvent.StartOnly)
                {
                    date["end"] = Utility.FormatXSDDate(scheduleEvent.End);
                }
                when["date"] = date;
            }
            else
            {
                ListDictionary datetime = new ListDictionary();
                datetime["start"] = Utility.FormatISO8601(scheduleEvent.Start.ToUniversalTime());
                if (!scheduleEvent.StartOnly)
                {
                    datetime["end"] = Utility.FormatISO8601(scheduleEvent.End.ToUniversalTime());
                }
                when["datetime"] = datetime;
            }
            return(when);
        }
        public ScheduleEventCollection AddEvents(ScheduleEventCollection scheduleEvents)
        {
            ListDictionary parameters          = new ListDictionary();
            ArrayList      schedule_event_list = new ArrayList();

            foreach (ScheduleEvent scheduleEvent in scheduleEvents)
            {
                ListDictionary schedule_event = CreateScheduleEventParam(scheduleEvent, false);
                if (schedule_event == null)
                {
                    continue;
                }
                schedule_event_list.Add(schedule_event);
            }
            parameters["schedule_event"] = schedule_event_list;

            XmlElement  result        = this.App.Exec("Schedule", "ScheduleAddEvents", parameters);
            XmlNodeList eventNodeList = result.SelectNodes("//schedule_event");

            ScheduleEventCollection eventList = new ScheduleEventCollection();

            foreach (XmlNode eventNode in eventNodeList)
            {
                try
                {
                    ScheduleEvent scheduleEvent = new ScheduleEvent(eventNode);
                    eventList.Add(scheduleEvent);
                }
                catch (Exception)
                {
                }
            }

            return(eventList);
        }
        public ScheduleEventCollection GetEventsByTarget(DateTime start, DateTime end, TargetType targetType, string targetId)
        {
            if (string.IsNullOrEmpty(targetId))
            {
                throw new CybozuException("Target ID is not specified.");
            }

            ListDictionary parameters = new ListDictionary();

            parameters["start"] = Utility.FormatXSDDateTime(start);
            parameters["end"]   = Utility.FormatXSDDateTime(end);
            ListDictionary idParam = new ListDictionary();

            idParam["id"] = targetId;
            parameters[targetType.ToString().ToLowerInvariant()] = idParam;

            XmlElement  resultNode    = this.App.Query("Schedule", "ScheduleGetEventsByTarget", parameters);
            XmlNodeList eventNodeList = resultNode.SelectNodes("//schedule_event");

            ScheduleEventCollection eventList = new ScheduleEventCollection();

            foreach (XmlNode eventNode in eventNodeList)
            {
                try
                {
                    ScheduleEvent scheduleEvent = new ScheduleEvent(eventNode);
                    eventList.Add(scheduleEvent);
                }
                catch (Exception)
                {
                }
            }

            return(eventList);
        }
        public ScheduleEvent AddEvent(ScheduleEvent scheduleEvent)
        {
            if (scheduleEvent.EventType != ScheduleEventType.Normal && scheduleEvent.EventType != ScheduleEventType.Banner)
            {
                throw new CybozuException("Cannot add the event of the specified type.");
            }

            if (scheduleEvent.MemberCount == 0)
            {
                throw new CybozuException("No participants.");
            }

            ListDictionary parameters = new ListDictionary();

            parameters["schedule_event"] = CreateScheduleEventParam(scheduleEvent, false);

            XmlElement result = this.App.Exec("Schedule", "ScheduleAddEvents", parameters);

            return(new ScheduleEvent(result.SelectSingleNode("//schedule_event")));
        }
        protected ListDictionary PrepareMembers(ScheduleEvent scheduleEvent)
        {
            ArrayList memberList = new ArrayList();

            foreach (string userId in scheduleEvent.UserIds)
            {
                ListDictionary user = new ListDictionary();
                user["id"] = userId;
                ListDictionary member = new ListDictionary();
                member["user"] = user;
                memberList.Add(member);
            }

            foreach (string orgId in scheduleEvent.OrganizaitonIds)
            {
                ListDictionary org = new ListDictionary();
                org["id"] = orgId;
                ListDictionary member = new ListDictionary();
                member["organization"] = org;
                memberList.Add(member);
            }

            foreach (string facilityId in scheduleEvent.FacilityIds)
            {
                ListDictionary facility = new ListDictionary();
                facility["id"] = facilityId;
                ListDictionary member = new ListDictionary();
                member["facility"] = facility;
                memberList.Add(member);
            }

            ListDictionary members = new ListDictionary();

            members["member"] = memberList;
            return(members);
        }
        public void ModifyEvent(ScheduleEvent scheduleEvent)
        {
            if (scheduleEvent.EventType != ScheduleEventType.Normal && scheduleEvent.EventType != ScheduleEventType.Banner)
            {
                throw new CybozuException("Cannot modify the event of the specified type.");
            }

            if (scheduleEvent.MemberCount == 0)
            {
                throw new CybozuException("No participants.");
            }

            ListDictionary parameters     = new ListDictionary();
            ListDictionary schedule_event = new ListDictionary();

            parameters["schedule_event"] = CreateScheduleEventParam(scheduleEvent, true);

            XmlElement result = this.App.Exec("Schedule", "ScheduleModifyEvents", parameters);

            if (result.SelectSingleNode("//schedule_event") == null)
            {
                throw new CybozuException("Fail to modify the specified event.");
            }
        }