// Création d'une entité public override void Create(IEntity entity) { // Valide les données IEntityValidable v = entity as IEntityValidable; if (v != null) { v.Validate(); } // base base.Create(entity); }
//----------------------------------------------------------------------------------------- // Evénements //----------------------------------------------------------------------------------------- #region IEventProcess // Traite les événements public void ProcessEvent(object from, object _this, IEvent e) { // // Change // Action après le changement d'une entité // if (e is EntityChangeEvent) { EntityChangeEvent ev = e as EntityChangeEvent; // Concerne ce model ? if (ev.Model == app.appModel) { if (ev.Entity is ObjectContent) { OnPropertyChanged("ObjectContentList"); } if (ev.Entity is ParamContent) { CurParamContentList = new ObservableCollection <ParamContent>(curObjectContent.ParamContent); } if (ev.Entity is DatabaseSource) { OnPropertyChanged("CurDatabaseSource"); } } } // // Pré-Create // Préprare la création d'une nouvelle entité (avant édition des champs) // if (e is EntityPreCreateEvent) { EntityPreCreateEvent ev = e as EntityPreCreateEvent; // Alloue l'entité if (ev.Entity == null) { ev.Entity = app.appModel.CreateEntity(ev.EntityName); } // Ajoute l'instance au model app.appModel.Add(ev.Entity); // Affecte le status de création ev.Entity.EntityState = EntityState.Added; // Initialise les données par défaut if (ev.Entity is IEntityPersistent) { IEntityPersistent p = ev.Entity as IEntityPersistent; //Affecte la source de données à la nouvelle entitée p.Factory = app.appModel.project.Factory; } if (ev.Entity is ObjectContent) { ObjectContent entity = ev.Entity as ObjectContent; // Ajoute au projet en cours app.Project.AddObjectContent(entity); // Génére un identifiant unique entity.Id = Guid.NewGuid().ToString("N"); foreach (var p in entity.ParamContent) { p.Id = Guid.NewGuid().ToString("N"); } } if (ev.Entity is ParamContent) { ParamContent entity = ev.Entity as ParamContent; CurObjectContent.AddParamContent(entity); // Génére un identifiant unique entity.Id = Guid.NewGuid().ToString("N"); } if (ev.Entity is DatabaseSource) { DatabaseSource entity = ev.Entity as DatabaseSource; app.Project.AddDatabaseSource(entity); if (app.States.SelectedDatabaseSourceId == null) { app.States.SelectedDatabaseSourceId = app.Project.DatabaseSource.First().Id; } } // Actualise l'interface app.ProcessEvent(this, this, new EntityChangeEvent(e, ev.Entity, app.appModel)); } // // Create // Crée la nouvelle entité (après édition des champs) // if (e is EntityCreateEvent) { EntityCreateEvent ev = e as EntityCreateEvent; if (ev.Entity != null) { // Valide le status de création ev.Entity.EntityState = EntityState.Unmodified; // Actualise l'interface app.ProcessEvent(this, this, new EntityChangeEvent(e, ev.Entity, app.appModel)); } } // // Pré-Update // Les données de l'entité vont êtres modifiées // if (e is EntityPreUpdateEvent) { EntityPreUpdateEvent ev = e as EntityPreUpdateEvent; // si l'entité fait partie du model if (ev.Entity != null && app.appModel.Contains(ev.Entity)) { // Préviens l'application app.ProcessEvent(this, this, new EntityChangeEvent(e, ev.Entity, app.appModel)); } } // // Update // Les données de l'entité sont modifiées // if (e is EntityUpdateEvent) { EntityUpdateEvent ev = e as EntityUpdateEvent; // si l'entité fait partie du model if (ev.Entity != null && app.appModel.Contains(ev.Entity)) { // Test la validité des champs if (ev.Entity is IEntityValidable) { string error; IEntityValidable v = ev.Entity as IEntityValidable; if (!v.IsValid(out error)) { app.ProcessException(new ApplicationException(error)); return; } } // Valide le status de création ev.Entity.EntityState = EntityState.Unmodified; // Actualise l'interface app.ProcessEvent(this, this, new EntityChangeEvent(e, ev.Entity, app.appModel)); } } // // Delete // Supprime l'entité // if (e is EntityDeleteEvent) { EntityDeleteEvent ev = e as EntityDeleteEvent; // si l'entité fait partie du model if (ev.Entity != null && app.appModel.Contains(ev.Entity)) { // Supprime du model app.appModel.Remove(ev.Entity); // Actualise l'interface app.ProcessEvent(this, this, new EntityChangeEvent(e, ev.Entity, app.appModel)); } } // Implémente la gestion du copier coller EventProcess.ProcessCopyPasteEvents(app, this, app.appModel, from, _this, e); }