/// <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); }
/// <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); }
/// <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; } } } }