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); } }
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]); }
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); }
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]); }
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)); } } }
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)); } } }
public DerivationGraph(Derivation derivation) { this.derivation = derivation; }
public static DerivationLog Derive(this ISession session) { var derivation = new Derivation(session); return derivation.Derive(); }
public DerivationLog(Derivation derivation) { this.Derivation = derivation; this.errors = new List<IDerivationError>(); }