public static Result <List <ExternalEntity> > PushList(this ExternalEntity src, ExternalEntity to) { var result = new Result <List <ExternalEntity> >(); if (src.EntityType != to.EntityType) { return(result.Fail("cannot derive a push list on different entity types.")); } if (src.ExternalSystemId == to.ExternalSystemId) { return(result.Fail("cannot derive a push list from the same system.")); } try { using (var db = new RSMDB.RSMDataModelDataContext()) { var type = Enum.GetName(typeof(EntityType), src.EntityType); var toQuery = db.ExternalApplicationKeys.Where(k => k.EntityType == type && k.SystemId == to.ExternalSystemId); var srcQuery = db.ExternalApplicationKeys.Where(k => k.EntityType == type && k.SystemId == src.ExternalSystemId); var rows = srcQuery.Where(s => !toQuery.Any(t => t.ExternalId == s.ExternalId)); result.Entity = rows.Select(x => x.ToModel <ExternalEntity>(null)).ToList(); } } catch (Exception e) { return(result.Set(ResultType.TechnicalError, e, "Get push list failed. {0}", e.ToString())); } return(result); }
/// <summary> /// Adds keys for an external entity to the database. No existence check is performed prior to inserting. /// </summary> /// <param name="from">Entity to add</param> /// <returns></returns> public static Result <ExternalEntity> Add(this ExternalEntity from) { var result = Result <ExternalEntity> .Success(); try { using (var db = new RSMDB.RSMDataModelDataContext()) { using (var transaction = new TransactionScope(TransactionScopeOption.Required, TransactionTimeout)) { if (from.KeysAdded == DateTime.MinValue) { from.KeysAdded = DateTime.Now; } var row = from.InsertKeys(db); if (row == null) { return(result.Fail("Add external entity keys failed")); } result.Entity = new ExternalEntity(); result.Entity = row.ToModel(result.Entity); transaction.Complete(); } } } catch (Exception e) { return(result.Set(ResultType.TechnicalError, e, "Add external entity keys failed {0}", e.ToString())); } return(result); }
/// <summary> /// Search by specific criteria and optional date range on when Added. /// </summary> /// <param name="criteria">Fields considered: ExternalSystemId, EntityType</param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public static Result <List <ExternalEntity> > SearchKeys(this ExternalEntity criteria, DateTime?from = null, DateTime?to = null) { var result = new Result <List <ExternalEntity> >(); try { using (var db = new RSMDB.RSMDataModelDataContext()) { var type = Enum.GetName(typeof(EntityType), criteria.EntityType); var rows = criteria.SearchKeys(db, x => x.SystemId == criteria.ExternalSystemId && x.EntityType == type && (from == null || x.Added > from) && (to == null || x.Added < to)); result.Entity = rows.Select(x => x.ToModel <ExternalEntity>()).ToList(); } } catch (Exception e) { return(result.Set(ResultType.TechnicalError, e, "Get AccessLog failed. {0}", e.ToString())); } return(result); }
public static Result <ExternalEntity> MostRecent(this ExternalEntity criteria, DateTime?from = null, DateTime?to = null) { var result = new Result <ExternalEntity>(); try { using (var db = new RSMDB.RSMDataModelDataContext()) { var type = Enum.GetName(typeof(EntityType), criteria.EntityType); var rows = criteria.SearchKeys(db, x => x.SystemId == criteria.ExternalSystemId && x.EntityType == type && (from == null || x.Added > from) && (to == null || x.Added < to)).OrderByDescending(o => o.Added); result.Entity = rows.Select(x => x.ToModel <ExternalEntity>()).FirstOrDefault(); if (result.Entity == null) { return(result.Fail("most recent external entity not found.")); } } } catch (Exception e) { return(result.Set(ResultType.TechnicalError, e, "Get AccessLog failed. {0}", e.ToString())); } return(result); }
/// <summary> /// Get External entity keys. /// </summary> /// <param name="from"></param> /// <param name="keyType"><typeparamref name="SelectKeys"/></param> /// <param name="replace">If true, criteria entity will be replaced with values retrieved.</param> /// <returns></returns> public static Result <ExternalEntity> GetKeys(this ExternalEntity from, SelectKeys keyType = SelectKeys.External, bool replace = false) { var result = Result <ExternalEntity> .Success(); try { using (var db = new RSMDB.RSMDataModelDataContext()) { var row = keyType == SelectKeys.External ? from.SelectExternal(db) : from.Select(db); if (row == null) { return(result.Fail("ExternalEntity not found", "NotFound")); } Debug.Assert(row.ExternalSystem != null, "ExternalSystem instance was not fetched!"); result.Entity = row.ToModel <ExternalEntity>(replace ? from : null); } } catch (Exception e) { return(result.Set(ResultType.TechnicalError, e, "Get ExternalEntity failed. {0}", e.ToString())); } return(result); }
public void ExternalEntity_Get_Internal() { var externalId = "50"; var id = 1; var keys = DataFactory.CreateExternalApplicationKey(EntityType.Person, externalId, S2In.Id, id); using (var context = new RSMDB.RSMDataModelDataContext()) { context.ExternalApplicationKeys.InsertOnSubmit(keys); context.SubmitChanges(); } var criteria = new ExternalEntity { EntityType = EntityType.Person, ExternalSystemId = S2In.Id, InternalId = id }; var result = criteria.GetKeys(SelectKeys.Internal); Assert.IsNotNull(result, "Missing results"); Assert.IsTrue(result.Succeeded, result.ToString()); Assert.IsNotNull(result.Entity, "Missing entity"); Assert.IsNotNull(result.Entity.ExternalSystem, "Missing ExternalSystem entity"); Assert.IsTrue(result.Entity.EntityType == EntityType.Person, "EntityType mismatch"); }
public static RSMDB.ExternalApplicationKey SelectExternal(this ExternalEntity entity, RSMDB.RSMDataModelDataContext context) { var type = Enum.GetName(typeof(EntityType), entity.EntityType); return(context.ExternalApplicationKeys.FirstOrDefault(x => x.EntityType == type && x.SystemId == entity.ExternalSystemId && x.ExternalId == entity.ExternalId)); }
public List <ExternalEntity> InitializeData() { var rnd = new Random(); if (false) { const int amountOfDataPoints = 550200; //rnd.Next(25000, 31000); data = new List <ExternalEntity>(amountOfDataPoints); for (var i = 0; i < amountOfDataPoints; i++) { var point = new ExternalEntity(); point.Data.Add("x", rnd.Next(-BoundX, BoundX + 1)); point.Data.Add("y", rnd.Next(-BoundY, BoundY + 1)); data.Add(point); } return(data); } else if (true) { const int amountOfData = BoundX * BoundY * 4; data = new List <ExternalEntity>(amountOfData); for (var i = -BoundX; i <= BoundX; i++) { for (var j = -BoundY; j <= BoundY; j++) { var point = new ExternalEntity(); point.Data.Add("x", i); point.Data.Add("y", j); data.Add(point); } } return(data); } else { data = new List <ExternalEntity>(); for (var i = -BoundX; i <= BoundX; i += 8) { for (var j = -BoundY; j <= BoundY; j += 8) { var point = new ExternalEntity(); point.Data.Add("x", i); point.Data.Add("y", j); data.Add(point); } } return(data); } }
public static ExternalEntity MapKeys(this ExternalEntity from, ExternalEntity to) { Debug.Assert(from.EntityType == to.EntityType, "Attempting to map keys between different entity types!!"); to.InternalId = from.InternalId; to.ExternalId = from.ExternalId; to.ExternalSystemId = from.ExternalSystemId; if (from.ExternalSystem != null) { to.ExternalSystem = from.ExternalSystem; } return(to); }
public static RSMDB.ExternalApplicationKey Insert(this ExternalEntity entity, RSMDB.RSMDataModelDataContext context) { var row = new RSMDB.ExternalApplicationKey { InternalId = entity.InternalId, SystemId = entity.ExternalSystemId, EntityType = Enum.GetName(typeof(EntityType), entity.EntityType), ExternalId = entity.ExternalId, Added = entity.KeysAdded }; context.ExternalApplicationKeys.InsertOnSubmit(row); context.SubmitChanges(); return(row); }
public void ExternalEntity_Update() { var externalId = "50"; var id = 1; var keys = DataFactory.CreateExternalApplicationKey(EntityType.Person, externalId, S2In.Id, id); using (var context = new RSMDB.RSMDataModelDataContext()) { context.ExternalApplicationKeys.InsertOnSubmit(keys); context.SubmitChanges(); } var lastUpdated = DateTime.Now; var criteria = new ExternalEntity { EntityType = EntityType.Person, ExternalSystemId = S2In.Id, InternalId = id, ExternalUpdated = lastUpdated }; using (var context = new RSMDB.RSMDataModelDataContext()) { criteria.UpdateKeys(context); context.SubmitChanges(); } using (var context = new RSMDB.RSMDataModelDataContext()) { keys = context.ExternalApplicationKeys.FirstOrDefault(x => x.InternalId == criteria.InternalId && x.SystemId == criteria.ExternalSystemId && x.EntityType == Enum.GetName(typeof(EntityType), criteria.EntityType)); Assert.IsNotNull(keys, "Keys not created"); Assert.IsTrue(keys.ExternalEntityLastUpdated != null, "LastUpdated value not updated"); //NOTE: it is possible for conversion into the db to cause millisecond differences Assert.IsTrue(keys.ExternalEntityLastUpdated.ToString() == lastUpdated.ToString(), "LastUpdated value not the same"); } }
public static RSMDB.ExternalApplicationKey UpdateKeys(this ExternalEntity entity, RSMDB.RSMDataModelDataContext context) { var row = DataExtensions.Select(entity, context); if (row == null) { return(row); } if (entity.ExternalUpdated == default(DateTime)) { row.ExternalEntityLastUpdated = null; } else { row.ExternalEntityLastUpdated = entity.ExternalUpdated; } context.SubmitChanges(); return(row); }
public static RSMDB.ExternalApplicationKey InsertKeys(this ExternalEntity entity, RSMDB.RSMDataModelDataContext context) { var row = new RSMDB.ExternalApplicationKey { InternalId = entity.InternalId, SystemId = entity.ExternalSystemId, EntityType = Enum.GetName(typeof(EntityType), entity.EntityType), ExternalId = entity.ExternalId, Added = entity.KeysAdded }; if (entity.ExternalUpdated != default(DateTime)) { row.ExternalEntityLastUpdated = entity.ExternalUpdated; } context.ExternalApplicationKeys.InsertOnSubmit(row); context.SubmitChanges(); return(row); }
public static bool KeysExist(this ExternalEntity from, SelectKeys keyType = SelectKeys.External) { return(from.GetKeys(keyType).Succeeded); }
public static IEnumerable <RSMDB.ExternalApplicationKey> SearchKeys(this ExternalEntity entity, RSMDB.RSMDataModelDataContext context, Expression <Func <RSMDB.ExternalApplicationKey, bool> > filterExpression) { return(context.ExternalApplicationKeys.Where(filterExpression.Compile())); }