Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
            }
        }