public MainWindowViewModel( Lazy <IApplication> application, IViewModelFactory viewModelFactory, IMessenger messenger, IDialogService dialogService, IQueryPersistenceService queryPersistenceService, AccountCommands accountCommands) { _application = application; _viewModelFactory = viewModelFactory; _messenger = messenger; _dialogService = dialogService; _queryPersistenceService = queryPersistenceService; _accountCommands = accountCommands; Tabs = new ObservableCollection <TabViewModelBase>(); Accounts = _viewModelFactory.CreateAccounts(); _messenger.Subscribe(this).To <NewQuerySheetMessage>((vm, message) => vm.OnNewQuerySheetMessage(message)); _messenger.Subscribe(this).To <OpenScriptMessage <CosmosStoredProcedure> >((vm, message) => vm.OnOpenScriptMessage(message, _viewModelFactory.CreateStoredProcedureEditor)); _messenger.Subscribe(this).To <OpenScriptMessage <CosmosUserDefinedFunction> >((vm, message) => vm.OnOpenScriptMessage(message, _viewModelFactory.CreateUserDefinedFunctionEditor)); _messenger.Subscribe(this).To <OpenScriptMessage <CosmosTrigger> >((vm, message) => vm.OnOpenScriptMessage(message, _viewModelFactory.CreateTriggerEditor)); _messenger.Subscribe(this).To <SetStatusBarMessage>((vm, message) => vm.OnSetStatusBarMessage(message)); MruList = new ObservableCollection <string>(_queryPersistenceService.LoadMruList()); LoadWorkspace(); }
public QuerySheetViewModel( QuerySheet querySheet, string?path, IContainerContext?containerContext, IViewModelFactory viewModelFactory, IDialogService dialogService, IMessenger messenger, IQueryPersistenceService queryPersistenceService) { _containerContext = containerContext; _queryPersistenceService = queryPersistenceService; _viewModelFactory = viewModelFactory; _dialogService = dialogService; _messenger = messenger; _filePath = path; _title = string.IsNullOrEmpty(path) ? "Untitled " + (++UntitledCounter) : Path.GetFileNameWithoutExtension(path); _text = querySheet.Text; _result = _viewModelFactory.CreateNotRunQueryResult(); _partitionKey = querySheet.PartitionKey; PartitionKeyMRU = new ObservableCollection <string>(); foreach (var mru in querySheet.PartitionKeyMRU) { PartitionKeyMRU.Add(mru); } Parameters = new ParametersViewModel <QueryParameterViewModel>(); foreach (var p in querySheet.Parameters) { Parameters.AddParameter(CreateParameter(p)); ShowParameters = true; } Parameters.AddPlaceholder(); Parameters.Changed += OnParametersChanged; Errors = new ViewModelValidator <QuerySheetViewModel>(this); Errors.AddValidator( vm => vm.PartitionKey, value => string.IsNullOrEmpty(value) || JsonHelper.TryParseJsonValue(value, out _) ? string.Empty : "Invalid partition key value"); _messenger.Subscribe(this).To <ExplorerSelectedContainerChangedMessage>( (vm, message) => vm.OnExplorerSelectedContainerChanged(message)); }
/// <summary> /// Query the data store /// </summary> public static FhirQueryResult Query(ClientRegistryFhirQuery querySpec, List <IResultDetail> details) { // Get the services IClientRegistryDataService dataService = ApplicationContext.CurrentContext.GetService(typeof(IClientRegistryDataService)) as IClientRegistryDataService; IQueryPersistenceService queryService = ApplicationContext.CurrentContext.GetService(typeof(IQueryPersistenceService)) as IQueryPersistenceService; try { if (querySpec.Quantity > 100) { throw new ConstraintException("Query limit must not exceed 100"); } if (dataService == null) { throw new InvalidOperationException("No persistence service has been configured, queries cannot continue without this service"); } FhirQueryResult result = new FhirQueryResult(); result.Query = querySpec; result.Issues = new List <DetectedIssue>(); result.Details = details; result.Results = new List <SVC.Messaging.FHIR.Resources.ResourceBase>(querySpec.Quantity); VersionedDomainIdentifier[] identifiers; RegistryQueryRequest queryRequest = new RegistryQueryRequest() { QueryRequest = querySpec.Filter, QueryId = querySpec.QueryId != Guid.Empty ? querySpec.QueryId.ToString() : null, QueryTag = querySpec.QueryId != Guid.Empty ? querySpec.QueryId.ToString(): null, IsSummary = !querySpec.IncludeHistory, Offset = querySpec.Start, Limit = querySpec.Quantity }; // Is this a continue? queryRequest.IsContinue = (!String.IsNullOrEmpty(queryRequest.QueryId) && queryRequest.Offset > 0); var dataResults = dataService.Query(queryRequest); details.AddRange(dataResults.Details); result.TotalResults = dataResults.TotalResults; // Fetch the results foreach (HealthServiceRecordContainer res in dataResults.Results) { if (res == null) { continue; } var resultSubject = res.FindComponent(HealthServiceRecordSiteRoleType.SubjectOf) as HealthServiceRecordContainer ?? res; var processor = FhirMessageProcessorUtil.GetComponentProcessor(resultSubject.GetType()); if (processor == null) { result.Details.Add(new NotImplementedResultDetail(ResultDetailType.Error, String.Format("Will not include {1}^^^&{2}&ISO in result set, cannot find converter for {0}", resultSubject.GetType().Name, resultSubject.Id, ApplicationContext.ConfigurationService.OidRegistrar.GetOid("CR_CID").Oid), null, null)); } else { result.Results.Add(processor.ProcessComponent(resultSubject, details)); } } // Sort control? // TODO: Support sort control but for now just sort according to confidence then date //retVal.Sort((a, b) => b.Id.CompareTo(a.Id)); // Default sort by id //if (queryPersistence != null) // result.TotalResults = (int)queryPersistence.QueryResultTotalQuantity(querySpec.QueryId.ToString()); //else // result.TotalResults = retRecordId.Count(o => o != null); return(result); } catch (Exception ex) { Trace.TraceError(ex.ToString()); details.Add(new PersistenceResultDetail(ResultDetailType.Error, ex.Message, ex)); throw; } }