Exemple #1
0
        /// <summary>
        ///
        /// Updates <see cref="_desktopConfigurations"/> with <see cref="IVirtualDesktopConfiguration"/>s
        /// corresponding to <see cref="IVirtualDesktop"/>s within <paramref name="after"/>.
        ///
        /// <see cref="IVirtualDesktop"/>s with no matched <see cref="IVirtualDesktopConfiguration"/> will be bound
        /// to one created by <see cref="IConfigurationFactory.ConfigurationFor(IVirtualDesktop)"/>.
        ///
        /// <see cref="IVirtualDesktopConfiguration"/>s with no matched <see cref="IVirtualDesktop"/> will be bound
        /// to <see langword="null"/> (i.e. unbound).
        ///
        /// </summary>
        /// <param name="before"></param>
        /// <param name="after"></param>
        private void UpdateDesktopConfigurations(IEnumerable <IVirtualDesktop> before, IEnumerable <IVirtualDesktop> after)
        {
            var pairs = _desktopConfigurations
                        .DefaultIfEmpty()
                        .Join(
                after.DefaultIfEmpty(),

                configuration => configuration.Guid, desktop => desktop.Guid,

                (configuration, desktop) =>
                new
            {
                Desktop = desktop,

                Configuration =
                    configuration
                    // when desktop does not have matching configuration, one is created.
                    ?? _configurationFactory.ConfigurationFor(desktop)
            })
                        .ToArray();

            foreach (var pair in pairs)
            {
                // should NOT overwrite configuration values
                // when pair.Desktop is null (did not match an enabled desktop)
                // the configuration becomes unbound.
                pair.Configuration.BindToTarget(pair.Desktop, _configurationFactory);
            }

            DesktopConfigurations = pairs.Select(pair => pair.Configuration);
        }
Exemple #2
0
        private static void MapConfigurationToVirtualDesktop(
            IEnumerable <IVirtualDesktop> desktops,
            IList <IVirtualDesktopConfiguration> configurations,
            IConfigurationFactory configurationFactory)
        {
            foreach (var desktop in desktops)
            {
                var matchingConfiguration = configurations.FirstOrDefault(
                    configuration =>
                    configuration.IsConfigurationFor(desktop));

                if (matchingConfiguration != null)
                {
                    // should NOT overwrite configuration values
                    matchingConfiguration.BindToTarget(desktop, configurationFactory);
                }

                else
                {
                    configurations.Add(configurationFactory.ConfigurationFor(desktop));
                }
            }
        }