예제 #1
0
        // 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);
        }
예제 #2
0
        }                                                                                    //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);
        }
예제 #3
0
        // Identifiants
        public bool CompareIdentifier(IEntityPersistent e)
        {
            ParamContent b = e as ParamContent;

            if (b == null)
            {
                return(false);
            }
            return(this.Id == b.Id);
        }
예제 #4
0
파일: Project.cs 프로젝트: Ace4teaM/Syntaxi
        // 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);
        }
예제 #5
0
        // 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;
            }
        }
예제 #6
0
        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));
        }
예제 #7
0
        //-----------------------------------------------------------------------------------------
        // 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);
        }
예제 #8
0
        //-----------------------------------------------------------------------------------------
        // 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");
             *      }
             *  }
             * }*/
        }
예제 #9
0
 public IEntityPersistent GetReference(IEntityPersistent e)
 {
     return(model.GetReference(e) as IEntityPersistent);
 }