Exemple #1
0
        public void ServerConfigJson_ToModel_Copies_Layer_TileServerSettings_To_Model()
        {
            var tileServerSettings = new TileServerSettings[] {
                new TileServerSettings()
                {
                    Name = "Second Layer", IsLayer = true, DisplayOrder = 2,
                },
                new TileServerSettings()
                {
                    Name = "Third Layer", IsLayer = true, DisplayOrder = 3,
                },
                new TileServerSettings()
                {
                    Name = "First Layer", IsLayer = true, DisplayOrder = 1,
                },
            };

            _Configuration.GoogleMapSettings.MapProvider           = MapProvider.Leaflet;
            _Configuration.GoogleMapSettings.TileServerSettingName = "My Layer";
            _TileServerSettingsManager.Setup(r => r.GetAllTileLayerSettings(MapProvider.Leaflet)).Returns(tileServerSettings);

            var model = ServerConfigJson.ToModel(isLocalAddress: true);

            Assert.AreEqual(3, model.TileServerLayers.Count);
            Assert.AreSame(tileServerSettings[2], model.TileServerLayers[0]);
            Assert.AreSame(tileServerSettings[0], model.TileServerLayers[1]);
            Assert.AreSame(tileServerSettings[1], model.TileServerLayers[2]);
        }
Exemple #2
0
        /// <summary>
        /// Returns the fake URL that corresponds to the tile server settings passed across.
        /// </summary>
        /// <param name="mapProvider"></param>
        /// <param name="tileServerSettings"></param>
        /// <returns></returns>
        public string ToFakeUrl(MapProvider mapProvider, TileServerSettings tileServerSettings)
        {
            var result = new StringBuilder();

            if (tileServerSettings != null)
            {
                result.Append($"{PageName}/");

                result.Append($"{MapProviderName}-{((int)mapProvider).ToString(CultureInfo.InvariantCulture)}/");
                result.Append($"{TileServerName}-{HttpUtility.UrlPathEncode(tileServerSettings.Name)}/");

                foreach (var substitutionMarker in ExtractSubstitutionMarkerNames(tileServerSettings.Url))
                {
                    // Ignore subdomain substitutions, they're meaningless here
                    if (substitutionMarker == "s")
                    {
                        continue;
                    }

                    result.Append($"{VariablePrefix}{HttpUtility.UrlPathEncode(substitutionMarker)}-{{{HttpUtility.UrlPathEncode(substitutionMarker)}}}/");
                }

                result.Append("Tile");
                result.Append(ExtractImageExtension(tileServerSettings.Url));
            }

            return(result.ToString());
        }
Exemple #3
0
        public void ServerConfigJson_ToModel_Copies_Current_TileServerSettings_To_Model()
        {
            var tileServerSettings = new TileServerSettings();

            _Configuration.GoogleMapSettings.MapProvider           = MapProvider.Leaflet;
            _Configuration.GoogleMapSettings.TileServerSettingName = "My Tile Server";
            _TileServerSettingsManager.Setup(r => r.GetTileServerSettings(MapProvider.Leaflet, "My Tile Server", true)).Returns(tileServerSettings);

            var model = ServerConfigJson.ToModel(isLocalAddress: true);

            Assert.AreSame(tileServerSettings, model.TileServerSettings);
        }
Exemple #4
0
        /// <summary>
        /// See interface.
        /// </summary>
        /// <returns></returns>
        public virtual object Clone()
        {
            var result = (ServerConfigJson)MemberwiseClone();

            result.Receivers = new List <ServerReceiverJson>();
            result.Receivers.AddRange(Receivers.Select(r => (ServerReceiverJson)r.Clone()));

            result.TileServerSettings = (TileServerSettings)TileServerSettings?.Clone();

            result.TileServerLayers = new List <TileServerSettings>();
            result.TileServerLayers.AddRange(TileServerLayers.Select(r => (TileServerSettings)r.Clone()));

            return(result);
        }
Exemple #5
0
        /// <summary>
        /// Converts version 1 brightness classes to default brightness values.
        /// </summary>
        /// <param name="setting"></param>
        /// <remarks>
        /// The first version of this used classes to infer brightness. Brightness is now configurable
        /// and a default brightness can be assigned. If we're loading an old definition that still uses
        /// classes for brightness then this removes the brightness classes and turns them into default
        /// brightness values.
        /// </remarks>
        private void PortBrightnessClasses(TileServerSettings setting)
        {
            var match = _BrightnessRegex.Match(setting?.ClassName ?? "");

            if (match.Success)
            {
                var classGroup      = match.Groups["class"];
                var brightnessGroup = match.Groups["brightness"];

                setting.ClassName = setting.ClassName
                                    .Remove(classGroup.Index, classGroup.Length)
                                    .Trim();

                setting.DefaultBrightness = int.Parse(brightnessGroup.Value);
            }
        }
        /// <summary>
        /// Returns a clone of the settings passed in with the real URL swapped out with the fake one.
        /// </summary>
        /// <param name="mapProvider"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        private TileServerSettings CloneAndReplaceRealTileServerSettingsWithFake(MapProvider mapProvider, TileServerSettings settings)
        {
            var result = settings;

            var options       = Plugin.Singleton?.Options;
            var canCacheMap   = options?.CacheMapTiles ?? false;
            var canCacheLayer = options?.CacheLayerTiles ?? false;
            var canCacheThis  = (canCacheMap && !settings.IsLayer) || (canCacheLayer && settings.IsLayer);

            if (settings != null && canCacheThis)
            {
                result     = (TileServerSettings)settings.Clone();
                result.Url = _TileServerUrlTranslator.ToFakeUrl(mapProvider, result);
            }

            return(result);
        }
Exemple #7
0
        public void TileServerSettings_Clone_Creates_New_Object()
        {
            foreach (var property in typeof(TileServerSettings).GetProperties())
            {
                for (var pass = 0; pass < 2; ++pass)
                {
                    var original = new TileServerSettings();

                    object expected = null;
                    switch (property.Name)
                    {
                    case nameof(TileServerSettings.Attribution):        expected = original.Attribution = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.ClassName):          expected = original.ClassName = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.DefaultBrightness):  expected = original.DefaultBrightness = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.DefaultOpacity):     expected = original.DefaultOpacity = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.DetectRetina):       expected = original.DetectRetina = pass == 0; break;

                    case nameof(TileServerSettings.DisplayOrder):       expected = original.DisplayOrder = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.ErrorTileUrl):       expected = original.ErrorTileUrl = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.IsCustom):           expected = original.IsCustom = pass == 0; break;

                    case nameof(TileServerSettings.IsDefault):          expected = original.IsDefault = pass == 0; break;

                    case nameof(TileServerSettings.IsLayer):            expected = original.IsLayer = pass == 0; break;

                    case nameof(TileServerSettings.IsTms):              expected = original.IsTms = pass == 0; break;

                    case nameof(TileServerSettings.MapProvider):        expected = original.MapProvider = (MapProvider)(pass == 0 ? 1 : 2); break;

                    case nameof(TileServerSettings.MaxNativeZoom):      expected = original.MaxNativeZoom = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.MaxZoom):            expected = original.MaxZoom = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.MinNativeZoom):      expected = original.MinNativeZoom = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.MinZoom):            expected = original.MinZoom = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.Name):               expected = original.Name = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.Subdomains):         expected = original.Subdomains = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.Url):                expected = original.Url = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.Version):            expected = original.Version = pass == 0 ? "A" : "B"; break;

                    case nameof(TileServerSettings.ZoomOffset):         expected = original.ZoomOffset = pass == 0 ? 1 : 2; break;

                    case nameof(TileServerSettings.ZoomReverse):        expected = original.ZoomReverse = pass == 0; break;

                    case nameof(TileServerSettings.ExpandoOptions):
                        original.ExpandoOptions.Add(new TileServerSettings.ExpandoOption()
                        {
                            Option = pass == 0 ? "A" : "B",
                            Value  = pass == 0 ? "a" : "b",
                        });
                        break;

                    default:
                        throw new NotImplementedException(property.Name);
                    }

                    var actual = (TileServerSettings)original.Clone();

                    switch (property.Name)
                    {
                    case nameof(TileServerSettings.ExpandoOptions):
                        Assert.AreEqual(original.ExpandoOptions.Count, actual.ExpandoOptions.Count);
                        Assert.AreNotSame(original.ExpandoOptions[0], actual.ExpandoOptions[0]);
                        Assert.AreEqual(original.ExpandoOptions[0].Option, actual.ExpandoOptions[0].Option);
                        Assert.AreEqual(original.ExpandoOptions[0].Value, actual.ExpandoOptions[0].Value);
                        break;

                    default:
                        var actualValue = property.GetValue(actual, null);
                        Assert.AreEqual(expected, actualValue, "for property {0}", property.Name);
                        break;
                    }
                }
            }
        }