예제 #1
0
        /// <summary>
        /// Получает объект типа McEvent из дерева связанных EntityObject (EntityObjectHierarchy)
        /// </summary>
        /// <param name="entityHierarchy">The entity hierarchy.</param>
        /// <returns></returns>
        public static McEvent GetMcEventFromEntityObjectHierarchy(EntityObjectHierarchy entityHierarchy)
        {
            McEvent             retVal     = new McEvent();
            McSerializerFactory factory    = new McSerializerFactory();
            IEntitySerializable serializer = factory.Create <IEntitySerializable>(retVal);

            retVal = (McEvent)serializer.Deserialize <CalendarEventEntity>(entityHierarchy.InnerEntity);
            foreach (EntityObjectHierarchy child in entityHierarchy.Childrens)
            {
                if (child.InnerEntity.MetaClassName == CalendarEventRecurrenceEntity.ClassName)
                {
                    McRecurrencePattern rPattern = new McRecurrencePattern();
                    retVal.AddChild(rPattern);
                    serializer = factory.Create <IEntitySerializable>(rPattern);
                    if (serializer != null)
                    {
                        rPattern     = (McRecurrencePattern)serializer.Deserialize <CalendarEventRecurrenceEntity>(child.InnerEntity);
                        retVal.RRule = new RecurrencePattern[] { rPattern };
                    }
                }
                else if (child.InnerEntity.MetaClassName == CalendarEventResourceEntity.ClassName)
                {
                    McCalAddress resource = new McCalAddress();
                    retVal.AddChild(resource);
                    serializer = factory.Create <IEntitySerializable>(resource);
                    if (serializer != null)
                    {
                        resource = (McCalAddress)serializer.Deserialize <CalendarEventResourceEntity>(child.InnerEntity);
                        retVal.AddChild(resource);
                        if (((CalendarEventResourceEntity)child.InnerEntity).ResourceEventOrganizator)
                        {
                            retVal.Organizer = resource;
                        }
                        else
                        {
                            List <Cal_Address> oldVals = new List <Cal_Address>();
                            if (retVal.Attendee != null)
                            {
                                oldVals.AddRange(retVal.Attendee);
                            }
                            oldVals.Add(resource);
                            retVal.Attendee = oldVals.ToArray();
                        }
                    }
                }
                else if (child.InnerEntity.MetaClassName == CalendarEventEntity.ClassName)
                {
                    McEvent exception = GetMcEventFromEntityObjectHierarchy(child);
                    if (exception != null)
                    {
                        retVal.AddReccurenceException(exception);
                    }
                }
            }

            return(retVal);
        }
예제 #2
0
        /// <summary>
        /// Получает дерево связвнных entityObject из объектной модели эвента
        /// <remarks>
        /// Структура EntityObjectHierarchy События
        ///		<event>
        ///			<recurrencePattern>
        ///			</recurrencePattern>
        ///			<resource>
        ///			</resource>
        ///			<exception>
        ///				<resource>
        ///				</resource>
        ///			</exception>
        ///		</event>
        /// </remarks>
        /// </summary>
        /// <returns></returns>
        public EntityObjectHierarchy GetEntityObjectHierarchy()
        {
            EntityObjectHierarchy retVal     = null;
            McSerializerFactory   factory    = new McSerializerFactory();
            IEntitySerializable   serializer = factory.Create <IEntitySerializable>(this);

            retVal = serializer.Serialize <CalendarEventEntity>();
            if (RRule != null)
            {
                foreach (RecurrencePattern rpattern in RRule)
                {
                    serializer = factory.Create <IEntitySerializable>(rpattern);
                    retVal.Childrens.Add(serializer.Serialize <CalendarEventRecurrenceEntity>());
                }
            }

            if (Organizer != null)
            {
                serializer = factory.Create <IEntitySerializable>(Organizer);
                if (serializer != null)
                {
                    retVal.Childrens.Add(serializer.Serialize <CalendarEventResourceEntity>());
                }
            }
            if (Attendee != null)
            {
                foreach (Cal_Address attendee in Attendee)
                {
                    serializer = factory.Create <IEntitySerializable>(attendee);
                    if (serializer != null)
                    {
                        retVal.Childrens.Add(serializer.Serialize <CalendarEventResourceEntity>());
                    }
                }
            }
            //exceptions
            if (RecurrenceException != null)
            {
                foreach (McEvent exception in RecurrenceException)
                {
                    retVal.Childrens.Add(exception.GetEntityObjectHierarchy());
                }
            }

            return(retVal);
        }
예제 #3
0
        /// <summary>
        /// Implémente les interactions du presse-papier avec model de données
        /// </summary>
        /// <param name="thisProc">Pointeur sur l'instance du controler recevant les événements</param>
        /// <param name="dataModel">Pointeur sur le model de données concerné</param>
        /// <param name="from">Paramètre passé par la méthode ProcessEvent</param>
        /// <param name="_this">Paramètre passé par la méthode ProcessEvent</param>
        /// <param name="e">Paramètre passé par la méthode ProcessEvent</param>
        public static void ProcessCopyPasteEvents(IEventProcess app, IEventProcess thisProc, IModel dataModel, object from, object _this, IEvent e)
        {
            //
            // Copy/Paste
            // Copie/Colle l'entité dans le presse-papier
            //
            if (e is EntityCopyPasteEvent)
            {
                EntityCopyPasteEvent ev = e as EntityCopyPasteEvent;
                // Copier
                if (ev.Type == EntityCopyPasteEventType.Copy && ev.IsEmpty() == false)
                {
                    XmlDocument doc = new XmlDocument();
                    doc.AppendChild(doc.CreateElement("root"));
                    foreach (IEntity entity in ev.Entities)
                    {
                        if (entity is IEntitySerializable)
                        {
                            IEntitySerializable serial = entity as IEntitySerializable;
                            serial.ToXml(doc.DocumentElement);
                        }
                    }
                    //Clipboard.SetData("text/xml", doc.InnerXml);
                    Clipboard.SetText(doc.InnerXml);
                }
                // Coller
                if (ev.Type == EntityCopyPasteEventType.Paste)
                {
                    //string text = Clipboard.GetData("text/xml");
                    string text = Clipboard.GetText(); // Texte ou XML
                    if (String.IsNullOrWhiteSpace(text))
                    {
                        return;
                    }

                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(text);
                    if (doc.DocumentElement == null)
                    {
                        return;
                    }

                    XmlNode cur = doc.DocumentElement.FirstChild;
                    while (cur != null)
                    {
                        if (cur is XmlElement)
                        {
                            try
                            {
                                // Alloue une instance de l’entité
                                XmlElement           elm      = cur as XmlElement;
                                EntityPreCreateEvent evCreate = new EntityPreCreateEvent(elm.LocalName);
                                thisProc.ProcessEvent(_this, _this, evCreate);
                                IEntity entity = evCreate.Entity;
                                if (entity == null)
                                {
                                    continue;
                                }

                                // Dé-sérialise les données dans l’instance
                                entity.EntityState = EntityState.Added;

                                if (entity is IEntitySerializable)
                                {
                                    IEntitySerializable serial = entity as IEntitySerializable;
                                    serial.FromXml(elm, (aggr) =>
                                    {
                                        aggr.EntityState = EntityState.Added;
                                        if (aggr is IEntityPersistent)
                                        {
                                            (aggr as IEntityPersistent).RaiseIdentity();
                                        }
                                    });
                                }

                                // Ajoute l’objet créé dans l’événement EntityCopyPasteEventType
                                ev.AddEntity(entity);

                                // Notifie la création de l'entité
                                thisProc.ProcessEvent(_this, _this, new EntityCreateEvent(entity));
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                        }
                        cur = cur.NextSibling;
                    }
                }
            }
        }