// Exécute une requete et initialise les propriétés d'une entité de référence public IEntityPersistent QueryEntity <T>(string query) where T : IEntityPersistent, new() { IEntityPersistent entity = null; OdbcDataReader reader; OdbcConnection conn = GetConnection();//nouvelle connexion pour une possible imbrication OdbcCommand cmd = new OdbcCommand(); cmd.CommandTimeout = this.CommandTimeout; cmd.CommandText = query; cmd.CommandType = CommandType.Text; cmd.Connection = conn; reader = cmd.ExecuteReader(); if (reader.Read()) { entity = new T(); entity.Factory = this; entity.PickIdentity(reader); entity = GetReference(entity); // obtient l'entité en cache entity.PickProperties(reader); } reader.Close(); return(entity); }
} //modifs des entités // Obtient l'état d'une entité public EntityState GetState(IEntityPersistent entity) { if (this.Changes.ContainsKey(entity)) { return(this.Changes[entity]); } return(EntityState.Unmodified); }
// Identifiants public bool CompareIdentifier(IEntityPersistent e) { ParamContent b = e as ParamContent; if (b == null) { return(false); } return(this.Id == b.Id); }
// Identifiants public bool CompareIdentifier(IEntityPersistent e) { Project b = e as Project; if (b == null) { return(false); } return(this.Name == b.Name && this.Version == b.Version); }
// Modifie l'état d'une entité public void SetState(IEntityPersistent entity, EntityState state) { if (state == EntityState.Unmodified) { if (this.Changes.ContainsKey(entity)) { this.Changes.Remove(entity); } return; } if (!this.Changes.ContainsKey(entity)) { this.Changes.Add(entity, state); } else { this.Changes[entity] = state; } }
public IEntity GetReference(IEntity entity) { // Recherche par instance if (entities.Values.Contains(entity)) { return(entity); } // Recherche par identifiant if (entity is IEntityPersistent) { IEntityPersistent persEntity = entity as IEntityPersistent; foreach (IEntityPersistent eref in entities.Values.OfType <IEntityPersistent>()) { if (eref.CompareIdentifier(persEntity) == true) { return(eref); } } } // Ajoute l'objet à la liste return(Add(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); }
//----------------------------------------------------------------------------------------- // Evénements //----------------------------------------------------------------------------------------- #region IEventProcess // Traite les événements public void ProcessEvent(object from, object _this, IEvent e) { // // Model Change // Après le changement du model // if (e is ModelChangeEvent) { ModelChangeEvent ev = e as ModelChangeEvent; //Actualise l'interface UpdateUI(); // Notifie les vues this.NotifyEvent(e); } // // Entity Change // Après le changement d'une entité // if (e is EntityChangeEvent) { EntityChangeEvent ev = e as EntityChangeEvent; //Actualise l'interface OnEntityChange(ev.Model, ev.Entity, ev.BaseEvent); // Notifie les vues this.NotifyEvent(e); } // // Pré-Create // Préprare la création d'une nouvelle entité (avant édition des champs) // if (e is EntityPreCreateEvent) { EntityPreCreateEvent ev = e as EntityPreCreateEvent; // Allocation if (ev.Entity == null) { ev.Entity = app.appModel.CreateEntity(ev.EntityName); } // 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 ObjectSyntax) { ObjectSyntax entity = ev.Entity as ObjectSyntax; // Ajoute au projet en cours app.Project.AddObjectSyntax(entity); } if (ev.Entity is ParamSyntax) { ParamSyntax entity = ev.Entity as ParamSyntax; // Ajoute au projet en cours app.Project.AddParamSyntax(entity); } 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 SearchParams) { SearchParams entity = ev.Entity as SearchParams; app.Project.AddSearchParams(entity); } 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; } } // Ajoute l'instance au model (notifie le controleur) app.appModel.Add(ev.Entity); } // Implémente la gestion du copier coller EventProcess.ProcessCopyPasteEvents(app, this, app.appModel, from, _this, 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"); * } * } * }*/ }
public IEntityPersistent GetReference(IEntityPersistent e) { return(model.GetReference(e) as IEntityPersistent); }