Exemplo n.º 1
0
        public ISerializableObject CreateISerializableObject(Type type)
        {
            AttributeWorker w = AttributeWorker.GetInstance(Target);

            ISerializableObject iso = null;

            try
            {
                iso = (ISerializableObject)Activator.CreateInstance(type);
            }
            catch (InvalidCastException)
            {
                throw new SerializerException();
            }

            _objectPool.Register(iso);

            ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();

            data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());
            data.HandledItem     = iso;
            CreateHandler handler = new CreateHandler(this);
            RelationResolver <ISerializableObject> resolver = new RelationResolver <ISerializableObject>();

            resolver.Handler = handler;
            resolver.StartRelationResolving(data);

            return(iso);
        }
Exemplo n.º 2
0
        internal void Delete(ISerializableObject iso, ISerializerTransaction transaction)
        {
            if (!IsManaged(iso))
            {
                return;
            }



            AttributeWorker w = AttributeWorker.GetInstance(Target);


            ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();

            data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());
            data.HandledItem     = iso;

            DeleteHandler h = new DeleteHandler(this);
            RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();

            res.Handler = h;


            h.MODE = DeleteHandler.DOWNMODE;
            res.StartRelationResolving(data);


            _objectPool.DeleteObject(iso, _connection, transaction);

            h.MODE = DeleteHandler.UPMODE;
            res.StartRelationResolving(data);
        }
Exemplo n.º 3
0
        internal ISerializableObject Load(Type type, string table, IRestriction restriction, ISerializerTransaction transaction)
        {
            bool found    = false;
            bool multiple = false;
            bool isLoaded = false;


            DbDataReader        reader = CreateDataReader(type, table, restriction, transaction);
            ISerializableObject data   = null;

            if (reader.Read())
            {
                data  = _objectPool.RetrieveObject(type, reader, ref isLoaded);
                found = true;
            }



            if (reader.Read())
            {
                multiple = true;
            }
            reader.Close();

            if (multiple)
            {
                throw new MultipleResultException("More than one Result found for the given Restriction ...");
            }

            if (data == null)
            {
                return(null);
            }

            bool doRelationLoading = found && isLoaded;


            if (doRelationLoading)
            {
                ResolverData <ISerializableObject> rData = new ResolverData <ISerializableObject>();
                rData.HandledItem     = data;
                rData.FieldsToResolve = AttributeWorker.RetrieveAllFields(data.GetType());

                LoadHandler handler = new LoadHandler(this);
                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = handler;
                res.StartRelationResolving(rData);
            }

            return(data);
        }
Exemplo n.º 4
0
        internal T Load <T>(IRestriction restriction, int readerPosition, ISerializerTransaction transaction) where T : ISerializableObject
        {
            if (readerPosition < 0)
            {
                throw new ArgumentOutOfRangeException("The passed reader position is less than 0.");
            }


            bool found    = false;
            bool isLoaded = false;


            DbDataReader reader = CreateDataReader(typeof(T), restriction, transaction);
            T            data   = default(T);



            for (int i = 0; i <= readerPosition; i++)
            {
                if (!reader.Read())
                {
                    reader.Close();
                    throw new ArgumentOutOfRangeException("The passed reader position is too big.");
                }
            }

            data  = (T)_objectPool.RetrieveObject(typeof(T), reader, ref isLoaded);
            found = true;
            reader.Close();

            if (data == null)
            {
                return(default(T));
            }

            bool doRelationLoading = found && isLoaded;

            if (doRelationLoading)
            {
                ResolverData <ISerializableObject> rData = new ResolverData <ISerializableObject>();
                rData.HandledItem     = data;
                rData.FieldsToResolve = AttributeWorker.RetrieveAllFields(data.GetType());

                LoadHandler handler = new LoadHandler(this);
                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = handler;
                res.StartRelationResolving(rData);
            }

            return(data);
        }
Exemplo n.º 5
0
        internal void InitSyncContainer(IDictionary <Guid, SyncContainer> pooledObjects)
        {
            ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();

            ISerializableObject iso = FetchObject(_sourceSerializer, _sourceGuid);

            data.HandledItem     = iso;
            data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());//Sind alle nötig?

            DependencyRelationHandler h = new DependencyRelationHandler(this, pooledObjects);
            RelationResolver <ISerializableObject> r = new RelationResolver <ISerializableObject>();

            r.Handler = h;
            r.StartRelationResolving(data);
        }
        public void Get_Should_ReturnAllTypes()
        {
            var resolver = new RelationResolver();
            var types    = new List <Type>()
            {
                typeof(TestModel1),
                typeof(TestModel2),
                typeof(ITestInterface1)
            };
            var processedTypes  = resolver.Resolve(types);
            var duplicatedTypes = processedTypes.Select(x => x.Type).ToList().OrderBy(x => x.Name);
            var disitinctTypes  = duplicatedTypes.Distinct();

            Assert.Equal(disitinctTypes.Count(), processedTypes.Count);
            Assert.Equal(2, processedTypes.Where(x => x.ProcessingCategory == ProcessingCategory.Enum).Count());
            Assert.Equal(5, processedTypes.Where(x => x.ProcessingCategory == ProcessingCategory.Object).Count());
            Assert.Equal(2, processedTypes.Where(x => x.ProcessingCategory == ProcessingCategory.Interface).Count());
        }
Exemplo n.º 7
0
        internal void Save(ISerializableObject iso, ISerializerTransaction transaction)
        {
            AttributeWorker w = AttributeWorker.GetInstance(Target);

            if (!IsManaged(iso))
            {
//                Console.WriteLine("SERIALIZE");
                _objectPool.InsertObject(iso, _connection, transaction);

                ResolverData <ISerializableObject> rData = new ResolverData <ISerializableObject>();
                rData.HandledItem     = iso;
                rData.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());

                LoadHandler handler = new LoadHandler(this);
                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = handler;
                res.StartRelationResolving(rData);
            }
            else
            {
//                Console.WriteLine("UPDATE");
                UpdateStates state = _objectPool.UpdateObject(iso, _connection, transaction);

                if (state == UpdateStates.NO_ROWS_AFFECTED)
                {
                    throw new SerializerException("entry could not be updated ...");
                }
                else if (state == UpdateStates.PRIMARYKEY_MODIFIED)
                {
                    UpdateEventArgs args = new UpdateEventArgs(state);
                    OnUpdateEvent(args);
                }

                ResolverData <ISerializableObject> data = new ResolverData <ISerializableObject>();
                data.HandledItem     = iso;
                data.FieldsToResolve = AttributeWorker.RetrieveAllFields(iso.GetType());

                RelationResolver <ISerializableObject> res = new RelationResolver <ISerializableObject>();
                res.Handler = new UpdateHandler(this);
                res.StartRelationResolving(data);
            }
        }