예제 #1
0
        public void Delete()
        {
            TestObjClass obj = ctx.GetQuery <TestObjClass>().First();

            Assert.That(obj.ObjectState, Is.EqualTo(DataObjectState.Unmodified));
            ctx.Delete(obj);
            Assert.That(obj.ObjectState, Is.EqualTo(DataObjectState.Deleted));
        }
예제 #2
0
 /// <summary>
 /// Deletes all remaining test objects.
 /// </summary>
 /// <param name="ctx">this context is used to delete the objects</param>
 public static void DeleteData(IZetboxContext ctx)
 {
     ctx.GetQuery <Kunde>().ForEach(obj => ctx.Delete(obj));
     ctx.GetQuery <Auftrag>().ForEach(obj => ctx.Delete(obj));
     ctx.GetQuery <Task>().ForEach(obj => ctx.Delete(obj));
     ctx.GetQuery <Projekt>().ForEach(obj => { ctx.Delete(obj); });
     ctx.GetQuery <Mitarbeiter>().ForEach(obj => { ctx.Delete(obj); });
 }
예제 #3
0
 private void DeleteObjects()
 {
     using (IZetboxContext ctx = GetContext())
     {
         // TODO: remove obj.Mitarbeiter.Clear() after fixing Case 1369 and marking the Mitarbeiter RelationEnd properly
         ctx.GetQuery <Projekt>().ForEach(obj => { obj.Mitarbeiter.Clear(); ctx.Delete(obj); });
         ctx.GetQuery <Task>().ForEach(obj => ctx.Delete(obj));
         ctx.SubmitChanges();
     }
 }
예제 #4
0
        public void should_remove_n_m()
        {
            ctx.Delete(a1);
            ctx.Delete(b1);
            ctx.Delete(b2);

            Assert.That(a1.ObjectState, Is.EqualTo(DataObjectState.Deleted));
            Assert.That(b1.ObjectState, Is.EqualTo(DataObjectState.Deleted));
            Assert.That(b2.ObjectState, Is.EqualTo(DataObjectState.Deleted));

            ctx.SubmitChanges();
        }
예제 #5
0
        public void when_deleting_items()
        {
            aSide1.BSide.Add(bSide1);
            SubmitAndReload();

            // TODO: remove this after case 2115 is fixed
            aSide1.BSide.Clear();

            ctx.Delete(aSide1);
            ctx.Delete(bSide1);

            ctx.SubmitChanges();
        }
예제 #6
0
        public void Clear()
        {
            var entries = collection.ToList();

            foreach (var e in entries)
            {
                ctx.Delete(e);
                OnEntryRemoving(e);
            }
            collection.Clear();
            foreach (var e in entries)
            {
                OnEntryRemoved(e);
            }
        }
예제 #7
0
 private static void MakeInternal(IZetboxContext ctx, ImportedFile obj, File doc)
 {
     // Clone blob, so it could be deleted
     doc.Blob = ctx.Find <Blob>(ctx.CreateBlob(ctx.GetFileInfo(obj.Blob.ID), obj.Blob.MimeType));
     doc.Name = obj.Name;
     ctx.Delete(obj);
 }
예제 #8
0
 private static void MakeInternal(IZetboxContext ctx, ImportedFile obj, File doc)
 {
     // Clone blob, so it could be deleted
     doc.Blob = ctx.Find<Blob>(ctx.CreateBlob(ctx.GetFileInfo(obj.Blob.ID), obj.Blob.MimeType));
     doc.Name = obj.Name;
     ctx.Delete(obj);
 }
예제 #9
0
        public void should_delete_all_objects_same_ctx()
        {
            ctx.Delete(one);
            ctx.Delete(n1);
            ctx.Delete(n2);

            Assert.That(one.ObjectState, Is.EqualTo(DataObjectState.Deleted));
            Assert.That(n1.ObjectState, Is.EqualTo(DataObjectState.Deleted));
            Assert.That(n2.ObjectState, Is.EqualTo(DataObjectState.Deleted));

            ctx.SubmitChanges();
            Assert.That(ctx.AttachedObjects, Is.Empty);
        }
예제 #10
0
 protected virtual void DeleteTestData()
 {
     using (IZetboxContext ctx = GetContext())
     {
         ctx.GetQuery <TestCustomObject>().ForEach(obj => ctx.Delete(obj));
         ctx.SubmitChanges();
     }
 }
예제 #11
0
 public override void TearDown()
 {
     ctx = GetContext();
     var tdObj = ctx.GetQuery<TestObjClass>().Where(a => a.ID == originalId);
     foreach (var o in tdObj.ToList())
     {
         ctx.Delete(o);
     }
     base.TearDown();
 }
예제 #12
0
 protected virtual void DeleteTestData()
 {
     using (IZetboxContext ctx = GetContext())
     {
         ctx.GetQuery <at.dasz.DocumentManagement.Document>().ForEach(obj => obj.Revisions.Clear());
         ctx.GetQuery <at.dasz.DocumentManagement.File>().ForEach(obj => ctx.Delete(obj));
         // Can't delete all blobs - icons are using them
         // ctx.GetQuery<Zetbox.App.Base.Blob>().ForEach(obj => ctx.Delete(obj));
         ctx.SubmitChanges();
     }
 }
예제 #13
0
        public void Delete_triggers_ObjectDeleted()
        {
            using (IZetboxContext ctx = GetContext())
            {
                bool hasDeleted = false;
                GenericEventHandler <IPersistenceObject> deletedHandler = new GenericEventHandler <IPersistenceObject>(
                    delegate(object obj, GenericEventArgs <IPersistenceObject> e)
                {
                    hasDeleted = true;
                });
                ctx.ObjectDeleted += deletedHandler;

                var result = ctx.GetQuery <TestObjClass>();
                Assert.That(result.ToList().Count, Is.GreaterThan(0));

                result.ForEach <TestObjClass>(
                    o => ctx.Delete(o));

                Assert.That(hasDeleted, Is.True);

                ctx.ObjectDeleted -= deletedHandler;
                ctx.SubmitChanges();
            }
        }
예제 #14
0
 private void DoDelete(IZetboxContext ctx, IDataObject obj)
 {
     var deactivatable = obj as IDeactivatable;
     if (deactivatable == null
         || (ctx.IsElevatedMode && ViewModelFactory.GetDecisionFromUser(CommonCommandsResources.DeleteDataObjectCommand_ElevatedDeleteDeactivated, CommonCommandsResources.DeleteDataObjectCommand_ElevatedDeleteDeactivated_Title)))
     {
         ctx.Delete(obj);
     }
     else
     {
         deactivatable.IsDeactivated = true;
     }
 }
예제 #15
0
        public static void Deploy(IZetboxContext ctx, params IPackageProvider[] providers)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException("ctx");
            }
            if (providers == null)
            {
                throw new ArgumentNullException("providers");
            }

            using (Log.InfoTraceMethodCall("Deploy"))
            {
                Log.InfoFormat("Starting Deployment from {0}", string.Join(", ", providers.Select(p => p.ToString()).ToArray()));
                try
                {
                    // TODO: Das muss ich z.Z. machen, weil die erste Query eine Entity Query ist und noch nix geladen wurde....
                    var testObj = ctx.GetQuery <Zetbox.App.Base.ObjectClass>().FirstOrDefault();
                    Debug.WriteLine(testObj != null ? testObj.ToString() : String.Empty);
                }
                catch
                {
                    // Ignore
                }

                Dictionary <Guid, IPersistenceObject> currentObjects = new Dictionary <Guid, IPersistenceObject>();
                Log.Info("Loading namespaces");
                var names = providers.SelectMany(p => LoadModuleNames(p)).Distinct().ToList();
                if (names.Count == 0)
                {
                    throw new InvalidOperationException("No modules found in import file");
                }

                foreach (var name in names)
                {
                    Log.InfoFormat("Prefetching objects for {0}", name);
                    var module = ctx.GetQuery <Zetbox.App.Base.Module>().FirstOrDefault(m => m.Name == name);
                    if (module != null)
                    {
                        foreach (var obj in PackagingHelper.GetMetaObjects(ctx, module))
                        {
                            currentObjects[((Zetbox.App.Base.IExportable)obj).ExportGuid] = obj;
                        }
                    }
                    else
                    {
                        Log.InfoFormat("Found new Module '{0}' in XML", name);
                    }
                }

                providers.ForEach(p => p.RewindData());
                Dictionary <Guid, IPersistenceObject> importedObjects = new Dictionary <Guid, IPersistenceObject>();
                Log.Info("Loading");

                foreach (var p in providers)
                {
                    var reader = p.Reader;
                    // Find Root Element
                    while (reader.Read() && reader.NodeType != XmlNodeType.Element && reader.LocalName != "ZetboxPackaging" && reader.NamespaceURI != "http://dasz.at/Zetbox")
                    {
                        ;
                    }

                    // Read content
                    while (reader.Read())
                    {
                        if (reader.NodeType != XmlNodeType.Element)
                        {
                            continue;
                        }
                        var obj = ImportElement(ctx, currentObjects, p);
                        if (obj == null)
                        {
                            throw new InvalidOperationException("Invalid import format: ImportElement returned NULL");
                        }
                        importedObjects[((IExportableInternal)obj).ExportGuid] = obj;
                    }
                }

                Log.Info("Reloading References");
                foreach (var obj in importedObjects.Values)
                {
                    obj.ReloadReferences();
                }

                var objectsToDelete = currentObjects.Where(p => !importedObjects.ContainsKey(p.Key));
                Log.InfoFormat("Deleting {0} objects marked for deletion", objectsToDelete.Count());
                foreach (var pairToDelete in objectsToDelete)
                {
                    ctx.Delete(pairToDelete.Value);
                }
                Log.Info("Deployment finished");
            }
        }
예제 #16
0
파일: Program.cs 프로젝트: daszat/zetbox
        /// <summary>
        /// Clears the destination zetbox tables. Due to FKs, ordering is required.
        /// </summary>
        private void ClearDestination(IZetboxContext ctx)
        {
            foreach (var log in ctx.GetQuery<MigrationLog>())
            {
                ctx.Delete(log);
            }
            ctx.SubmitChanges();

            // required ordering
            //executor.CleanDestination(tables["tbl_Cars"]);
            //executor.CleanDestination(tables["tbl_Customers"]);
        }
예제 #17
0
        public override void TearDown()
        {
            ctx = GetContext();
            ReloadObjects(ctx);
            ctx.Delete(one1);
            ctx.Delete(one2);
            ctx.Delete(n1);
            ctx.Delete(n2);
            ctx.SubmitChanges();

            base.TearDown();
        }
예제 #18
0
        public override void SetUp()
        {
            base.SetUp();
            iftFactory = scope.Resolve <InterfaceType.Factory>();

            using (IZetboxContext ctx = GetContext())
            {
                ctx.GetQuery <TestObjClass>().ForEach(obj => { obj.ObjectProp = null; ctx.Delete(obj); });
                ProjectDataFixture.DeleteData(ctx);
                ctx.SubmitChanges();
            }

            using (IZetboxContext ctx = GetContext())
            {
                var list = new List <TestObjClass>();
                while (list.Count < 2)
                {
                    var newObj = ctx.Create <TestObjClass>();
                    newObj.ObjectProp = null; // kunde;
                    newObj.StringProp = "blah" + list.Count;
                    list.Add(newObj);
                }

                ctx.SubmitChanges();

                firstId              = list[0].ID;
                list[0].StringProp   = "First";
                list[0].TestEnumProp = TestEnum.First;

                secondId             = list[1].ID;
                list[1].StringProp   = "Second";
                list[1].TestEnumProp = TestEnum.Second;

                ctx.SubmitChanges();
            }
        }
예제 #19
0
 /// <summary>
 /// Deletes all remaining test objects.
 /// </summary>
 /// <param name="ctx">this context is used to delete the objects</param>
 public static void DeleteData(IZetboxContext ctx)
 {
     ctx.GetQuery<Kunde>().ForEach(obj => ctx.Delete(obj));
     ctx.GetQuery<Auftrag>().ForEach(obj => ctx.Delete(obj));
     ctx.GetQuery<Task>().ForEach(obj => ctx.Delete(obj));
     ctx.GetQuery<Projekt>().ForEach(obj => { ctx.Delete(obj); });
     ctx.GetQuery<Mitarbeiter>().ForEach(obj => { ctx.Delete(obj); });
 }
예제 #20
0
        public override void SetUp()
        {
            base.SetUp();

            using (IZetboxContext ctx = GetContext())
            {
                ctx.GetQuery <TestObjClass>().ForEach(obj => { obj.ObjectProp = null; ctx.Delete(obj); });
                ProjectDataFixture.DeleteData(ctx);
                ctx.SubmitChanges();
            }

            using (IZetboxContext ctx = GetContext())
            {
                ProjectDataFixture.CreateTestData(ctx);
                var newObj = ctx.Create <TestObjClass>();
                newObj.StringProp   = "The one and only";
                newObj.TestEnumProp = TestEnum.First;
                ctx.SubmitChanges();
            }
        }
예제 #21
0
 public override void TearDown()
 {
     ctx = GetContext();
     var tdObj = ctx.GetQuery<Assembly>().Where(a => a.ID == originalId);
     foreach (var o in tdObj.ToList())
     {
         ctx.Delete(o);
     }
     ctx.SubmitChanges();
     base.TearDown();
 }
예제 #22
0
        internal static void ApplyObjectChanges(IZetboxContext ctx, IEnumerable <ObjectNotificationRequest> notificationRequests, List <BaseServerPersistenceObject> objects, Dictionary <IPersistenceObject, IPersistenceObject> entityObjects)
        {
            Logging.Log.InfoFormat(
                "ApplyObjectChanges for {0} objects and {1} notification requests called.",
                objects.Count(),
                notificationRequests.Sum(req => req.IDs.Length));

            // First of all, attach new Objects
            foreach (var obj in objects.Where(o => o.ClientObjectState == DataObjectState.New))
            {
                ctx.Internals().AttachAsNew(obj);
                entityObjects[obj] = obj;
            }

            var concurrencyFailed = new List <IDataObject>();

            // then apply changes
            foreach (var obj in objects.Where(o => o.ClientObjectState == DataObjectState.Modified))
            {
                var ctxObj = ctx.FindPersistenceObject(ctx.GetInterfaceType(obj), obj.ID);
                ((BasePersistenceObject)ctxObj).RecordNotifications();
                // optimistic concurrency
                if (obj is Zetbox.App.Base.IChangedBy)
                {
                    var orig = (Zetbox.App.Base.IChangedBy)ctxObj;
                    var send = (Zetbox.App.Base.IChangedBy)obj;
                    if (Math.Abs((orig.ChangedOn - send.ChangedOn).Ticks) > 15) // postgres is only accurate down to µs (1/1000th ms), but DateTime is accurate down to 1/10th µs. Rounding errors cause invalid concurrency failures.
                    {
                        concurrencyFailed.Add((IDataObject)obj);
                    }
                }
                ctxObj.ApplyChangesFrom(obj);
                entityObjects[ctxObj] = ctxObj;
            }

            if (concurrencyFailed.Count > 0)
            {
                throw new ConcurrencyException(concurrencyFailed);
            }

            // then update references
            foreach (var obj in objects.Where(o => o.ClientObjectState != DataObjectState.Deleted))
            {
                var ctxObj = ctx.FindPersistenceObject(ctx.GetInterfaceType(obj), obj.ID);
                ((BasePersistenceObject)ctxObj).RecordNotifications();
                ctxObj.ReloadReferences();
                entityObjects[ctxObj] = ctxObj;
            }

            // then delete objects
            foreach (var obj in objects.Where(o => o.ClientObjectState == DataObjectState.Deleted))
            {
                var ctxObj = ctx.FindPersistenceObject(ctx.GetInterfaceType(obj), obj.ID);
                ctx.Delete(ctxObj);
            }

            // Playback notifications
            foreach (var obj in entityObjects.Keys.Cast <BasePersistenceObject>())
            {
                obj.PlaybackNotifications();
            }
        }
예제 #23
0
        public static void Deploy(IZetboxContext ctx, params IPackageProvider[] providers)
        {
            if (ctx == null) { throw new ArgumentNullException("ctx"); }
            if (providers == null) { throw new ArgumentNullException("providers"); }

            using (Log.InfoTraceMethodCall("Deploy"))
            {
                Log.InfoFormat("Starting Deployment from {0}", string.Join(", ", providers.Select(p => p.ToString()).ToArray()));
                try
                {
                    // TODO: Das muss ich z.Z. machen, weil die erste Query eine Entity Query ist und noch nix geladen wurde....
                    var testObj = ctx.GetQuery<Zetbox.App.Base.ObjectClass>().FirstOrDefault();
                    Debug.WriteLine(testObj != null ? testObj.ToString() : String.Empty);
                }
                catch
                {
                    // Ignore
                }

                Dictionary<Guid, IPersistenceObject> currentObjects = new Dictionary<Guid, IPersistenceObject>();
                Log.Info("Loading namespaces");
                var names = providers.SelectMany(p => LoadModuleNames(p)).Distinct().ToList();
                if (names.Count == 0) throw new InvalidOperationException("No modules found in import file");

                foreach (var name in names)
                {
                    Log.InfoFormat("Prefetching objects for {0}", name);
                    var module = ctx.GetQuery<Zetbox.App.Base.Module>().FirstOrDefault(m => m.Name == name);
                    if (module != null)
                    {
                        foreach (var obj in PackagingHelper.GetMetaObjects(ctx, module))
                        {
                            currentObjects[((Zetbox.App.Base.IExportable)obj).ExportGuid] = obj;
                        }
                    }
                    else
                    {
                        Log.InfoFormat("Found new Module '{0}' in XML", name);
                    }
                }

                providers.ForEach(p => p.RewindData());
                Dictionary<Guid, IPersistenceObject> importedObjects = new Dictionary<Guid, IPersistenceObject>();
                Log.Info("Loading");

                foreach (var p in providers)
                {
                    var reader = p.Reader;
                    // Find Root Element
                    while (reader.Read() && reader.NodeType != XmlNodeType.Element && reader.LocalName != "ZetboxPackaging" && reader.NamespaceURI != "http://dasz.at/Zetbox") ;

                    // Read content
                    while (reader.Read())
                    {
                        if (reader.NodeType != XmlNodeType.Element) continue;
                        var obj = ImportElement(ctx, currentObjects, p);
                        if (obj == null) throw new InvalidOperationException("Invalid import format: ImportElement returned NULL");
                        importedObjects[((IExportableInternal)obj).ExportGuid] = obj;
                    }
                }

                Log.Info("Reloading References");
                foreach (var obj in importedObjects.Values)
                {
                    obj.ReloadReferences();
                }

                var objectsToDelete = currentObjects.Where(p => !importedObjects.ContainsKey(p.Key));
                Log.InfoFormat("Deleting {0} objects marked for deletion", objectsToDelete.Count());
                foreach (var pairToDelete in objectsToDelete)
                {
                    ctx.Delete(pairToDelete.Value);
                }
                Log.Info("Deployment finished");
            }
        }