示例#1
0
        public void WillRoundTrip()
        {
            var connection1Id   = Guid.NewGuid();
            var connection2Id   = Guid.NewGuid();
            var connection1     = new ExplicitConnection(connection1Id, "AAA", "BBB", "CCC", "DDD", "EEE");
            var connection2     = new ExplicitConnection(connection2Id, "111", "222", "333", "444", "555");
            var generalSettings = new GeneralSettings(5);
            var connectionCache = new ExplicitConnectionCache(new[] { connection1, connection2 });

            var data = Serializer.Stringify(connectionCache, generalSettings, new LayoutStructure(Enumerable.Empty <LayoutStructureWindow>()));
            var settingsContainer = Serializer.Objectify(data);

            settingsContainer.GeneralSettings.MaxItemCount.ShouldBe(generalSettings.MaxItemCount);
            settingsContainer.ExplicitConnectionCache.Get(connection1Id).Value.Id.ShouldBe(connection1Id);
            settingsContainer.ExplicitConnectionCache.Get(connection1Id).Value.AuthorisationKey.ShouldBe(connection1.AuthorisationKey);
            settingsContainer.ExplicitConnectionCache.Get(connection1Id).Value.CollectionId.ShouldBe(connection1.CollectionId);
            settingsContainer.ExplicitConnectionCache.Get(connection1Id).Value.DatabaseId.ShouldBe(connection1.DatabaseId);
            settingsContainer.ExplicitConnectionCache.Get(connection1Id).Value.Host.ShouldBe(connection1.Host);
            settingsContainer.ExplicitConnectionCache.Get(connection1Id).Value.Label.ShouldBe(connection1.Label);
            settingsContainer.ExplicitConnectionCache.Get(connection2Id).Value.Id.ShouldBe(connection2Id);
            settingsContainer.ExplicitConnectionCache.Get(connection2Id).Value.AuthorisationKey.ShouldBe(connection2.AuthorisationKey);
            settingsContainer.ExplicitConnectionCache.Get(connection2Id).Value.CollectionId.ShouldBe(connection2.CollectionId);
            settingsContainer.ExplicitConnectionCache.Get(connection2Id).Value.DatabaseId.ShouldBe(connection2.DatabaseId);
            settingsContainer.ExplicitConnectionCache.Get(connection2Id).Value.Host.ShouldBe(connection2.Host);
            settingsContainer.ExplicitConnectionCache.Get(connection2Id).Value.Label.ShouldBe(connection2.Label);

            settingsContainer.GeneralSettings.MaxItemCount.ShouldBe(generalSettings.MaxItemCount);
        }
        public ITabContentLifetimeHost RestoreTabContent(LayoutStructureTabItem tabItem)
        {
            var  connectionPropVal = tabItem.ReadProperty(ConnectionIdBackingStorePropertyName);
            Guid connectionId;
            ExplicitConnection explicitConnection = null;

            if (connectionPropVal != null && Guid.TryParse(connectionPropVal, out connectionId))
            {
                explicitConnection = _container.GetInstance <IExplicitConnectionCache>().Get(connectionId).ValueOrDefault();
            }

            var  fileIdPropVal = tabItem.ReadProperty(FileIdBackingStorePropertyName);
            Guid fileId;

            if (fileIdPropVal == null || !Guid.TryParse(fileIdPropVal, out fileId))
            {
                fileId = Guid.NewGuid();
            }

            var explicitArguments = new ExplicitArguments();

            explicitArguments.Set(typeof(Guid), fileId);
            explicitArguments.Set(typeof(ExplicitConnection), explicitConnection);

            var tabViewModel = _container.GetInstance <QueryDeveloperViewModel>(explicitArguments);

            PopulateDocument(tabViewModel);
            var disposable = Watch(tabViewModel);

            return(new TabContentLifetimeHost(tabViewModel, closeReason => Cleanup(closeReason, tabViewModel, disposable)));
        }
示例#3
0
        private async void RunQuery(ExplicitConnection explicitConnection, int?maxItemCount, string query, EventWaitHandle waitHandle, CancellationTokenSource source,
                                    DialogOpenedEventArgs args)
        {
            ResultSetExplorer.SelectedRow = -1;
            ResultSetExplorer.ResultSet   = null;

            await Task <ResultSet> .Factory
            .StartNew(() =>
            {
                ResultSet resultSet = null;

                Task.Factory.StartNew(async() =>
                {
                    resultSet = await RunQuery(explicitConnection, maxItemCount, query);
                    waitHandle.Set();
                }, source.Token);

                waitHandle.WaitOne();
                source.Token.ThrowIfCancellationRequested();

                return(resultSet);
            }, source.Token)
            .ContinueWith(task =>
            {
                ResultSetExplorer.ResultSet = task.IsCanceled ? new ResultSet("Cancelled") : task.Result;
                args.Session.Close();
            }, TaskScheduler.FromCurrentSynchronizationContext());
        }
示例#4
0
        public void MakesJson()
        {
            var connection1     = new ExplicitConnection(Guid.NewGuid(), "AAA", "BBB", "CCC", "DDD", "EEE");
            var connection2     = new ExplicitConnection(Guid.NewGuid(), "111", "222", "333", "444", "555");
            var generalSettings = new GeneralSettings(5);
            var connectionCache = new ExplicitConnectionCache(new[] { connection1, connection2 });

            var stringify = Serializer.Stringify(connectionCache, generalSettings, new LayoutStructure(Enumerable.Empty <LayoutStructureWindow>()));

            stringify.ShouldNotBeNullOrWhiteSpace();
        }
示例#5
0
        private static async Task <ResourceResponse <Document> > Save(ExplicitConnection explicitConnection, string content)
        {
            var jObject = JObject.Parse(content);

            var idToken = jObject["id"];

            using (var documentClient = new DocumentClient(new Uri(explicitConnection.Host), explicitConnection.AuthorisationKey))
            {
                var documentCollectionUri = UriFactory.CreateDocumentCollectionUri(explicitConnection.DatabaseId, explicitConnection.CollectionId);

                if (idToken == null)
                {
                    return(await documentClient.CreateDocumentAsync(documentCollectionUri, jObject));
                }
                return(await documentClient.UpsertDocumentAsync(documentCollectionUri, jObject));
            }
        }
示例#6
0
        public QueryDeveloperViewModel(Guid fileId, ExplicitConnection explicitConnection, IExplicitConnectionCache explicitConnectionCache, IHighlightingDefinition sqlHighlightingDefinition, ISnackbarMessageQueue snackbarMessageQueue, IDialogTargetFinder dialogTargetFinder)
        {
            if (explicitConnectionCache == null)
            {
                throw new ArgumentNullException(nameof(explicitConnectionCache));
            }

            FileId                   = fileId;
            _generalSettings         = new GeneralSettings(10);
            _explicitConnection      = explicitConnection;
            _explicitConnectionCache = explicitConnectionCache;

            FetchDocumentCommand    = new Command(o => QueryRunnerViewModel.Run($"SELECT * FROM root r WHERE r.id = '{DocumentId}'"));
            EditConnectionCommand   = new Command(sender => EditConnectionAsync((DependencyObject)sender));
            EditSettingsCommand     = new Command(sender => EditSettingsAsync((DependencyObject)sender));
            QueryRunnerViewModel    = new QueryRunnerViewModel(fileId, sqlHighlightingDefinition, () => _explicitConnection, () => _generalSettings, EditDocumentHandler, snackbarMessageQueue, dialogTargetFinder);
            DocumentEditorViewModel = new DocumentEditorViewModel(() => _explicitConnection, snackbarMessageQueue, dialogTargetFinder);

            SetName();
        }
示例#7
0
        private static async Task RunGetStarted(IManagementActionsController managementActionsController, IExplicitConnectionCache explicitConnectionCache)
        {
            var addDatabaseResult = await managementActionsController.AddDatabase(LocalEmulator.Host, LocalEmulator.AuthorisationKey);

            if (!addDatabaseResult.IsCompleted)
            {
                return;
            }
            var addCollectionResult = await managementActionsController.AddCollection(LocalEmulator.Host, LocalEmulator.AuthorisationKey, addDatabaseResult.ItemId);

            if (!addCollectionResult.IsCompleted)
            {
                return;
            }

            var explicitConnection = new ExplicitConnection(Guid.NewGuid(), $"localhost:{addDatabaseResult.ItemId}/{addCollectionResult.ItemId}",
                                                            LocalEmulator.Host, LocalEmulator.AuthorisationKey, addDatabaseResult.ItemId, addCollectionResult.ItemId);

            explicitConnectionCache.AddOrUpdate(explicitConnection);
        }
示例#8
0
        private async Task <ResultSet> RunQuery(ExplicitConnection explicitConnection, int?maxItemCount, string query)
        {
            try
            {
                _activeDocumentQuery?.Item1.Dispose();

                var documentClient = CreateDocumentClient(explicitConnection);
                var feedOptions    = new FeedOptions {
                    MaxItemCount = maxItemCount
                };
                var documentQuery = documentClient.CreateDocumentQuery(
                    UriFactory.CreateDocumentCollectionUri(explicitConnection.DatabaseId, explicitConnection.CollectionId), query,
                    feedOptions).AsDocumentQuery();

                _activeDocumentQuery = new Tuple <DocumentClient, IDocumentQuery <dynamic> >(documentClient, documentQuery);

                var results =
                    (await documentQuery.ExecuteNextAsync()).Select((dy, row) => new Result(row, dy.ToString()));

                _fetchMoreCommand.Refresh();

                return(new ResultSet(results));
            }
            catch (DocumentClientException de)
            {
                return(new ResultSet(de));
            }
            catch (AggregateException ae)
            {
                var documentClientException = ae.Flatten().InnerExceptions.First() as DocumentClientException;
                return(documentClientException != null
                    ? new ResultSet(documentClientException)
                    : new ResultSet(ae.Message));
            }
            catch (Exception e)
            {
                var baseException = e.GetBaseException();
                return(new ResultSet(baseException.Message));
            }
        }
示例#9
0
 private void SetConnection(ExplicitConnection explicitConnection)
 {
     _explicitConnection = explicitConnection;
     SetName();
 }
示例#10
0
 private static DocumentClient CreateDocumentClient(ExplicitConnection explicitConnection)
 {
     return(new DocumentClient(new Uri(explicitConnection.Host), explicitConnection.AuthorisationKey));
 }