示例#1
0
 public static void Derive(this ISession session, bool throwExceptionOnError)
 {
     var derivation = new Derivation(session);
     var derivationLog = derivation.Derive();
     if (throwExceptionOnError && derivationLog.HasErrors)
     {
         throw new DerivationException(derivationLog);
     }
 }
示例#2
0
        public void Sort()
        {
            var x = new C1Builder(this.DatabaseSession).Build();
            var y = new C1Builder(this.DatabaseSession).Build();
            var z = new C1Builder(this.DatabaseSession).Build();

            x.AddDependency(y);
            y.AddDependency(z);

            var derivation = new Derivation(this.DatabaseSession);

            var sequence = new List<IObject>();
            derivation["sequence"] = sequence;

            derivation.Derive();

            Assert.AreEqual(z, sequence[0]);
            Assert.AreEqual(y, sequence[1]);
            Assert.AreEqual(x, sequence[2]);
        }
示例#3
0
        public void Conflicts()
        {
            var workspaceSession = this.CreateWorkspaceSession();

            var organisation = new OrganisationBuilder(this.DatabaseSession).WithName("Acme Corp.").Build();

            var disconnectedOrganisation = (Domain.Organisation)workspaceSession.Instantiate(organisation.Strategy.ObjectId);
            disconnectedOrganisation.Name = "Acme Ltd.";

            organisation.Name = "Acme Inc.";
            workspaceSession.DatabaseSession.Commit();

            var conflicts = workspaceSession.Conflicts;

            Assert.AreEqual(1, conflicts.Length);

            var derivationLog = new Derivation(workspaceSession).Log;
            derivationLog.AddConflicts(conflicts);

            Assert.AreEqual(1, derivationLog.Errors.Length);
        }
示例#4
0
        public void SortDiamond()
        {
            var a = new C1Builder(this.DatabaseSession).Build();
            var b = new C1Builder(this.DatabaseSession).Build();
            var c = new C1Builder(this.DatabaseSession).Build();
            var d = new C1Builder(this.DatabaseSession).Build();

            a.AddDependency(b);
            a.AddDependency(c);

            b.AddDependency(d);
            c.AddDependency(d);

            var derivation = new Derivation(this.DatabaseSession);

            var sequence = new List<IObject>();
            derivation["sequence"] = sequence;

            derivation.Derive();

            Assert.AreEqual(d, sequence[0]);
            Assert.AreEqual(a, sequence[3]);
        }
示例#5
0
        public static void AppsOnDeriveHistory(ISession session)
        {
            var derivation = new Derivation(session);

            var storeRevenuesByPeriodByStoreByInternalOrganisation = new Dictionary<InternalOrganisation, Dictionary<Store, Dictionary<DateTime, StoreRevenue>>>();

            var storeRevenues = session.Extent<StoreRevenue>();

            foreach (StoreRevenue storeRevenue in storeRevenues)
            {
                var months = ((DateTime.UtcNow.Year - storeRevenue.Year) * 12) + DateTime.UtcNow.Month - storeRevenue.Month;
                if (months <= 12)
                {
                    var date = DateTimeFactory.CreateDate(storeRevenue.Year, storeRevenue.Month, 01);

                    Dictionary<Store, Dictionary<DateTime, StoreRevenue>> storeRevenuesByPeriodByStore;
                    if (!storeRevenuesByPeriodByStoreByInternalOrganisation.TryGetValue(storeRevenue.InternalOrganisation, out storeRevenuesByPeriodByStore))
                    {
                        storeRevenuesByPeriodByStore = new Dictionary<Store, Dictionary<DateTime, StoreRevenue>>();
                        storeRevenuesByPeriodByStoreByInternalOrganisation[storeRevenue.InternalOrganisation] = storeRevenuesByPeriodByStore;
                    }

                    Dictionary<DateTime, StoreRevenue> storeRevenuesByPeriod;
                    if (!storeRevenuesByPeriodByStore.TryGetValue(storeRevenue.Store, out storeRevenuesByPeriod))
                    {
                        storeRevenuesByPeriod = new Dictionary<DateTime, StoreRevenue>();
                        storeRevenuesByPeriodByStore[storeRevenue.Store] = storeRevenuesByPeriod;
                    }

                    StoreRevenue revenue;
                    if (!storeRevenuesByPeriod.TryGetValue(date, out revenue))
                    {
                        storeRevenuesByPeriod.Add(date, storeRevenue);
                    }
                }
            }

            var storeRevenueHistoriesByStoreByInternalOrganisation = new Dictionary<InternalOrganisation, Dictionary<Store, StoreRevenueHistory>>();

            var storeRevenueHistories = session.Extent<StoreRevenueHistory>();

            foreach (StoreRevenueHistory storeRevenueHistory in storeRevenueHistories)
            {
                storeRevenueHistory.Revenue = 0;

                Dictionary<Store, StoreRevenueHistory> storeRevenueHistoriesByStore;
                if (!storeRevenueHistoriesByStoreByInternalOrganisation.TryGetValue(storeRevenueHistory.InternalOrganisation, out storeRevenueHistoriesByStore))
                {
                    storeRevenueHistoriesByStore = new Dictionary<Store, StoreRevenueHistory>();
                    storeRevenueHistoriesByStoreByInternalOrganisation[storeRevenueHistory.InternalOrganisation] = storeRevenueHistoriesByStore;
                }

                StoreRevenueHistory revenueHistory;
                if (!storeRevenueHistoriesByStore.TryGetValue(storeRevenueHistory.Store, out revenueHistory))
                {
                    storeRevenueHistoriesByStore.Add(storeRevenueHistory.Store, storeRevenueHistory);
                }
            }

            foreach (var keyValuePair in storeRevenuesByPeriodByStoreByInternalOrganisation)
            {
                Dictionary<Store, StoreRevenueHistory> storeRevenueHistoriesByStore;
                if (!storeRevenueHistoriesByStoreByInternalOrganisation.TryGetValue(keyValuePair.Key, out storeRevenueHistoriesByStore))
                {
                    storeRevenueHistoriesByStore = new Dictionary<Store, StoreRevenueHistory>();
                    storeRevenueHistoriesByStoreByInternalOrganisation[keyValuePair.Key] = storeRevenueHistoriesByStore;
                }

                foreach (var valuePair in keyValuePair.Value)
                {
                    StoreRevenueHistory storeRevenueHistory;

                    if (!storeRevenueHistoriesByStore.TryGetValue(valuePair.Key, out storeRevenueHistory))
                    {
                        StoreRevenue partyRevenue = null;
                        foreach (var storeRevenuesByPeriod in valuePair.Value)
                        {
                            partyRevenue = storeRevenuesByPeriod.Value;
                            break;
                        }

                        storeRevenueHistory = CreateStoreRevenueHistory(session, partyRevenue);
                        storeRevenueHistoriesByStore.Add(storeRevenueHistory.Store, storeRevenueHistory);
                    }

                    foreach (var partyRevenueByPeriod in valuePair.Value)
                    {
                        var partyRevenue = partyRevenueByPeriod.Value;
                        storeRevenueHistory.Revenue += partyRevenue.Revenue;
                    }

                    storeRevenueHistory.OnDerive(x => x.WithDerivation(derivation));
                }
            }
        }
示例#6
0
        public static void AppsOnDeriveHistory(ISession session)
        {
            var derivation = new Derivation(session);

            var packageRevenuesByPeriodByPackageByInternalOrganisation = new Dictionary<InternalOrganisation, Dictionary<Package, Dictionary<DateTime, PackageRevenue>>>();

            var packageRevenues = session.Extent<PackageRevenue>();

            foreach (PackageRevenue packageRevenue in packageRevenues)
            {
                var months = ((DateTime.UtcNow.Year - packageRevenue.Year) * 12) + DateTime.UtcNow.Month - packageRevenue.Month;
                if (months <= 12)
                {
                    var date = DateTimeFactory.CreateDate(packageRevenue.Year, packageRevenue.Month, 01);

                    Dictionary<Package, Dictionary<DateTime, PackageRevenue>> packageRevenuesByPeriodByPackage;
                    if (!packageRevenuesByPeriodByPackageByInternalOrganisation.TryGetValue(packageRevenue.InternalOrganisation, out packageRevenuesByPeriodByPackage))
                    {
                        packageRevenuesByPeriodByPackage = new Dictionary<Package, Dictionary<DateTime, PackageRevenue>>();
                        packageRevenuesByPeriodByPackageByInternalOrganisation[packageRevenue.InternalOrganisation] = packageRevenuesByPeriodByPackage;
                    }

                    Dictionary<DateTime, PackageRevenue> packageRevenuesByPeriod;
                    if (!packageRevenuesByPeriodByPackage.TryGetValue(packageRevenue.Package, out packageRevenuesByPeriod))
                    {
                        packageRevenuesByPeriod = new Dictionary<DateTime, PackageRevenue>();
                        packageRevenuesByPeriodByPackage[packageRevenue.Package] = packageRevenuesByPeriod;
                    }

                    PackageRevenue revenue;
                    if (!packageRevenuesByPeriod.TryGetValue(date, out revenue))
                    {
                        packageRevenuesByPeriod.Add(date, packageRevenue);
                    }
                }
            }

            var packageRevenueHistoriesByPackageByInternalOrganisation = new Dictionary<InternalOrganisation, Dictionary<Package, PackageRevenueHistory>>();

            var packageRevenueHistories = session.Extent<PackageRevenueHistory>();

            foreach (PackageRevenueHistory packageRevenueHistory in packageRevenueHistories)
            {
                packageRevenueHistory.Revenue = 0;

                Dictionary<Package, PackageRevenueHistory> packageRevenueHistoriesByPackage;
                if (!packageRevenueHistoriesByPackageByInternalOrganisation.TryGetValue(packageRevenueHistory.InternalOrganisation, out packageRevenueHistoriesByPackage))
                {
                    packageRevenueHistoriesByPackage = new Dictionary<Package, PackageRevenueHistory>();
                    packageRevenueHistoriesByPackageByInternalOrganisation[packageRevenueHistory.InternalOrganisation] = packageRevenueHistoriesByPackage;
                }

                PackageRevenueHistory revenueHistory;
                if (!packageRevenueHistoriesByPackage.TryGetValue(packageRevenueHistory.Package, out revenueHistory))
                {
                    packageRevenueHistoriesByPackage.Add(packageRevenueHistory.Package, packageRevenueHistory);
                }
            }

            foreach (var keyValuePair in packageRevenuesByPeriodByPackageByInternalOrganisation)
            {
                Dictionary<Package, PackageRevenueHistory> packageRevenueHistoriesByPackage;
                if (!packageRevenueHistoriesByPackageByInternalOrganisation.TryGetValue(keyValuePair.Key, out packageRevenueHistoriesByPackage))
                {
                    packageRevenueHistoriesByPackage = new Dictionary<Package, PackageRevenueHistory>();
                    packageRevenueHistoriesByPackageByInternalOrganisation[keyValuePair.Key] = packageRevenueHistoriesByPackage;
                }

                foreach (var valuePair in keyValuePair.Value)
                {
                    PackageRevenueHistory packageRevenueHistory;

                    if (!packageRevenueHistoriesByPackage.TryGetValue(valuePair.Key, out packageRevenueHistory))
                    {
                        PackageRevenue partyRevenue = null;
                        foreach (var packageRevenuesByPeriod in valuePair.Value)
                        {
                            partyRevenue = packageRevenuesByPeriod.Value;
                            break;
                        }

                        packageRevenueHistory = CreatePackageRevenueHistory(session, partyRevenue);
                        packageRevenueHistoriesByPackage.Add(packageRevenueHistory.Package, packageRevenueHistory);
                    }

                    foreach (var partyRevenueByPeriod in valuePair.Value)
                    {
                        var partyRevenue = partyRevenueByPeriod.Value;
                        packageRevenueHistory.Revenue += partyRevenue.Revenue;
                    }

                    packageRevenueHistory.OnDerive(x => x.WithDerivation(derivation));
                }
            }
        }
示例#7
0
 public DerivationGraph(Derivation derivation)
 {
     this.derivation = derivation;
 }
示例#8
0
 public static DerivationLog Derive(this ISession session)
 {
     var derivation = new Derivation(session);
     return derivation.Derive();
 }
示例#9
0
 public DerivationLog(Derivation derivation)
 {
     this.Derivation = derivation;
     this.errors = new List<IDerivationError>();
 }