private IEnumerable <ManagedTenant> UpdateTenants(IManagedPlatform platform, IList <RemoteTenantInfo> tenants, ICollection <IEntity> entities, ICollection <ManagedApp> existingApps) { using (Profiler.Measure("PlatformService.UpdateTenants")) { if (platform == null) { throw new ArgumentNullException("platform"); } var ids = tenants == null?Enumerable.Empty <string>() : tenants.Select(t => t.RemoteId.ToString()); CastEntityHelper.Delete(platform.ContainsTenants.Where(t => !ids.Contains(t.RemoteId)).Select(t => new EntityRef(t.Id))); if (tenants == null) { return(new List <ManagedTenant>()); } var updatedEntities = tenants.Select(t => UpdateTenant(platform, t, entities, existingApps)).ToList(); entities.AddRange(updatedEntities); return(updatedEntities); } }
private IEnumerable <ManagedAppVersion> UpdateAvailableApps(IManagedPlatform platform, ICollection <AvailableApplication> apps, ICollection <IEntity> entities, ICollection <ManagedApp> existingApps) { using (Profiler.Measure("PlatformService.UpdateAvailableApps")) { if (platform == null) { throw new ArgumentNullException("platform"); } var availableApps = apps ?? new List <AvailableApplication>(); // remove any app versions no longer on the platform var validVersionIds = availableApps.Where(a => a.ApplicationVersionId != Guid.Empty).Select(a => a.ApplicationVersionId).ToList(); var removeApps = platform.AvailableAppVersions .Where(availableAppVersion => (availableAppVersion.VersionId == null) || (availableAppVersion.VersionId.Value == Guid.Empty) || !validVersionIds.Contains(availableAppVersion.VersionId.Value)).ToList(); removeApps.ForEach(r => platform.AvailableAppVersions.Remove(r)); var updatedEntities = availableApps.Where(a => a.ApplicationVersionId != Guid.Empty) .Select(a => UpdateAppVersion(platform, null, a, existingApps)) .ToList(); entities.AddRange(updatedEntities); return(updatedEntities); } }
private static ManagedTenant CreateTestTenant(IManagedPlatform platform) { var tenant = Entity.Create <ManagedTenant>(); tenant.Name = TestTenantName; platform.ContainsTenants.Add(tenant); tenant.Platform = platform; return(tenant); }
private PlatformDatabase UpdateDatabases(IManagedPlatform platform, string catalog, string server, ICollection <IEntity> entities) { using (Profiler.Measure("PlatformService.UpdateDatabases")) { if (string.IsNullOrEmpty(catalog)) { throw new ArgumentNullException("catalog"); } if (string.IsNullOrEmpty(server)) { throw new ArgumentNullException("server"); } IPlatformDatabase db = null; if (platform != null) { db = platform.DatabaseHistory.FirstOrDefault(d => string.Equals(d.Catalog, catalog, StringComparison.InvariantCultureIgnoreCase) && string.Equals(d.Server, server, StringComparison.InvariantCultureIgnoreCase)); } if (db != null) { db = db.AsWritable <PlatformDatabase>(); } else { db = CastEntityHelper.CreatePlatformDatabase(); db.Catalog = catalog; db.Server = server; } db.Name = string.Format("{0} ({1})", server, catalog); db.LastContact = DateTime.UtcNow; entities.Add(db); return((PlatformDatabase)db); } }
private ManagedTenant UpdateTenant(IManagedPlatform platform, RemoteTenantInfo tenant, ICollection <IEntity> entities, ICollection <ManagedApp> existingApps) { using (Profiler.Measure("PlatformService.UpdateTenant")) { IManagedTenant mt = null; if (platform != null) { mt = platform.ContainsTenants.FirstOrDefault(t => t.RemoteId == tenant.RemoteId.ToString()); } if (mt != null) { mt = mt.AsWritable <ManagedTenant>(); } else { mt = CastEntityHelper.CreateTenant(); mt.RemoteId = tenant.RemoteId.ToString(); } mt.Name = tenant.Name; mt.Disabled = tenant.Disabled; var userRoles = UpdateRoles(mt, tenant.Roles, entities); mt.Roles.AddRange(userRoles); var users = UpdateUsers(mt, tenant.Users, entities); mt.Users.AddRange(users); var apps = UpdateInstalledApps(mt, tenant.Apps, entities, existingApps); mt.HasAppsInstalled.AddRange(apps); if (platform != null) { mt.Platform = platform; } return((ManagedTenant)mt); } }
private PlatformFrontEnd UpdateFrontEnds(IManagedPlatform platform, string host, string domain, ICollection <IEntity> entities) { using (Profiler.Measure("PlatformService.UpdateFrontEnds")) { if (string.IsNullOrEmpty(host)) { throw new ArgumentNullException("host"); } IPlatformFrontEnd fe = null; if (platform != null) { fe = platform.FrontEndHistory.FirstOrDefault(f => string.Equals(f.Host, host, StringComparison.InvariantCultureIgnoreCase) && string.Equals(f.Domain, domain, StringComparison.InvariantCultureIgnoreCase)); } if (fe != null) { fe = fe.AsWritable <PlatformFrontEnd>(); } else { fe = CastEntityHelper.CreatePlatformFrontEnd(); fe.Host = host; fe.Domain = domain; } fe.Name = host; if (!string.IsNullOrEmpty(domain) && !host.EndsWith(domain)) { fe.Name = host + "." + domain; } fe.LastContact = DateTime.UtcNow; entities.Add(fe); return((PlatformFrontEnd)fe); } }
private ManagedAppVersion UpdateAppVersion(IManagedPlatform platform, IManagedTenant tenant, AvailableApplication app, ICollection <ManagedApp> existingApps) { using (Profiler.Measure("PlatformService.UpdateAppVersion")) { IManagedApp managedApp = existingApps.FirstOrDefault(e => e.ApplicationId == app.ApplicationId); IManagedAppVersion managedAppVersion = null; // does it exit on the platform? if (platform != null) { managedAppVersion = platform.AvailableAppVersions.FirstOrDefault(v => v.VersionId == app.ApplicationVersionId) ?? GetAppVersion(app.ApplicationVersionId); } // or the tenant? if (tenant != null && managedAppVersion == null) { managedAppVersion = tenant.HasAppsInstalled.FirstOrDefault(i => i.VersionId == app.ApplicationVersionId); } // or in amongst the list of apps just being created? if (managedAppVersion == null) { managedAppVersion = existingApps.SelectMany(a => a.Versions).FirstOrDefault(v => (v.VersionId == app.ApplicationVersionId) && (v.Version == app.PackageVersion) && (v.Name == app.Name)); } if (managedAppVersion != null) { managedAppVersion = managedAppVersion.AsWritable <ManagedAppVersion>(); // it should have an app if (managedAppVersion.Application != null) { managedApp = managedAppVersion.Application; } } else { managedAppVersion = CastEntityHelper.CreateAppVersion(); managedAppVersion.VersionId = app.ApplicationVersionId; } managedAppVersion.Name = app.Name; managedAppVersion.Version = app.PackageVersion; managedAppVersion.PublishDate = app.ReleaseDate; // does the app exist then? if (managedApp == null) { managedApp = UpdateApp(app); } if (managedApp != null) { managedApp = managedApp.AsWritable <ManagedApp>(); managedApp.Versions.Add((ManagedAppVersion)managedAppVersion); managedAppVersion.Application = managedApp; existingApps.Add((ManagedApp)managedApp); } if (platform != null || tenant != null) { if (platform != null) { platform.AvailableAppVersions.Add((ManagedAppVersion)managedAppVersion); } if (tenant != null) { tenant.HasAppsInstalled.Add((ManagedAppVersion)managedAppVersion); } } return((ManagedAppVersion)managedAppVersion); } }