예제 #1
0
        public static async Task <SwaggerDocumentViewModel> ToViewModelAsync(SwaggerSession session)
        {
            var doc = await SwaggerDocumentLoader.LoadFromUrlAsync(session.Url);

            var vm = new SwaggerDocumentViewModel(doc, session.Url, session.DisplayName);

            foreach (var storedOp in session.Operations)
            {
                var operation = vm.OperationGroups
                                .SelectMany(g => g)
                                .FirstOrDefault(op => op.OperationId == storedOp.Key);

                if (operation != null)
                {
                    operation.SelectedContentType = storedOp.Value.ContentType;

                    foreach (var storedArg in storedOp.Value.Arguments)
                    {
                        var parameter = operation.Arguments.FirstOrDefault(p => p.ParameterId == storedArg.Key);
                        await parameter.SetSerializedValueAsync(storedArg.Value);
                    }
                }
            }

            return(vm);
        }
        public async Task StoreAsync(SwaggerSession session)
        {
            await _initTask;

            if (!_sessions.TryGetValue(session.Url, out var info))
            {
                info = new SwaggerSessionInfo(session.DisplayName, session.Url, Guid.NewGuid());
                _sessions.Add(session.Url, info);
            }

            var sessionFile = await _folder.CreateFileAsync($"{info.Guid}.json", CreationCollisionOption.ReplaceExisting);

            var json = session.ToJson();
            await FileIO.WriteTextAsync(sessionFile, json);
        }
        public async Task <SwaggerSession> LoadAsync(string url)
        {
            await _initTask;

            if (!_sessions.TryGetValue(url, out var info))
            {
                throw new ArgumentException($"No stored session exists for URL '{url}'");
            }

            try
            {
                var sessionFile = await _folder.GetFileAsync($"{info.Guid.ToString()}.json");

                var json = await FileIO.ReadTextAsync(sessionFile);

                if (string.IsNullOrEmpty(json))
                {
                    return(EmptySession());
                }

                return(SwaggerSession.FromJson(json));
            }
            catch (FileNotFoundException)
            {
                // In case someone deleted the session file, just load the session without
                // filling in any parameter values
                return(EmptySession());
            }

            SwaggerSession EmptySession() => new SwaggerSession
            {
                Url         = url,
                DisplayName = info.DisplayName,
                Operations  = new Dictionary <string, SwaggerSession.StoredOperation>()
            };
        }